Nginx 部署静态页到子路径后 404 或 403,按这个顺序查
Nginx 部署静态页到子路径后 404 或 403,按这个顺序查
把静态页挂到已有站点的子路径下,是件看起来很简单的事:一个 index.html,一段 location,scp 上去,reload 完事。但真做的时候经常是打开 404,改一改又变成 403。这篇把排查顺序记下来,下次不用从头试。
一、先分清 404 还是 403
404 表示 Nginx 根本没把请求映射到某个文件;403 表示文件找到了,但 worker 进程读不了,或者目录里没有 index 文件又不允许列目录。两者原因完全不同,先拿状态码再动手,比在浏览器里反复刷新有效得多——浏览器还有缓存和 Service Worker 干扰。
二、404 多数是 alias 和 root 用错
root 是把 location 的路径拼到磁盘目录后面,alias 是直接替换,所以结尾斜杠必须对齐:
location 以 / 结尾,alias 也必须以 / 结尾。少一个斜杠,/demo/index.html 会被拼成 /data/www/hc-demoindex.html,必然 404。单页应用还要补 try_files,让刷新子路由不至于落到空白:
三、403 基本都是权限
worker 一般以 nginx 或 www-data 身份运行,它需要对整条路径都有 x 权限,对文件有 r 权限。最常见的坑是目录放在 /root 或 /home 下,中间某一层被建成 700。一条命令就能看出来:
把路径链统一成 755、文件 644,再 nginx -t && nginx -s reload 就行,reload 不会断开现有连接。
四、别漏了安全组
本机 curl 通、外面打不开,那就不是 Nginx 的事:ss -tlnp | grep :80 确认在监听,再去控制台看安全组有没有放行 80。
最后一句提醒:机器上如果已经有别的服务占着 80/443,不要顺手改它的配置去塞静态文件,单独加一个 location 或换个子路径更安全——线上改错一行,整站都挂。
- 点赞
- 收藏
- 关注作者
评论(0)