核心配置如下(修改前,未生效)
location = / {
root /opt/www/static/;
index index.html;
}
location / {
root /opt/www/resource/;
}
当访问首页时,仍然匹配/opt/www/resource/
修改后(可以精准匹配首页)
location = / {
root /opt/www/static/;
#index index.html;
try_files /index.html =404;
}
location / {
root /opt/www/resource/;
}
问题原因
当访问/
时,nginx内部发生重定向,重定向至/index.html
,所以= /
未生效,添加try_files /index.html =404;
取消触发内部重定向。
补充
在我的项目中,首页是一个单独的目录,其他页面是另一个目录,经过以上配置后,首页的index.html访问无问题,但是首页用到的图片、js等静态资源仍然无法正常访问,因为这些静态资源被认为在/opt/www/resource/;
目录下,所以需要对首页的静态资源单独处理。
所有配置如下
# 首页
location = / {
root /opt/www/static/;
#index index.html;
try_files /index.html =404;
}
# 首页图片
location ^~ /ssr-assets/ {
root /opt/www/static/;
}
# 首页js
location ^~ /_next/ {
root /opt/www/static/;
}
# 其他
location / {
root /opt/www/resource/;
}
``