DevBridge 隧道 + Nginx 子路径:把静态页面安全发布到已有 ECS 站点

举报
loker 发表于 2026/10/31 14:15:39 2026/10/31
【摘要】 在已经跑着业务站点的 ECS 上新增一个静态演示页,既要能公网访问、又不能动老业务的 root 路由。这篇记录两条路:用 DevBridge 开一条临时隧道做联调,再用 Nginx 精确匹配一条 location 落地到生产主机。

场景

一台已经在跑业务站点的云服务器(Ubuntu + Nginx,反代到本地某个应用端口),现在需要额外挂一个静态演示页给外部评审访问。 硬性约束有两条:不能修改现有的 location / 反向代理规则,也不能重启整个 Nginx 服务影响在线的连接。

第一步:先用隧道把页面跑起来

联调阶段没必要动服务器。在本地用任意静态服务器把页面跑起来:

python3 -m http.server 8081 --bind 0.0.0.0

再用内网穿透工具把本地端口映射成公网 HTTPS 地址,拿到一个形如 https://<tunnel-id>-8081.<tunnel-domain> 的临时入口。

这一步有两个容易踩的点:

  • 隧道必须允许匿名访问。如果开了鉴权,外部评审看到的是一个登录页而不是你的页面,抓取类访问也会全部失败。
  • 端口写对。隧道绑定的本地端口要和静态服务器实际监听的端口一致,否则隧道在线但返回 502。

提交任何外部地址之前,先自己 curl 一次确认 200:

curl -s -o /dev/null -w '%{http_code}\n' https://<tunnel-id>-8081.<tunnel-domain>/

第二步:落到生产主机上

隧道是临时的,长期入口要走 ECS。核心是用精确匹配的 location 加一条新路径,而不是改 root。把静态资源放到 /var/www/hc-activity/,然后在对应的站点配置里插入:

location ^~ /hc-activity/ {
    alias /var/www/hc-activity/;
    index index.html;
    try_files $uri $uri/ /hc-activity/index.html;
}

几个关键细节:

  1. 用 alias 而不是 root。用 root 时 Nginx 会把完整的 URI 追加到路径后面,/hc-activity/index.html 会被解析成 .../hc-activity/hc-activity/index.html,直接 404。用 alias 时 location 和 alias 两边的结尾斜杠必须都在。
  2. ^~ 前缀让这条规则优先于正则 location,避免被上层的 .html 或缓存规则抢走。
  3. 先备份再改,改完只 reload:
    cp /etc/nginx/sites-available/site /etc/nginx/sites-available/site.bak.$(date +%s)
    nginx -t && systemctl reload nginx
    reload 是平滑重载,不会掐断已建立的连接;restart 会。

验证顺序

curl -s -o /dev/null -w '%{http_code}\n' http://<ECS-IP>/hc-activity/index.html
curl -s -o /dev/null -w '%{http_code}\n' http://<ECS-IP>/            # 老业务必须仍然是 200

两条都要 200 才算完成:新路径可达,老站点的行为一点没变。如果第二条变成了 404 或 502,说明 alias 写错了或者动了上层 location,立即回滚备份。

小结

隧道负责「现在就能看到」,ECS + alias 负责「长期可访问」。在存量主机上做增量发布,最重要的不是把新功能跑通,而是证明老功能没受影响——备份、nginx -t、平滑 reload、双 URL 验证,这四步比任何优化都值钱。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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