Nginx 如何配置多域名反向代理到不同后端端口服务

文章导读
Nginx 可以通过在同一配置文件中定义多个 server 块,利用 server_name 指令区分域名,并将请求转发到不同的本地端口。适用场景是一台服务器托管多个业务系统,风险边界是端口冲突或配置语法错误导致服务中断。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

Nginx 可以通过在同一配置文件中定义多个 server 块,利用 server_name 指令区分域名,并将请求转发到不同的本地端口。适用场景是一台服务器托管多个业务系统,风险边界是端口冲突或配置语法错误导致服务中断。

先说结论:通过配置多个 server 块监听 80 或 443 端口,利用 server_name 匹配域名,再使用 proxy_pass 指向不同后端端口即可实现。

  • 适合:单 IP 多域名场景,后端服务运行在不同端口。
  • 先准备:确认域名解析生效,后端服务端口可访问。
  • 验收:使用 curl 或浏览器访问域名,检查后端返回内容。

命令速用版

修改配置后必须执行语法检查和重载命令,避免配置错误导致 Nginx 停止工作。

nginx -t
nginx -s reload

为什么会这样

Nginx 基于 HTTP 请求头中的 Host 字段匹配 server_name 来决定使用哪个 server 块配置。

当请求到达 Nginx 时,Nginx 首先检查 Host 头,找到对应的 server 块,然后根据 location 规则将请求转发给 proxy_pass 指定的 upstream 或地址。不同域名可以指向同一个 IP,但 Nginx 内部根据域名区分转发逻辑。

分步处理

第一步,找到 Nginx 配置文件,通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ 目录下。

第二步,为每个域名编写独立的 server 块,设置对应的 server_name 和 proxy_pass 端口。

server {
    listen 80;
    server_name domain1.com;
    location / {
        proxy_pass http://127.0.0.1:8080;
    }
}

server {
    listen 80;
    server_name domain2.com;
    location / {
        proxy_pass http://127.0.0.1:8081;
    }
}

第三步,执行 nginx -t 检查配置语法,确认成功后执行 nginx -s reload 生效。

Nginx 如何配置多域名反向代理到不同后端端口服务

怎么验证是否生效

使用 curl 命令模拟请求,指定 Host 头访问服务器 IP,观察返回内容是否来自对应的后端端口服务。

curl -H "Host: domain1.com" http://服务器 IP
curl -H "Host: domain2.com" http://服务器 IP

检查 Nginx 访问日志 /var/log/nginx/access.log,确认请求状态码为 200 且被正确记录。

常见坑

配置末尾缺少分号会导致 nginx -t 报错。后端服务防火墙未放行本地回环端口可能导致 502 Bad Gateway。默认 server 块缺失可能导致未匹配域名的请求被错误转发。

常见问题

多个域名可以指向同一个后端端口吗

可以,多个 server_name 可以写在同一个 server 块中,或者不同域名配置相同的 proxy_pass 地址。

配置修改后需要重启 Nginx 吗

不需要重启,执行 nginx -s reload 即可平滑重载配置,不影响现有连接。

如何配置 HTTPS 多域名反向代理

需要为每个域名配置 ssl_certificate 和 ssl_certificate_key,监听 443 端口,其余 proxy_pass 逻辑相同。