局域网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),并将请求转发到对应的项目目录。rootvsalias:如果你的项目目录名和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传递必要的请求头。
验证与生效步骤
- 把上述配置保存到Nginx的
sites-available目录,比如/etc/nginx/sites-available/multi-project - 创建软链接到
sites-enabled目录,让Nginx加载这个配置:ln -s /etc/nginx/sites-available/multi-project /etc/nginx/sites-enabled/ - 测试配置是否有语法错误:
nginx -t - 如果测试通过,重启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
相关产品推荐
相关产品推荐

