记一次解决“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路径修改后会无法生效,只是在最后做出了妥协,如果有读者大佬知道是什么情况,欢迎指点,感激不尽~