想让多个域名共用一台服务器,关键是让反向代理按域名把请求送到不同应用。VPS配置反向代理实现多站点托管,常见做法是用 Nginx 接收 80、443 端口的请求,再转发到本机不同端口。应用无需直接暴露在公网,配置也方便逐站调整。
先确定请求如何流转
例如,同一台机器上有两个 Web 应用:一个监听本机 3000 端口,另一个监听 4000 端口。访问者打开不同域名后,Nginx 根据请求中的 Host 信息选择对应端口。这里的端口仅是示例,实际值应以应用的监听设置为准。
先确认应用确实能在服务器本机访问,并尽量让它们只监听回环地址。公网侧通常只需开放网站使用的 80 和 443 端口;应用端口不必为了代理而向所有来源开放。这样可以减少直接暴露应用服务的风险。
配置前检查域名和端口
- 在域名服务商的 DNS 管理页面,为每个站点添加指向服务器公网地址的 A 记录。只有服务器已配置可用 IPv6 时,才添加 AAAA 记录。
- 确认服务器防火墙和云平台网络规则允许外部访问 80、443 端口。若规则未放行,Nginx 配置正确也可能无法从公网打开。
- 用本机请求或应用日志确认两个站点分别运行在预期端口;不要仅凭进程存在就认定服务可用。
- 安装 Nginx。安装命令因系统发行版和软件源不同而异,使用系统维护的包管理工具,并确认服务能够启动。
用 Nginx 按域名转发
在 Nginx 的站点配置目录中新建配置文件。下面以两个自有域名和两个本机端口说明结构;保存前,将域名和端口替换为实际值。
server { listen 80; server_name site-a.example; 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 块,把 server_name 改为第二个域名,并将 proxy_pass 的端口改为 4000。配置中的转发头用于把原始主机名、客户端地址及访问协议传给后端;应用是否识别这些信息,还要看其自身设置。
- 启用新配置文件;具体操作取决于系统的 Nginx 目录布局。
- 运行 Nginx 配置检查命令 nginx -t。看到语法通过后,再重新加载 Nginx;检查失败时先修正报错行,不要直接重启。
- 分别用两个域名访问,查看页面是否来自对应应用。若 DNS 尚未更新,可先检查解析结果和服务器日志。
- 为每个域名配置 TLS 证书,并让 Nginx 在 443 端口提供 HTTPS。证书续期机制也应一并确认;不能只配置证书而忽略后续续期。
选择 Nginx 还是 Caddy
Nginx 适合需要细分转发规则、已有 Nginx 运维经验,或希望手动掌控 HTTPS 配置的场景;配置项较多,首次设置证书和续期需要多做一步。Caddy 的 HTTPS 自动化配置较省事,适合希望减少证书维护操作的站点,但仍需正确设置域名解析、端口和应用转发。两者都能承担反向代理,选择应看维护习惯,而不是认为其中一种适用于所有项目。
采用 VPS配置反向代理实现多站点托管时,站点数量并非唯一限制因素。实际承载能力还受应用负载、内存、带宽和请求类型影响;新站点上线后应检查资源使用与错误日志,而不是仅凭域名数量判断容量。
常见故障怎么查
- 出现 502:检查后端应用是否运行、监听端口是否正确,以及 Nginx 所在环境能否连接该端口。
- 打开了错误站点:核对 DNS 指向、server_name 拼写和重复的站点配置;Nginx 会按监听端口及主机名匹配请求。
- HTTPS 报错:确认访问域名与证书覆盖名称一致,并检查证书是否过期、443 端口是否可达。
- 应用记录的地址不对:确认已传递代理请求头,并检查应用是否信任来自本机代理的转发信息;不要无条件信任公网传来的同名请求头。
常见问题
一个公网 IP 能托管多个网站吗?
可以。多个域名解析到同一公网 IP 后,Nginx 可按域名区分请求,并转发到不同后端。
每个网站都要单独占用一个公网端口吗?
通常不需要。外部访问可共用 80、443 端口,由代理根据域名分流;后端应用使用各自端口。
应用一定要绑定 127.0.0.1 吗?
不一定,但若代理与应用在同一台服务器,绑定回环地址通常能避免应用端口直接暴露公网。多机部署则需按网络和防火墙规则设置。
按域名解析、后端监听、代理规则和 HTTPS 顺序逐项核对,就能完成 VPS配置反向代理实现多站点托管;变更配置后先检查语法,再 reload,并分别验证每个域名。