You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

局域网Nginx服务器基于URL路径的多项目虚拟主机(Server Block)配置咨询

实现Nginx同一IP下多路径对应多项目的Server Block配置

嗨,这个需求其实很容易实现——不用搞自定义域名或者改hosts,直接在同一个Nginx Server Block里配置不同的location规则就能搞定同一IP下多路径对应多项目的部署。我给你详细讲一下怎么弄:

核心配置示例

首先,这是一个通用的配置模板,你可以根据自己的项目类型调整:

server {
    listen 80;
    server_name 192.168.1.200; # 也可以用"_"匹配所有主机名请求

    # 处理project1的所有请求
    location /project1 {
        root /var/www; # 项目根目录的上级路径,实际文件路径为/var/www/project1
        index index.html index.php; # 根据项目类型设置默认索引文件

        # 如果是PHP项目,取消下面的注释并调整PHP-FPM路径
        # location ~ /project1/.+\.php$ {
        #     root /var/www;
        #     fastcgi_pass unix:/run/php/php8.2-fpm.sock; # 对应你的PHP-FPM套接字路径
        #     fastcgi_index index.php;
        #     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #     include fastcgi_params;
        # }
    }

    # 处理project2的所有请求
    location /project2 {
        root /var/www;
        index index.html index.htm;

        # 如果是Node.js/Python等后端项目,用反向代理,取消下面注释并调整端口
        # proxy_pass http://localhost:3000;
        # proxy_set_header Host $host;
        # proxy_set_header X-Real-IP $remote_addr;
    }

    # 根路径(直接访问http://192.168.1.200)的处理
    location / {
        return 404; # 可以替换为指向默认页面,比如root /var/www/default; index index.html;
    }
}

关键配置解释

  • listen 80:监听HTTP的80端口,对应你访问的http://开头的URL。
  • server_name 192.168.1.200:指定这个Server Block只处理指向该IP的请求,也可以用_表示匹配任何主机名的请求。
  • location /project1:匹配所有以/project1开头的URL(比如http://192.168.1.200/project1、http://192.168.1.200/project1/about),并将请求转发到对应的项目目录。
  • root vs alias:如果你的项目目录名和URL路径不一致(比如URL是/project1但实际目录是/var/www/my-blog),可以把root /var/www换成alias /var/www/my-blog,这样Nginx会直接指向指定目录,而不是拼接路径。

不同项目类型的适配

  • 静态HTML/CSS/JS项目:只需要保留root和index配置即可,静态资源会自动从对应目录加载。
  • PHP项目:需要添加location ~ /project1/.+\.php$的规则,把PHP请求转发给PHP-FPM处理,注意替换成你服务器上的PHP-FPM套接字路径(通常在/run/php/目录下)。
  • Node.js/Python/Java后端项目:用proxy_pass把请求反向代理到项目的运行端口(比如Node.js项目通常运行在3000端口),同时设置proxy_set_header传递必要的请求头。

验证与生效步骤

  1. 把上述配置保存到Nginx的sites-available目录,比如/etc/nginx/sites-available/multi-project
  2. 创建软链接到sites-enabled目录,让Nginx加载这个配置:
    ln -s /etc/nginx/sites-available/multi-project /etc/nginx/sites-enabled/
    
  3. 测试配置是否有语法错误:
    nginx -t
    
  4. 如果测试通过,重启Nginx生效:
    systemctl restart nginx
    

注意事项

  • 权限问题:确保Nginx进程(通常是www-data用户)有访问项目目录的权限,执行chown -R www-data:www-data /var/www/project1可以设置正确的权限。
  • 路径匹配优先级:Nginx的location匹配有优先级,精确匹配(location = /project1)> 正则匹配(location ~ ...)> 前缀匹配(location /project1),如果有特殊规则,注意调整顺序。
  • 静态资源路径:如果项目里的静态资源用的是相对路径,Nginx会自动从对应项目目录加载;如果用绝对路径,要修改为/project1/css/style.css这样带项目路径的格式。

内容的提问来源于stack exchange,提问作者CdP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:29:06