网络与接入

Nginx反向代理配置按域名转发的操作步骤

Nginx反向代理配置按域名转发,适合一台云服务器同时运行多个网站、接口或管理后台的场景。客户端访问不同域名时,Nginx先根据请求中的域名匹配规则,再把请求交给对应的后端服务。与直接暴露多个应用端口相比,这种方式更便于统一使用 HTTPS、访问日志和安全策略。 一、先确认域名和后端服务 假设需要配置两个站点:shop

网络与接入

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 指向该池。这样便于增加节点和调整转发策略,但健康检查、会话保持等能力还要结合具体版本和部署方案评估。

三、启用配置并检查结果

  1. 保存配置文件,并检查域名拼写、分号、花括号以及后端端口是否正确。
  2. 执行 nginx -t。只有看到语法检查成功后,才建议重新加载配置。
  3. 执行 systemctl reload nginx,以平滑方式让新配置生效。正在处理的连接通常不会因 reload 被强制中断。
  4. 分别访问 shop.yourdomain.cn 和 api.yourdomain.cn,确认两个域名返回的内容不同,并核对应用日志是否收到请求。
  5. 如果服务器启用了防火墙,只开放实际需要的入口端口;后端的 3000、9000 等端口通常不应直接暴露给公网。

测试时可以使用浏览器,也可以用 curl 发送请求。例如检查域名匹配,可在客户端执行 curl -I http://shop.yourdomain.cn。如果域名尚未完成公网解析,可通过 hosts 文件临时把域名指向服务器地址进行验证,测试后记得恢复文件内容。

Nginx反向代理配置按域名转发的操作步骤

四、配置 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、独立日志、独立后端”的原则扩展,通常比不断修改一份复杂配置更容易排错。

韩国VPS相关配置与价格

查看产品参数、使用周期与当前价格,选择适合的方案。

查看相关配置在线咨询