nginx$document\u root未计算root指令regex
我的目标是拥有通配符子域,每个子域从自己的目录为php提供服务。例如,“www”子域从“public_html/www”提供服务,“blog”从“public_html/blog”提供服务。下面是我当前的nginx配置,允许部分工作:nginx$document\u root未计算root指令regex,nginx,Nginx,我的目标是拥有通配符子域,每个子域从自己的目录为php提供服务。例如,“www”子域从“public_html/www”提供服务,“blog”从“public_html/blog”提供服务。下面是我当前的nginx配置,允许部分工作: server { listen 80; server_name ~^(.*)\.example\.com$; root /var/www/example.com/public_html/$1; index
server {
listen 80;
server_name ~^(.*)\.example\.com$;
root /var/www/example.com/public_html/$1;
index index.php index.htm;
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
为了测试,我在www目录中有一个index.php,在blog目录中有一个index.htm。博客子域工作正常,并显示博客目录中的index.htm
但是,www子域不起作用,页面返回“未指定输入文件”。如果我将“www”硬编码到root指令中而不是“$1”,则它适用于“www”子域,但当然,博客也会显示该内容
因此,php特定位置中的$document_root似乎没有计算表示子域的root指令的$1。使用$document\u root时需要更改什么或如何确保计算根?尝试使用命名捕获而不是数字捕获
server_name ~^(?<subsystem>.+)\.example\.com$;
root /var/www/example.com/public_html/$subsystem;
server\u name~ ^(?.+)\.example\.com$;
root/var/www/example.com/public_html/$subsystem;
可能
root
计算得太晚(我不知道),并且$1
被位置
正则表达式覆盖。看起来是这样的!稍后我将继续进行进一步的测试,但就目前而言,仅此更改就消除了错误并显示了我的内容。谢谢