端口隔离是nginx实现多站点隔离最简单可靠的方式,通过为每个server块配置唯一listen端口、独立root路径和index文件,并透传host与x-real-ip等关键header,无需dns、host头校验或证书,适用于内网测试与开发联调。

直接用不同端口区分站点,是 Nginx 实现多站点隔离最简单、最可靠的方式之一。它不依赖 DNS 解析、不校验 Host 头、也不需要证书,特别适合内网测试、开发联调或业务逻辑强隔离的场景。
每个 server 块绑定唯一端口
核心是为每个站点分配独立的 listen 指令。Nginx 启动时会严格检查端口冲突——同一 IP 上重复监听相同端口会导致启动失败。
- 基础写法:
listen 8081;(默认监听所有 IPv4 地址) - 更明确写法:
listen 127.0.0.1:8081;或listen 192.168.1.100:8081;,避免隐式绑定歧义 - 如需 IPv6 支持,加
ipv6only=on:例如listen [::]:8081 ipv6only=on; - 避免混用
listen *:8081;和listen 8081;,容易引发配置理解偏差
根目录与首页完全独立
端口只是入口,真正实现文件级隔离靠的是 root 和 index 的组合。每个 server 块必须指定专属静态资源路径和默认首页名。
- 使用绝对路径,例如:
root /var/www/app-a;(推荐,避免因工作目录变化导致 404) - 首页按顺序匹配:
index index.html index.php;,找到第一个存在即返回 - 无需
server_name即可生效,但建议保留(如写server_name localhost;),便于日志识别和后续维护
后端服务代理要透传关键 Header
如果某个端口用于反向代理(比如把请求转给 Node.js 或 Python 后端),必须正确设置 proxy 相关头信息,否则后端可能无法识别原始请求来源。
-
proxy_pass http://127.0.0.1:3001;(注意末尾斜杠是否一致,影响路径拼接) - 必须透传:
proxy_set_header Host $host;和proxy_set_header X-Real-IP $remote_addr; - 如需保持 WebSocket 连接,还需添加:
proxy_http_version 1.1;和proxy_set_header Upgrade $http_upgrade;
别忘了系统层配套动作
Nginx 配置生效前,有几个系统级环节常被忽略:
- 确认端口未被其他进程占用:
netstat -tuln | grep :8081(Linux)或netstat -ano | findstr :8081(Windows) - 防火墙放行对应端口(如 Linux 的 firewalld 或 ufw,Windows 的高级安全防火墙)
- 若在容器或云主机中部署,还需检查安全组规则是否开放该端口
- 修改配置后执行:
nginx -t校验语法,再nginx -s reload生效











