通过浏览器访问远程服务器 IP 地址是不是默认解析为端口 80?

Posted

技术标签:

【中文标题】通过浏览器访问远程服务器 IP 地址是不是默认解析为端口 80?【英文标题】:Does accessing a remote server IP address via the browser default resolve to port 80?通过浏览器访问远程服务器 IP 地址是否默认解析为端口 80? 【发布时间】:2021-12-29 00:58:15 【问题描述】:

我有一个使用 nginx 作为反向代理的容器化应用程序。如果我将 nginx 端口映射为1337:80,我只能通过<MY_INSTANCE_IP>:1337 访问我的网站。如果我将 nginx 端口映射为80:80,我可以通过<MY_INSTANCE_IP> 访问我的网站。更改我的 docker-compose 文件中的端口有效,但我想知道原因。

我的 docker-compose 配置:

version: '3.7'

services:
  web:
    build:
      context: .
      dockerfile: ./compose/production/flask/Dockerfile
    image: flask_web
    command: /start
    volumes:
      - .:/app
    expose:
      - 5000
    env_file:
      - .env/.prod
    environment:
      - FLASK_APP=app

  nginx:
    build: ./compose/production/nginx
    ports:
      - 80:80
    depends_on:
      - web

我的 nginx 配置:

upstream flask-app 
    server web:5000;


server 
    listen 80;
    server_name <MY_INSTANCE_IP>;
    location / 
        proxy_pass http://flask-app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
        # client_max_body_size 20M;
    

【问题讨论】:

【参考方案1】:

因此,您已将 nginx 设置为侦听端口 80(默认 http)。当你在 docker-compose 中为你的 nginx 服务设置端口时,第一个数字是 docker 将在主机上“发布”服务的端口,第二个数字,在冒号 (:) 之后,是服务器正在侦听的端口“内部”容器。看: https://docs.docker.com/config/containers/container-networking/#published-ports 了解更多详情。

【讨论】:

我知道端口是如何工作的,这不是问题所在。问题是为什么我不需要像端口 1337 配置那样显式键入端口 80 来访问 IP 啊啊啊,我明白了。这是因为 http 协议的默认端口是 80,所以您的浏览器会自动假定 http 使用端口 80,https URL 使用端口 443 啊,谢谢。我有点认为它会自动执行此操作,但在任何地方都找不到。

以上是关于通过浏览器访问远程服务器 IP 地址是不是默认解析为端口 80?的主要内容,如果未能解决你的问题,请参考以下文章

DNS系统的解析原理

一个网站用域名可以访问,用ip不能访问,是为啥?

http协议工作原理(精简)

为Horizon虚拟桌面配置动态公网IP地址远程访问

WCF发布后远程访问的域名解析问题

WCF发布后远程访问的域名解析问题