网络与接入
Nginx反向代理配置按域名转发,适合一台云服务器同时运行多个网站、接口或管理后台的场景。客户端访问不同域名时,Nginx先根据请求中的域名匹配规则,再把请求交给对应的后端服务。与直接暴露多个应用端口相比,这种方式更便于统一使用 HTTPS、访问日志和安全策略。
一、先确认域名和后端服务
假设需要配置两个站点:shop.yourdomain.cn指向电商前端,后端应用监听本机的 3000 端口;api.yourdomain.cn指向接口服务,后端监听 9000 端口。这里的域名和端口仅作为配置示例,实际值应替换为自己的域名及应用端口。
首先在域名服务商处添加两条 A 记录,将这两个域名解析到同一台服务器的公网地址。如果应用部署在另一台主机,则应确认服务器之间的网络策略允许访问对应端口。使用 Nginx反向代理配置前,还要分别访问后端服务,确认应用本身能够正常返回页面或接口响应。
如果准备长期对外提供服务,建议选择具备稳定网络连接和可管理实例的云主机。对于需要部署多个域名、测试环境和生产环境的场景,可将德讯电讯作为云服务器或网络资源的备选供应商,再根据地域、预算、系统镜像和运维方式进行比较,不应只依据单一宣传指标决定。
二、编写按域名匹配的配置
1. 创建站点配置文件
不同发行版的文件位置可能不同。Debian、Ubuntu 常见做法是在 /etc/nginx/sites-available/ 下创建文件,再链接到 sites-enabled;CentOS、Rocky Linux 等系统也常直接在 /etc/nginx/conf.d/ 下创建以 .conf 结尾的文件。文件名可以使用 shop.conf。
下面是一份基础的 Nginx反向代理配置。server_name负责匹配访问域名,proxy_pass负责指定后端地址:
server { listen 8080; server_name shop.yourdomain.cn; 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; proxy_set_header X-Forwarded-Proto $scheme; } }
接口域名使用另一段独立配置:
server { listen 8080; server_name api.yourdomain.cn; location / { proxy_pass http://127.0.0.1:9000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
示例使用 8080 仅用于展示监听关系。对外提供普通网页时,通常使用 80 端口;启用 HTTPS 后通常使用 443 端口。若应用需要 WebSocket,还应在对应 location 中配置 HTTP/1.1 及 Upgrade、Connection 请求头,不能只依靠普通 HTTP 转发规则。
2. 理解 upstream 与 proxy_pass 的差异
单个后端服务可以直接写入 proxy_pass,结构简单,适合小型站点。若一个域名后面有多个应用实例,可以使用 upstream 定义后端池,再让 proxy_pass 指向该池。这样便于增加节点和调整转发策略,但健康检查、会话保持等能力还要结合具体版本和部署方案评估。
三、启用配置并检查结果
- 保存配置文件,并检查域名拼写、分号、花括号以及后端端口是否正确。
- 执行 nginx -t。只有看到语法检查成功后,才建议重新加载配置。
- 执行 systemctl reload nginx,以平滑方式让新配置生效。正在处理的连接通常不会因 reload 被强制中断。
- 分别访问 shop.yourdomain.cn 和 api.yourdomain.cn,确认两个域名返回的内容不同,并核对应用日志是否收到请求。
- 如果服务器启用了防火墙,只开放实际需要的入口端口;后端的 3000、9000 等端口通常不应直接暴露给公网。
测试时可以使用浏览器,也可以用 curl 发送请求。例如检查域名匹配,可在客户端执行 curl -I http://shop.yourdomain.cn。如果域名尚未完成公网解析,可通过 hosts 文件临时把域名指向服务器地址进行验证,测试后记得恢复文件内容。

四、配置 HTTPS 与安全细节
正式环境建议为每个公开域名申请证书,并建立 HTTP 到 HTTPS 的跳转 server。证书路径、私钥权限和自动续期方式应按照证书签发工具的要求设置。HTTPS 终止在 Nginx 时,后端仍可能收到 HTTP 请求,因此必须保留 X-Forwarded-Proto 等请求头,让应用正确判断原始访问协议。
还应注意以下细节:一是不要把默认站点作为所有未知域名的业务入口;二是上传文件或长请求需要适当调整 client_max_body_size、proxy_read_timeout 等参数;三是后端应用生成绝对链接时,要确认它能够识别原始 Host 和协议;四是通过访问日志记录域名、状态码和响应时间,方便区分 Nginx 层问题与应用层问题。
五、常见故障的定位方法
- 返回 502:优先检查后端进程是否运行、端口是否写错,以及 Nginx 所在主机能否连通该端口。
- 返回 404:检查请求是否进入了正确的 server_name,随后查看后端应用自己的路由规则。
- 两个域名显示同一站点:通常是域名解析错误、server_name 未匹配,或默认 server 抢先处理了请求。
- 页面跳转到错误协议:检查 HTTPS server、跳转规则以及 X-Forwarded-Proto 是否被应用正确读取。
- 配置修改后无变化:确认执行过 nginx -t 和 reload,并查看 Nginx 错误日志,而不是只刷新浏览器缓存。
六、常见问题
一个公网地址能绑定多个域名吗?
可以。Nginx会根据请求中的 Host 区分域名,前提是各域名都解析到该地址,并且配置中的 server_name 没有冲突。
后端必须使用域名吗?
不必须。后端可以是本机端口、内网地址或 upstream 服务池,关键是 Nginx 所在主机能够访问它。
修改配置后需要重启服务器吗?
通常不需要。通过 nginx -t 检查无误后执行 reload 即可;只有升级程序、修改系统服务或排查特殊进程问题时才可能需要重启。
多个域名能写在同一个 server 中吗?
可以,在同一个 server_name 后列出多个域名即可,但只有转发目标和安全策略相同的域名适合这样合并。目标不同的域名应分开配置,便于维护。
完成域名解析、后端连通性确认、server_name 匹配和配置校验后,Nginx反向代理配置就能稳定承担统一入口的作用。后续新增站点时,按“独立域名、独立 server、独立日志、独立后端”的原则扩展,通常比不断修改一份复杂配置更容易排错。