一聚教程网:一个值得你收藏的教程网站

热门教程

Nginx 中 Virtual Host 如何通过基于端口的虚拟主机隔离不同应用

时间:2026-08-28 19:53:47 编辑:袖梨 来源:一聚教程网

基于端口的虚拟主机通过不同端口号区分请求,每个server块配置独立listen、root和index,无需域名或额外IP,适用于内网、测试及多服务隔离场景。

在 Nginx 中,基于端口的虚拟主机通过为每个应用分配独立的监听端口,并用单独的 server 块定义其服务路径和行为,从而实现应用级隔离。它不依赖域名或额外 IP,只靠端口号区分请求流向,适合开发、测试或内网多服务共存场景。

核心配置逻辑

每个应用对应一个 server 块,关键在于:

  1. listen 指定唯一端口:如 listen 8081listen 8082,不能重复
  2. root 设置专属根目录:例如 root /var/www/app-a,确保静态资源路径不交叉
  3. index 定义入口文件:如 index index.html,控制默认响应
  4. server_name 可省略或设为 localhost:该字段在此模式下不参与路由判断,仅作标识

实际操作步骤

以运行两个静态应用为例:

  1. 创建目录并放测试页:

    mkdir -p /var/www/app-a /var/www/app-b

    echo "App A" > /var/www/app-a/index.html

    echo "App B" > /var/www/app-b/index.html

  2. /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;}
  1. 校验并重载:

    nginx -t && nginx -s reload

  2. 确认监听状态:

    ss -tlnp | grep -E ':(8081|8082)' 应显示 nginx 进程在监听

必须注意的几个细节

这类配置看似简单,但容易因疏忽导致服务不可用:

  1. 防火墙需放行端口:Ubuntu 用 ufw allow 8081,CentOS 用 firewall-cmd --add-port=8081/tcp --permanent && firewall-cmd --reload
  2. 避免端口冲突:检查是否已被其他进程占用,可用 lsof -i :8081netstat -tuln | grep :8081
  3. 权限问题:Nginx 工作进程(通常是 www-datanginx 用户)需对 root 目录有读取权限
  4. 资源路径以 root 为基准:比如请求 /css/main.css,Nginx 实际查找的是 /var/www/app-a/css/main.css

推荐的管理方式

不要直接修改主配置文件 nginx.conf,而是把端口虚拟主机配置拆分为独立文件,统一放在 /etc/nginx/conf.d/ 下(如 app-a.confapp-b.conf)。这样便于按应用维护、启用或禁用,也降低误改全局配置的风险。

热门栏目