基于端口的虚拟主机通过不同端口号区分请求,每个server块配置独立listen、root和index,无需域名或额外IP,适用于内网、测试及多服务隔离场景。
在 Nginx 中,基于端口的虚拟主机通过为每个应用分配独立的监听端口,并用单独的 server 块定义其服务路径和行为,从而实现应用级隔离。它不依赖域名或额外 IP,只靠端口号区分请求流向,适合开发、测试或内网多服务共存场景。
每个应用对应一个 server 块,关键在于:
listen 8081、listen 8082,不能重复root /var/www/app-a,确保静态资源路径不交叉index index.html,控制默认响应以运行两个静态应用为例:
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
/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 进程在监听
这类配置看似简单,但容易因疏忽导致服务不可用:
ufw allow 8081,CentOS 用 firewall-cmd --add-port=8081/tcp --permanent && firewall-cmd --reload
lsof -i :8081 或 netstat -tuln | grep :8081
www-data 或 nginx 用户)需对 root 目录有读取权限/css/main.css,Nginx 实际查找的是 /var/www/app-a/css/main.css
不要直接修改主配置文件 nginx.conf,而是把端口虚拟主机配置拆分为独立文件,统一放在 /etc/nginx/conf.d/ 下(如 app-a.conf、app-b.conf)。这样便于按应用维护、启用或禁用,也降低误改全局配置的风险。