Nginx反向代理搭建,多站点共用80端口
Nginx反向代理多站点共用80端口实战配置
多个网站想共用一台服务器的80端口,最稳妥的方式是用 Nginx 反向代理。
核心思路是:Nginx 监听 80 端口,根据请求的域名(server_name)转发到不同后端服务,每个站点可以用独立端口或独立目录。
下面按零基础可操作的方式,从安装到验证逐步展开。
先装好 Nginx 并确认 80 端口可用
以 CentOS 7/8 或常见 Linux 为例,先安装并启动:
# CentOS
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
# Ubuntu/Debian
sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
检查 80 端口是否被占用:
sudo ss -tlnp | grep :80
如果显示 nginx 进程,说明监听正常。
若被 httpd、apache 或其他程序占用,先停掉对应服务,否则 Nginx 会启动失败。
用 server_name 区分多个站点
假设你有两个域名:a.example.com 和 b.example.com,分别对应本机 8081 和 8082 端口的后端服务。
在 /etc/nginx/conf.d/ 下新建两个配置文件,例如 a.conf 和 b.conf。
a.conf 内容:
server {
listen 80;
server_name a.example.com;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
b.conf 内容类似,只需替换 server_name 和 proxy_pass 端口:
server {
listen 80;
server_name b.example.com;
location / {
proxy_pass http://127.0.0.1:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这样 Nginx 只监听一个 80 端口,但能根据访问域名把请求分发给不同后端。关键点是每个 server 块都写 listen 80,但 server_name 必须不同。
检查配置并平滑生效
改完配置后不要直接重启,先测试语法:
sudo nginx -t
如果输出 syntax is ok 和 test is successful,再重载:
sudo systemctl reload nginx
重载不会断开已有连接,比直接 restart 更平滑。
避坑:常见报错与端口冲突
- 域名解析未生效:确认
a.example.com和b.example.com的 A 记录都指向这台服务器 IP。 - 后端服务未启动:
proxy_pass指向的 8081、8082 必须真有服务在监听,否则会返回 502。 - server_name 重复:两个 server 块写相同域名,Nginx 只会用第一个匹配,第二个形同虚设。
- 防火墙拦截:云服务器安全组和本机防火墙都要放行 80 端口,例如
sudo firewall-cmd --add-port=80/tcp --permanent && sudo firewall-cmd --reload。 - 缺少 Host 头:后端如果依赖域名判断,记得保留
proxy_set_header Host $host;,否则可能跳转到错误站点。
验证多站点是否真正生效
本地用 curl 模拟不同域名访问:
curl -H "Host: a.example.com" http://127.0.0.1
curl -H "Host: b.example.com" http://127.0.0.1
如果返回内容分别来自 8081 和 8082 后端,说明反向代理分流成功。
也可以直接浏览器访问两个域名,观察页面是否各自独立。
判断标准:同一个 80 端口,访问不同域名返回不同站点内容,且没有端口冲突报错,就说明配置正确。
实际部署中的几个小建议
如果后端服务本身也监听 80,需要先把它们改成其他端口,否则和 Nginx 冲突。
对于需要 HTTPS 的站点,可以在 Nginx 层统一配置证书,后端继续走 HTTP,这样证书管理更集中。
多站点共用 80 端口时,日志建议按站点拆分,方便排查是哪个域名出问题。
如果你正在搭建 Nginx 反向代理,想让多个站点共用 80 端口,按本文的配置顺序执行后,再用 nginx -t 和 curl 验证一遍,基本能覆盖大多数零基础场景。
遇到异常时优先检查端口占用、域名解析和 server_name 是否重复。