最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 中 Virtual Host 如何通过基于端口的虚拟主机隔离不同应用
时间:2026-08-28 19:53:47 编辑:袖梨 来源:一聚教程网
基于端口的虚拟主机通过不同端口号区分请求,每个server块配置独立listen、root和index,无需域名或额外IP,适用于内网、测试及多服务隔离场景。
在 Nginx 中,基于端口的虚拟主机通过为每个应用分配独立的监听端口,并用单独的 server 块定义其服务路径和行为,从而实现应用级隔离。它不依赖域名或额外 IP,只靠端口号区分请求流向,适合开发、测试或内网多服务共存场景。
核心配置逻辑
每个应用对应一个 server 块,关键在于:
-
listen 指定唯一端口:如
listen 8081、listen 8082,不能重复 -
root 设置专属根目录:例如
root /var/www/app-a,确保静态资源路径不交叉 -
index 定义入口文件:如
index index.html,控制默认响应 - server_name 可省略或设为 localhost:该字段在此模式下不参与路由判断,仅作标识
实际操作步骤
以运行两个静态应用为例:
- 创建目录并放测试页:
mkdir -p /var/www/app-a /var/www/app-becho "App A" > /var/www/app-a/index.htmlecho "App B" > /var/www/app-b/index.html - 在
/etc/nginx/conf.d/port-apps.conf中写入配置:
server {listen 8081;root /var/www/app-a;index index.html;}server {listen 8082;root /var/www/app-b;index index.html;}- 校验并重载:
nginx -t && nginx -s reload - 确认监听状态:
ss -tlnp | grep -E ':(8081|8082)'应显示 nginx 进程在监听
必须注意的几个细节
这类配置看似简单,但容易因疏忽导致服务不可用:
-
防火墙需放行端口:Ubuntu 用
ufw allow 8081,CentOS 用firewall-cmd --add-port=8081/tcp --permanent && firewall-cmd --reload -
避免端口冲突:检查是否已被其他进程占用,可用
lsof -i :8081或netstat -tuln | grep :8081 -
权限问题:Nginx 工作进程(通常是
www-data或nginx用户)需对root目录有读取权限 -
资源路径以 root 为基准:比如请求
/css/main.css,Nginx 实际查找的是/var/www/app-a/css/main.css
推荐的管理方式
不要直接修改主配置文件 nginx.conf,而是把端口虚拟主机配置拆分为独立文件,统一放在 /etc/nginx/conf.d/ 下(如 app-a.conf、app-b.conf)。这样便于按应用维护、启用或禁用,也降低误改全局配置的风险。