nginx同域名下配置兩個站點問題

現(xiàn)在有兩個靜態(tài)前端靜態(tài)項目: projectA, projectB, 需要配置成如:
www.test.com 指向A項目, www.test.com/b 指向B項目

  1. 先說正確結果, nginx 配置如下:
server {
 listen 80;
 server_name www.test.com;
    location / {
      root  /data/projectA;
      try_files $uri $uri/  /index.html;
    }
    location /b {
       root  /data/projectB;
      ## 注意這里面的 /projectB/index.html, vue里面,如果不寫這個的話, 會有問題, 如直接訪問: www.test.com/b/packing/index , 會去訪問/data/projectA/index.html文件 , 不符合我的效果, 所以這里讓它尋找一下: /projectB/index.html 就可以了
       try_files $uri $uri/  /projectB/index.html;
   }
  access_log /data/logs/nginx/www.test.com.access.log main;
  error_log /data/logs/nginx/www.test.com.error.log;
}
  1. 再說一下坑
    剛開始配置的時候,訪問: www.test.com/b/js/test.js nginx會報404錯, 看到nginx錯誤,

[error] 27786#27786: *1487762 open() "/etc/nginx/html/js/test.js" failed (2: No such file or directory)

根本不是我配置的root路徑, 就很奇怪, 大概配置如下:

server {
 listen 80;
 server_name www.test.com;
    location / {
      root  /data/projectA;
      try_files $uri $uri/  /index.html;
    }
    location /b {
       root  /data/projectB;
       try_files $uri $uri/  /projectB/index.html;
   }

   location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
    access_log off;
  }

  location ~ .*\.(js|css)$ {
    expires 12h;
    access_log off;
  }
  access_log /data/logs/nginx/www.test.com.access.log main;
  error_log /data/logs/nginx/www.test.com.error.log;
}

  1. 發(fā)現(xiàn)問題:
    后來發(fā)現(xiàn) , 在上面有做 js緩存 ,有這個代碼
location ~ .*\.(js|css)$ {
    expires 12h;
    access_log off;
  }

這是區(qū)分大小寫的正則匹配, nginx中, 如果匹配到了這個location 就不會去找別的配置的location了, 最后把這個去掉就正常了, 這個問題找了好久 = =

  1. 關于匹配的規(guī)則文檔
nginx的優(yōu)先匹配規(guī)則

模式  含義
location = /uri = 表示精確匹配,只有完全匹配上才能生效
location ^~ /uri    ^~ 開頭對URL路徑進行前綴匹配,并且在正則之前。
location ~ pattern  開頭表示區(qū)分大小寫的正則匹配
location ~* pattern 開頭表示不區(qū)分大小寫的正則匹配
location /uri   不帶任何修飾符,也表示前綴匹配,但是在正則匹配之后
location /  通用匹配,任何未匹配到其它location的請求都會匹配到,相當于switch中的default

順序不等于優(yōu)先級:

(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑) > (/), 

tip : location 配置與書寫順序無關, 看他的優(yōu)先級, 然后看最大匹配

  1. 參考的兩個文檔:
    https://blog.csdn.net/why_still_confused/article/details/109953803
    https://blog.csdn.net/z69183787/article/details/78628671
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容