抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

今天遇到了一个问题,部署的应用test.zxj.com, 直接访问域名可以跳转到登录页(test.zxj.com/login),但是在登录页一点刷新页面,或者直接在地址栏输入test.zxj.com/login,就访问不到。

问题的原因就是nginx的配置中没有配try_files。

1
2
3
4
5
location / {  
root /opt/atp/dist;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}

(以上配置,root是前端代码存放的路径,前后端分离)

当用户请求 http://test.zxj.com/example 时,这里的$uri就是/example。

try_files 会到硬盘里尝试找这个文件。如果存在名为/$root/example(其中$root是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。

显然,目录中没有叫 example 的文件。然后就看$uri/,增加了一个 /,也就是看有没有名为/$root/example/的目录。

又找不到,就会 fall back 到 try_files 的最后一个选项 /index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到 http://test.zxj.com/index.html

评论