Nginx 托管静态站点:从部署到排错的完整检查清单

举报
yd_262967087 发表于 2026/10/26 06:00:33 2026/10/26
【摘要】 页面打不开,八成不是 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,以后上线就能一次过。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。