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

LEMP本地开发服务器:NGINX多站点无需手动配置location的正则方案咨询

使用Nginx正则实现LEMP多站点自动匹配

当然可以用正则表达式搞定这个需求,不用再手动给每个站点写重复的location块!下面直接给你可行的配置方案和关键细节说明:

核心配置思路

通过命名捕获正则提取URL中的站点名称(比如site1、site2),然后复用这个变量来统一处理所有站点的请求路由和PHP解析。

完整Nginx配置示例

server {
    listen 80;
    server_name localserver;
    # 这里填写所有站点的父目录,比如site1、site2都放在这个目录下
    root /var/www/local-sites;

    # 匹配所有以 /[站点名] 开头的请求,捕获站点名称到$site变量
    location ~^/(?<site>[a-z0-9_-]+) {
        # 先尝试访问站点目录下的静态文件/目录,找不到就转发到对应站点的index.php
        try_files $uri $uri/ /$site/index.php?$args;

        # 嵌套处理PHP请求,确保每个站点的PHP文件能正确解析
        location ~ \.php$ {
            # 根据你的PHP-FPM版本调整socket路径,也可以用127.0.0.1:9000
            fastcgi_pass unix:/run/php/php8.2-fpm.sock;
            fastcgi_index index.php;
            # 这里的$document_root就是上面定义的父目录,拼接后就是站点的PHP文件路径
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
        }
    }

    # 可选:根路径默认跳转(比如跳转到第一个站点)
    location / {
        return 302 /site1/;
    }
}

关键细节解释

  • 正则捕获组:(?<site>[a-z0-9_-]+) 会把URL中/后面的第一个分段(比如site1)捕获到$site变量里。如果你的站点名称包含大写字母,把正则改成[A-Za-z0-9_-]+即可。
  • root目录设置:必须指向所有站点的父目录,比如site1的完整路径是/var/www/local-sites/site1,那root就填/var/www/local-sites,这样$document_root/$site就是对应站点的根目录。
  • PHP解析逻辑:嵌套的location ~ \.php$会处理所有站点下的PHP请求,通过$document_root$fastcgi_script_name确保FastCGI能找到正确的PHP文件。

测试与验证

  1. 把配置放到Nginx的sites-available目录(或者直接修改nginx.conf)
  2. 用nginx -t检查配置语法是否正确
  3. 重启Nginx:systemctl restart nginx(根据你的系统调整命令)
  4. 访问http://localserver/site1/或者http://localserver/site2/就能自动对应到各自的站点目录了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:31:59