浏览器访问远程服务器IP是否默认解析到80端口?Docker端口映射问题咨询
该现象的核心原理
这个差异是HTTP协议默认端口规则和Docker端口映射逻辑共同作用的结果,具体解释如下:
1. HTTP协议默认端口规则
- 浏览器发起HTTP请求时,如果用户没有在地址栏手动指定端口,会自动补全默认端口:HTTP协议默认补
80,HTTPS协议默认补443。 - 你直接访问
<MY_INSTANCE_IP>时,浏览器实际请求的是<MY_INSTANCE_IP>:80,如果宿主机80端口没有对应服务监听,请求就会失败。 - 当你配置端口映射为
1337:80时,只有宿主机的1337端口绑定了Nginx服务,所以必须在地址栏手动添加:1337指明端口才能正常访问。
2. Docker端口映射规则
Docker端口映射的语法为宿主机端口:容器内部端口,冒号两侧的含义分别是:
- 左侧:你的云服务器/物理机对外暴露的公网端口,用户请求需要命中这个端口才能转发到对应容器
- 右侧:容器内部服务实际监听的端口
结合你的配置可以明确:
- 你的Nginx容器内部配置了
listen 80,也就是Nginx在容器内监听的是80端口 - 当你配置
80:80时,宿主机80端口的流量会直接转发到Nginx容器的80端口,刚好匹配浏览器默认补全的端口,因此直接访问IP就能正常打开站点 - 当你配置
1337:80时,只有宿主机1337端口的流量会转发到Nginx容器的80端口,因此必须手动指定端口才能访问
你给出的docker-compose配置和Nginx反向代理配置本身没有逻辑问题,这个现象属于网络基础规则的正常表现。
内容的提问来源于stack exchange,提问作者sat1017
相关产品推荐
相关产品推荐

