LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Nginx 共用一个公网IP实现多域名转发映射的原理和实战

admin
2025年7月21日 0:11 本文热度 144

一、Nginx 多域名转发的原理

在实际产品架构中,常常需要在同一台服务器/同一 IP 地址上部署多个网站或服务。Nginx 的多域名转发功能可以很好地解决这个问题。它的原理是:Nginx 会读取每个 HTTP 请求里的 Host 头,根据这个信息判断用户想访问哪个域名。只要把不同域名的 DNS A 记录都指向这台服务器的 IP,Nginx 就能区分并把请求分发到对应的站点或后端服务。

应用场景如下:

一台服务器一个 IP,就能挂多个域名(也就是常说的基于名称的虚拟主机)。Nginx 配置里,每个站点有独立的 server 块。不同域名可以连到不同的后端应用或端口。Nginx 会根据域名,把流量反向代理到对应的本地服务或者端口上。这种做法在容器编排环境里也很常见,比如 Kubernetes 的 Ingress 资源,也是通过域名(Host)来做流量路由,让多个服务共享一个负载均衡 IP。

二、配置示例讲解

如上图所示:多个域名(比如 oi.example.chatapexample.chat**、adexample.chat** 等)都把 DNS 解析指向同一台服务器的 IP。这台服务器上,Nginx 监听 80 和 443 端口,接收所有进来的请求,再根据每个请求的 Host 字段,把流量转发到不同端口上的本地服务。

在这个例子里,oi.example.chatapexample.chat 和 adexample.chat 这几个域名的 A 记录都指向同一个 IP。用户访问时,请求头里的 Host 信息不一样,Nginx 能识别目标域名,从而套用不同的转发规则。这样一来,即使共用一个外网 IP,各自的流量也能准确分流,不会混淆,分别进入自己的应用。

说白了,Nginx 在这里就相当于一个反向代理网关,把外部的多域名访问都收进来,再按域名分流到不同的内部服务。这么做,不光让服务器资源用得更充分,管理起来也省事不少——只需开放 80 和 443 两个端口,就能同时支持多个网站。另外还能设置禁止直接用 IP 访问,防止绕过域名,也更安全。


三、Nginx 多域名配置示例

假如现在有这样一个需求:一台服务器上,用 Nginx 分别转发这三个域名的流量——

  • • oi.example.chat:转到本地 3000 端口(比如网页应用,支持 WebSocket)。
  • • api.example.chat:转到本地 4000 端口(HTTP API 服务)。
  • • admin.example.chat:转到本地 5000 端口(后台管理页面)。

具体的 Nginx 配置如下。oi.example.chat 这里多加了几行,是为了让 WebSocket(比如 Socket.IO)能正常转发。其他两个就是常规的 HTTP 代理:

# 对应 oi.example.chat 的配置(含 WebSocket 支持)
server {
    listen80;
    server_name oi.example.chat;

    # WebSocket 接口转发配置
    location /ws/ {
        proxy_pass http://127.0.0.1:3000;
        # WebSocket 必需的头设置
        proxy_http_version1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 保留客户端请求的关键信息转发给后端
        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 请求转发配置
    location / {
        proxy_pass http://127.0.0.1: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;
    }
}

# 对应 api.example.chat 的配置(一般 HTTP API 服务)
server {
    listen80;
    server_name api.example.chat;

    location / {
        proxy_pass http://127.0.0.1:4000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

# 对应 admin.example.chat 的配置(后台管理服务)
server {
    listen80;
    server_name admin.example.chat;

    location / {
        proxy_pass http://127.0.0.1:5000;
        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 段共用同一个监听端口 80,但通过 server_name 区分三个域名,各自指定了不同的转发目标(本地不同端口的服务)。这样就实现了一个 IP 上基于域名的虚拟主机路由。需要注意,如果有HTTPS需求,还需对应增加 listen 443 ssl 的配置和证书。下面我们详细解释配置中涉及的核心指令。

四、配置中核心指令说明

指令/配置项
作用解释
注意事项
server_name
定义当前 server 块匹配的域名。
支持通配符,例如 *.example.com
listen 80;
定义监听端口。HTTP 默认为 80,HTTPS 为 443。
可以指定监听的 IP,比如 listen 192.168.1.100:80;
proxy_pass
定义转发(反向代理)的目标后端地址。
支持填写 IP+端口,或域名+端口。
proxy_set_header Host $host;
将客户端请求中的域名传递给后端服务。
很多后端服务需要根据该头识别请求域名,以返回正确的站点内容。
proxy_http_version 1.1;
将转发协议升级为 HTTP/1.1。WebSocket 必须。
WebSocket 必备
,否则无法完成协议升级。
proxy_set_header Upgrade $http_upgrade;

proxy_set_header Connection "upgrade";
专门用于支持 WebSocket 协议的头设置,将 HTTP 连接升级为 WS。
若缺少这两行,WebSocket 无法正常工作(无法成功升级连接)。

这些配置一起实现了域名转发:Nginx 收到外部请求后,会把请求“透明”地转发给对应的内部服务,同时把原始的域名和客户端 IP 等信息也带过去。这样,后端服务就能通过 Host 头等信息识别是哪个域名的请求,方便后续做对应处理。

五、额外的注意事项

  • • DNS 配置:要让域名转发生效,先把所有要用的域名都解析到 Nginx 服务器的同一个 IP(通常是在域名服务商后台加 A 记录)。DNS 配好了,用户才能用域名正常访问你的服务。
  • • 默认主机服务:如果有些请求的域名没有出现在任何 server_name 里,Nginx 会把这些请求交给默认主机处理(一般是配置文件里第一个 server 块,或者写了 default_server 的那个)。建议专门加一个默认服务器,要么返回错误页面,要么直接断开连接(比如用 444 状态码)。这样能防止有人用没授权的域名或者直接用 IP 访问你的服务,提高安全性。
  • • HTTPS 和证书:生产环境下,多个域名一般都要支持 HTTPS。可以分别给每个域名配证书和私钥,绑定到对应的 443 端口上。Nginx 支持 SNI 技术,可以让一台服务器、一个端口(443),同时挂载多个域名证书,这样就能让所有域名都走 HTTPS。证书可以用免费的 Let’s Encrypt,也可以用其他机构颁发的。


阅读原文:原文链接


该文章在 2025/7/21 10:19:42 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved