AI摘要

本文描述了在使用Docker部署Nginx-PHP网站时,因客户安全要求更换端口至10080后网站无法访问的问题。经过排查,发现问题在于现代浏览器对非标准HTTP端口(如10080)的访问行为进行限制或警告。解决方案是更换监听端口,避开浏览器屏蔽的端口,如使用8080、8888、3000等常见Web端口,或者启用HTTPS并使用标准端口443。

故障报告:浏览器无法访问 Docker Nginx 服务端口 10080

背景

使用 Docker 部署了一个 Nginx-PHP 网站,因客户对于安全要求限制要求使用 10000 以上端口。

nginx 默认是 80 端口,就听从客户要求直接更换为 10080,完成更改后网站无法访问,陷入挠头排查中。


一、问题描述

部署了一个 Nginx 容器服务,端口映射为:

-p 10080:80

外部访问地址为:

http://<公网IP>:10080

服务器本地使用 curl 可正常访问,外部电脑可 telnet 成功,但在浏览器中访问时却无法加载页面。

image.png


二、环境信息

  • 宿主机系统:Ubuntu 20.04+
  • Docker 容器镜像registry.cn-hongkong.aliyuncs.com/i0i/nginx:1.26
  • 容器名称nginx-etp
  • 映射端口:本地 10080 -> 容器 80
  • 浏览器测试环境:Chrome、Edge(多个系统)
  • 安全策略

    • 防火墙:已关闭
    • 云服务器安全组:10080端口已开放
    • Nginx 配置监听端口为 10080

三、排查过程

排查项排查方法结果
容器是否正常运行docker ps 查看状态正常运行
端口映射是否生效docker port 命令10080/tcp -> 0.0.0.0:10080
容器内端口监听状态netstat/ss 不可用,使用 curl 代替curl http://127.0.0.1:80 正常
宿主机是否可访问curl http://localhost:10080成功
外部网络是否连通telnet <IP> 10080成功
浏览器访问是否成功访问http://<公网IP>:10080无法访问

四、根本原因分析

原因定位:

现代浏览器(如 Chrome)默认会对某些 非标准 HTTP 端口 的访问行为进行 限制或警告。当访问一个非标准端口(如 10080)时,浏览器可能会认为其“不安全”,从而主动阻断或警告。

Chrome 明确列出了一些“被屏蔽”的端口范围,如:

  • 1–1023(保留)
  • 6000、6665–6669、10080 等

参考资料:


五、解决方案

推荐方案:

更换监听端口,避开浏览器屏蔽的端口,如:

  • 使用 808088883000 等常见 Web 端口

示例修改:

server {
  listen 8080;
  server_name www.etp.com;
  ...
}

Docker 启动参数同步修改:

-p 8080:80

访问地址修改为:

http://<公网IP>:8080

其他临时解决方法:

  • 使用服务器curl 进行接口联调(仅限开发)
  • 配置本地代理,将请求转发至安全端口(不推荐)
  • 启用 HTTPS 并使用标准端口 443(推荐正式环境)

六、总结

此次问题并非 Nginx 或 Docker 配置错误,而是浏览器出于安全策略对特定端口(如 10080)做了阻断处理,导致访问失败。解决该问题的根本方式是避开受限端口或采用 HTTPS 标准端口进行部署

点背:10000以上端口被拦截的只有10080

image.png

正文到此结束
  • 本文作者:xinyu.he
  • 文章标题:记一次网站更换端口无法访问的“坑”!
  • 本文地址:https://www.hxy.bj.cn/archives/611/
  • 版权说明:若无注明,本文皆Xinyu.he blog原创,转载请保留文章出处。
最后修改:2025 年 08 月 09 日
如果觉得我的文章对你有用,请随意赞赏