问题
刷新或者在地址栏 去掉 /
后访问,nginx 报 301 并且跳转到 端口为 nginx 监听的端口
原因
nginx 在找不到文件之后,由于 absolute_redirect
项打开并且 port 默认是他监听的 80端口,301重定向到了 host:80/url
处, 即 Location: host:80/url
处
nuxt dist 文件目录部署的项目中,nginx 未将端口信息传到服务器中,让服务器进行解析,导致服务器未正确 redirect 端口号
解决方案
- 添加
absolute_redirect off;
将重定向地址去掉 host 和port 部分,只留下 url部分
配置如下:
server {
listen 80 default_server;
listen [::]:80 default_server;
proxy_set_header Host $host:$server_port;
index index.html ;
port_in_redirect off;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
root /var/www/html/dist;
index index.html index.htm;
try_files $uri $uri/ @router;
}
location @router {
rewrite ^.*$ /index.html last;
}
}
在修改后使用nginx -s reload命令(可能需要root权限)加载修改后的配置即可。在使用该命令之前也可使用nginx -t命令检查配置正确性。
参考资料
[1] https://www.ghosind.com/2020/08/14/react-404-after-reload
[2] https://segmentfault.com/a/1190000020521708