Ngigx + PHP-FPM设置并在root目录下工作,但我无法让虚拟目录工作。
我希望//localhost/pb/test.php执行c:\ opt \ php \ public \ test.php,但它打破了“未指定输入文件”。事实上,甚至.html文件都不起作用,但是一旦工作,我希望php-directive也可以在/ pb下工作。
目前的nginx.conf:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm index.php;
}
location /pb/ {
root /opt/php/public;
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
答案 0 :(得分:1)
http://nginx.org/en/docs/http/ngx_http_core_module.html#location解释了nginx如何匹配位置。 在这种情况下,您的前缀位置/ pb /将匹配,并且nginx永远不会到达* .php匹配位置
我会尝试设置一个命名位置(@bit使其成为命名位置):
location @fastcgi {
fastcgi_pass 127.0.0.1:9123;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
然后在其他位置的try_files指令中引用它,如下所示:
location /pb/ {
root /opt/php/public;
index index.html index.html;
try_files $uri @fastcgi;
}
location ~ \.php$ {
alias @fastcgi;
}
上面的try文件会首先尝试一个完全匹配的文件名,如果它没有找到它会将请求传递给@fastcgi位置
或者你可以只在你/ pb / location中的嵌套位置块中重复fastcgi位