端口隔离是最简单直接的多Web应用部署方式——通过不同端口(如8080/8081)绑定独立server块,无需DNS或域名,适合开发、内网及临时上线;配置需确保端口唯一、root路径正确且权限合理,并用nginx -t校验后reload生效。

想用一台服务器同时跑多个 Web 应用,又不想互相干扰?Nginx 的基于端口的虚拟主机(Port-based Virtual Host)是最简单、最直接的隔离方式——不用改 DNS,不依赖域名,靠端口号就能把不同应用完全分开。
为什么选端口隔离而不是域名或路径?
端口方案适合开发测试、内网部署或临时上线场景:配置轻量、调试直观、无需额外域名解析,也避开 HTTPS 证书绑定和 SNI 的复杂性。比如本地启动一个管理后台(:8081)、一个 API 服务(:8082)、一个静态官网(:8080),彼此完全独立,互不劫持请求。
基础配置:监听不同端口,指向不同根目录
在 /etc/nginx/sites-available/ 下新建配置文件(如 app-a.conf),内容如下:
server {
listen 8080;
server_name localhost;
root /var/www/app-a;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 8081;
server_name localhost;
root /var/www/app-b;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}
}
- 每个 server 块必须指定唯一 listen 端口(确保该端口未被其他进程占用)
- server_name 可统一写 localhost 或留空,端口已足够区分
- 各 root 路径需真实存在且 Nginx 有读取权限(建议用
sudo chown -R www-data:www-data /var/www/app-x)
进阶技巧:跨端口共享 SSL、限制访问与日志分离
若部分端口需 HTTPS,可为每个 server 单独配置证书(注意:不能复用同一 IP+端口的证书,但不同端口可各自配);也可用反向代理统一入口(如主站走 443,再按路径分发到后端不同端口),但这就偏离了“纯端口隔离”的初衷。
- 为某端口加 IP 白名单:
allow 192.168.1.100; deny all;放在 location 或 server 块内 - 为每个应用单独记录访问日志:
access_log /var/log/nginx/app-b-access.log; - 避免端口冲突:用
sudo ss -tuln | grep ':808[0-9]'检查端口占用情况
验证与排错:三步确认是否生效
改完配置别急着 reload,先执行关键检查:
- 语法校验:
sudo nginx -t—— 必须显示 success - 重载服务:
sudo systemctl reload nginx(非 restart,避免中断连接) - 本地直连测试:
curl http://localhost:8080和curl http://localhost:8081应返回各自应用首页
如果返回 403,大概率是目录权限或 SELinux(CentOS/RHEL)限制;返回 404,请核对 root 路径末尾是否有拼写错误或遗漏斜杠。










