Nginx root路徑修改後無法生效解決方案

記一次解決“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安裝目錄同一級,負責展示前端頁面的有兩個文件夾:htmlwww。其中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路徑修改後會無法生效,只是在最後做出了妥協,如果有讀者大佬知道是什麼情況,歡迎指點,感激不盡~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章