2

Ngigx + PHP-FPM 设置并在根目录中工作,但我无法让虚拟目录工作。

我希望 //localhost/pb/test.php 执行 c:\opt\php\public\test.php 但它因“未指定输入文件”而中断。事实上,甚至 .html 文件都不起作用,但一旦工作,我希望 php 指令也能在 /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;
}
}
4

1 回答 1

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;
}

上面的尝试文件将首先尝试一个完全匹配的文件名,如果它没有找到它会将请求传递给@fastcgi 位置

或者,您可以简单地在 /pb/ 位置内的嵌套位置块中重复 fastcgi 位

于 2012-08-15T19:36:40.073 回答