記一次解決“Nginx 修改root路徑後無法生效”的問題解決歷程。
在使用Nginx搭建一個靜態網站的時候,想要通過讓Nginx轉發某個請求到後臺的指定靜態文件,最初修改的Nginx的部分配置如下:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html;
}
# ...
location /login.html {
root www;
}
location /js/agree.js {
root www;
}
}
和Nginx安裝目錄同一級,負責展示前端頁面的有兩個文件夾:html
和www
。其中html
是Nginx默認就有的,存放一些Nginx默認展示的前端頁面。www
是我創建的,用於存放我想搭建的那個網站的前端頁面代碼。
網站的登陸頁面 login.html 倒是可以正常展示,資源的尋找路徑也正常,即:www/login.html
。但是通過 login.html 請求的 /js/agree.js 的尋找路徑卻沒有按照我預想的發展,它的資源尋找路徑按理來說應該是:www/js/agree.js
,因爲我已經在Nginx配置文件(nginx.conf)中添加了對應的location
塊,在location
塊中指明瞭root
爲www,但是實際上 agree.js 的尋找路徑卻是:html/js/agree.js
。
這個問題讓我很費解,通過閱讀Nginx的官方文檔,Nginx官方文檔中指出:推薦在location
塊中使用alias
來指明資源路徑,而建議不要使用root
。於是我對Nginx配置文件做了如下更改:
location /js/ {
alias /www/js/;
}
按理來說,這樣應該可以了,我當時也是這麼想的,但是事實還是和修改前一摸一樣。argee.js 文件的尋找路徑依然是 /html/js/argee.js
。
於是我做了很多嘗試,此處省略兩千字……
最後,我換了一個思路,把網站的根目錄(注意不是root的意思)也放到 www 文件夾內,即:
location / {
root www;
index index.html;
}
做了這個修改之後,再次重啓Nginx(當前處於Nginx安裝目錄下):
sbin/nginx -s reload
再次訪問,世界清淨了…
PS:我最後也沒有搞懂爲什麼這裏root路徑修改後會無法生效,只是在最後做出了妥協,如果有讀者大佬知道是什麼情況,歡迎指點,感激不盡~