Nginx 托管静态站点:从部署到排错的完整检查清单
一、按现象定位
| 现象 | 最可能的原因 |
|---|---|
| 连接超时 | 安全组/防火墙没放行端口 |
| 403 Forbidden | 文件权限,Nginx 用户读不到 |
| 404 Not Found | 路径对不上,或 root 配置错 |
| 502 Bad Gateway | 反代的后端没起来 |
| 200 但内容空白 | 缓存,或前端路由问题 |
先按这个表定位方向,比盲目改配置快得多。
二、超时:先查安全组
很多人第一反应是查 Nginx,实际上如果**云厂商安全组没放行**,本机 `curl localhost` 永远是通的,外网永远不通。
验证方法:
# 在外部机器上测端口是否可达
timeout 5 bash -c '
如果 CLOSED,先查:
ufw status # 本机防火墙
ss -tlnp | grep :80 # 服务是否真的在监听 0.0.0.0
本机都放行了还不通,就是云平台安全组的问题,去控制台加规则。
三、403:权限问题
Nginx worker 通常以 `www-data`(Debian/Ubuntu)或 `nginx`(RHEL)运行。文件必须对它可读:
chown -R www-data:www-data /var/www/html/mysite
chmod -R 755 /var/www/html/mysite
还要注意**父目录**的权限。即使文件是 644,如果上级目录是 700 且属主不是 www-data,一样读不到。
四、404:路径与 root 的配合
location /hc-activity/ {
alias /var/www/html/hc-activity/;
}
`alias` 和 `root` 的区别很容易搞混:
• `root /var/www/html;` + `location /site/` → 实际找 `/var/www/html/site/...`
• `alias /var/www/html/site/;` → 实际找 `/var/www/html/site/...`
`alias` 末尾的斜杠很关键。少一个斜杠,路径就拼错。
五、部署到子路径而不是根目录
建议把项目放在子路径,比如 `/usr/share/nginx/html/myproj/index.html`,而不是直接扔根目录。
好处:
• 同一台 Nginx 可以并行托管多个项目
• 下线某个项目只需删目录,不影响其他
• 便于统一做访问日志和限流
六、必须从外部验证
curl -sI http://YOUR_PUBLIC_IP/myproj/index.html
期望 `HTTP/1.1 200 OK` 和正确的 `Content-Type`。
只在机器上 `curl localhost` 通过是不够的——那只证明 Nginx 活着,不证明外网可达。
七、服务自启别忘
systemctl enable nginx
systemctl is-enabled nginx
然后**主动做一次重启验证**:重启机器,再 curl 一次。这一步花不了一分钟,但能避免「演示当天掉链子」。
八、加个访问日志方便排错
access_log /var/log/nginx/myproj.access.log;
error_log /var/log/nginx/myproj.error.log warn;
多个项目分开日志,出问题时不用在几十万行里翻。
小结
静态站点部署的技术难度很低,真正容易翻车的是三件事:安全组、文件权限、以及「只在本机验证过」。把这三条写进 checklist,以后上线就能一次过。
- 点赞
- 收藏
- 关注作者
评论(0)