一个外网IP地址如何发布多个内网服务器上的多个网站不改默认端口

  1. AutoCMS
  2. /
  3. 建站资讯
  4. /
  5. 网站
logo
元斌磊

网站  2026-09-28 02:00:03   130

一个外网IP地址如何发布多个内网服务器上的多个网站不改默认端口

一个公网IP想发布内网多台服务器上的多个网站,外部访问还不带端口,靠的不是给每台服务器都做端口映射,而是把80和443入口集中到一台反向代理上。路由器只把公网IP的80、443映射到这台反向代理,其他内网服务器不直接暴露。用户访问时永远走默认端口,反向代理根据请求里的域名,把流量转发到对应的内网IP和端口。这个做法成熟,成本也低,一台旧电脑装Nginx都能跑。

假设你有三个网站:a.example.com放在192.168.1.10的80端口,b.example.com放在192.168.1.11的8080端口,c.example.com放在192.168.1.12的3000端口。公网IP是1.2.3.4。DNS里把三个域名都解析到1.2.3.4,A记录即可。路由器上只做两条端口映射:TCP 80到192.168.1.2:80,TCP 443到192.168.1.2:443,这台192.168.1.2就是反向代理。内网服务器不需要映射,也不需要改端口。

Nginx配置大致这样:

server {
   listen 80;
   server_name a.example.com;
   location / {
   proxy_pass http://192.168.1.10:80;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
  }

server {
   listen 80;
   server_name b.example.com;
   location / {
   proxy_pass http://192.168.1.11:8080;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
  }

server {
   listen 80;
   server_name c.example.com;
   location / {
   proxy_pass http://192.168.1.12:3000;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   }
  }

外网访问http://a.example.com、http://b.example.com、http://c.example.com,都不带端口。后端监听什么端口,反向代理知道就行。新增网站时,DNS加一条A记录,Nginx加一个server块,nginx -s reload,不用动路由器,也不用给新服务器配公网映射。一个公网IP可以带几十个甚至上百个站点,限制主要是带宽和反向代理性能。

HTTPS同理。让Nginx监听443 ssl