Nginx可通过多server块+server_name匹配域名,再用proxy_pass转发至不同本地端口(如web1.example.com→3000、api.example.com→8080),并需配置proxy_set_header、超时参数等确保稳定代理。

用 Nginx 做反向代理,让多个域名分别指向同一台服务器上的不同本地端口(比如 web1.example.com → localhost:3000,api.example.com → localhost:8080),是常见且实用的部署方式。核心在于利用 server_name 匹配域名,再通过 proxy_pass 转发到对应后端服务。
配置基本 server 块区分域名
每个域名需独立一个 server 块,靠 server_name 指令识别请求来自哪个域名。Nginx 会根据 Host 头自动匹配,无需额外设置。
- 确保域名已解析到该服务器 IP(如通过 DNS 或 hosts 测试)
-
server_name可写精确域名(web1.example.com)、通配符(*.example.com)或多个空格分隔(web1.example.com web1.com) - 监听端口通常为
80(HTTP)或443(HTTPS,需配 SSL)
用 proxy_pass 转发到不同本地端口
在匹配成功的 server 块内,用 location / 定义路径规则,并通过 proxy_pass 指向目标服务地址(如 http://127.0.0.1:3000)。
-
proxy_pass后必须带协议(http://)和完整地址;结尾是否加/影响路径重写逻辑(建议统一加) - 加上基础代理头(如
Host、X-Real-IP)能让后端正确获取原始请求信息 - 示例:
proxy_pass http://127.0.0.1:3000/;表示把/path完整转发给http://127.0.0.1:3000/path
补充关键代理配置提升稳定性
仅靠 proxy_pass 可能导致连接中断、超时或静态资源异常,需添加常用代理参数。
-
proxy_set_header Host $host;:防止后端收到localhost:3000这样的错误 Host -
proxy_set_header X-Real-IP $remote_addr;和X-Forwarded-For:传递真实客户端 IP -
proxy_connect_timeout、proxy_send_timeout、proxy_read_timeout:避免长连接卡死,默认 60 秒,按业务需要调整 -
proxy_http_version 1.1;+proxy_set_header Connection "";:支持 HTTP/1.1 持久连接
验证与调试小技巧
配置完成后别急着 reload,先检查语法并观察实际转发行为。
- 运行
sudo nginx -t确认配置无语法错误 - 执行
sudo systemctl reload nginx(或nginx -s reload)生效 - 用
curl -H "Host: web1.example.com" http://localhost在服务器本地测试是否命中对应 server 块 - 查看 Nginx 错误日志(默认
/var/log/nginx/error.log)定位 502、504 等常见问题










