华为云 ECS + Nginx 持久化部署单文件 2048:一次完整的公网上线实践
背景
参与开放能力闯关时,很多任务要求的不只是“本地跑起来”,而是提供一个能持续访问的公网地址。本文以单文件 2048 静态页面为例,记录如何用华为云 ECS 和 Nginx 完成持久化部署,并给出可直接复用的配置、验证命令与排错思路。
这次的目标很明确:
- 页面只有一个静态文件,不需要数据库和后端服务;
- 使用 ECS 的弹性公网 IP 对外提供访问;
- 重启实例后服务仍能正常运行;
- 上线后可以通过 HTTP 状态码和页面内容进行验证。
一、准备 ECS 与网络
创建一台 Linux ECS,并绑定弹性公网 IP。对于这种纯静态页面,1 vCPU / 2 GB 的规格已经足够,系统盘 40 GB 即可。系统可以选择 Ubuntu 22.04 或 24.04。
安全组至少需要放行:
- TCP 22:用于 SSH 登录,建议限制为自己的管理地址;
- TCP 80:用于 HTTP 访问。
如果暂时没有配置域名,可以直接用 ECS 的弹性公网 IP 验证。安全组规则修改后通常即时生效,但如果页面仍然超时,先检查实例是否真的绑定了 EIP,再检查安全组方向是否正确。
登录实例后先确认系统版本和 Nginx 状态:
cat /etc/os-release
sudo systemctl status nginx --no-pager
如果 Nginx 尚未安装,执行:
sudo apt-get update
sudo apt-get install -y nginx
二、放置静态文件
建议不要把业务文件直接放进默认站点目录,而是建立独立目录,便于后续替换和回滚:
sudo install -d -m 0755 /var/www/hc-activity
sudo install -m 0644 index.html /var/www/hc-activity/index.html
这里的 index.html 就是单文件 2048 页面。先在服务器本机做一次最基础的检查:
curl -I http://127.0.0.1/hc-activity/index.html
如果返回 404,说明文件路径或 Nginx 配置还没有对上;如果返回 200 但页面空白,优先检查 HTML、JavaScript 和资源路径是否正确。
三、配置 Nginx 站点
新建站点配置:
sudo tee /etc/nginx/sites-available/hc-activity >/dev/null <<'EOF'
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/hc-activity;
index index.html;
location / {
try_files $uri $uri/ =404;
}
add_header X-Content-Type-Options nosniff always;
add_header Cache-Control "public, max-age=3600" always;
}
EOF
启用配置并做语法检查:
sudo ln -sfn /etc/nginx/sites-available/hc-activity /etc/nginx/sites-enabled/hc-activity
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
这里有两个容易忽略的点:
nginx -t通过后再 reload,避免把错误配置直接加载到线上;- 如果保留默认站点并同时声明
default_server,Nginx 可能启动失败,因此先移除默认站点的软链接。
四、验证公网访问
从本机或另一台机器执行:
curl -I http://<ECS_EIP>/hc-activity/index.html
curl -s http://<ECS_EIP>/hc-activity/index.html | head
应至少确认三件事:
- HTTP 状态码为 200;
- 响应体中出现页面的关键内容,而不是 Nginx 默认欢迎页;
- 重启 ECS 后再次访问仍然成功。
为了验证持久化,可以重启 Nginx:
sudo systemctl restart nginx
sudo systemctl is-enabled nginx
sudo systemctl is-active nginx
正常结果应分别是 enabled 和 active。
五、常见问题排查
1. 浏览器一直超时
先检查 EIP 与安全组,再检查实例内部防火墙和 Nginx 监听端口:
curl -I http://127.0.0.1/
sudo ss -lntp | grep ':80'
2. 返回 403 Forbidden
通常是目录权限或 index.html 权限不合适。确认 Nginx 进程能够读取目标文件,并检查路径是否与配置中的 root 一致。
3. 返回 404 Not Found
检查 URL 是否包含 /hc-activity/,以及文件是否确实位于 /var/www/hc-activity/index.html。如果使用了 try_files,还要确认文件符号链接没有被安全策略拦截。
4. 页面能打开但样式或脚本异常
静态站点的资源路径应以实际部署路径为准。单文件页面通常没有外部依赖,但若引用了 CDN 资源,需要确认网络可达;更稳妥的做法是将必要资源一并托管到 ECS。
六、上线后的基本加固
公网静态站点也应遵守最小暴露原则:
- SSH 只放行可信来源,优先使用密钥登录;
- 不在网页、脚本或代码仓库中写入 AK/SK、Cookie 等凭据;
- 定期更新系统和 Nginx;
- 配置域名后再申请 HTTPS 证书,避免长期使用明文 HTTP;
- 保留旧版本文件或发布包,出现问题时可以快速回滚。
总结
单文件静态页面的持久化部署并不复杂,关键是把网络、文件路径、Nginx 配置和验证链路做成可重复的步骤。完成一次部署后,最好立即用“状态码 + 响应内容 + 重启验证”三条证据确认结果,而不是只看控制台显示成功。
这套方法同样适用于个人主页、活动落地页、演示 Demo 和小型工具站。后续如果有域名,可以在当前结构上增加 HTTPS 和自动续期,而不需要改动页面本身。
- 点赞
- 收藏
- 关注作者
评论(0)