我正在尝试将 Nginx 设置为使用 Laravel/PHP 的几个不同项目的登台服务器。这个想法是,在/var/www
我将有不同数量的子目录,每个都以subdomain.example.com
格式访问。
考虑这个非常简单的 Nginx 配置:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
index index.html index.htm;
server_name ~^(.*)\.example\.com$;
root /var/www/$1;
}
我的目录结构设置为:
/var/www
/subdomain1
/subdomain2
/subdomain3
如果我访问subdomain1.example.com
,subdomain2.example.com
则提供相关子目录中subdomain3.example.com
的文件。index.html
到目前为止一切都很完美。
当我尝试使用 PHP 文件进行这项工作时,问题就来了。首先,我将 index 指令更改为index index.php
,然后在server
指令中添加以下内容:
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Nginx 接受这个配置没有任何问题。但是,如果我尝试访问,subdomain1.example.com
那么我会从 Nginx 收到 404 错误,但错误日志中没有任何内容。
如果我将 try_files 指令更改为,try_files $uri /subdomain1/index.php =404;
那么它会正确执行目录index.php
中的文件,subdomain1
但这显然违背了目的,因为我希望它作为通配符工作。问题是我无法从 location 指令中的父指令访问 $1 变量。
我觉得我必须在这里遗漏一些非常明显的东西。任何人?
我想我以前见过这种情况,
root
后期绑定和数字捕获超出范围。尝试使用命名捕获。就像是: