nginx 和 php-fpm 中的“文件未找到”确切路径

nginx 和 php-fpm 中的“文件未找到”确切路径

有时在配置 nginx 和 php-fpm 时,我会收到消息“找不到文件”。我知道这是由于参数 SCRIPT_FILENAME 错误造成的,例如:

fastcgi_param   SCRIPT_FILENAME  /some/path$fastcgi_script_name;

我想知道是否有办法获取 php-fpm 无法找到的文件的精确完整路径?

我的 php5-fpm.log 没有任何内容,但是:

[06-Jan-2014 11:14:33] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful
[06-Jan-2014 11:27:01] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful

我尝试将log_levelphp-fpm.conf 中的选项更改为errordebug,但结果仍然相同

PS这一行:

add_header X-My-Header /some/path$fastcgi_script_name;

不起作用,因为add_header只对成功的响应有效,正如我读过的这里

nginx 模块,即使响应失败也可以设置标题,但我认为这应该是获取文件路径的更简单的方法。

谢谢。

答案1

解决方案是使用 nginx 记录所需的变量log_format

在最简单的情况下它可能看起来像这样(将此代码粘贴到http上下文中):

log_format mylog '$fastcgi_script_name';
access_log  /var/log/nginx/access.log  mylog;

然后您可以在访问日志文件中看到结果(就我的情况而言/var/log/nginx/access.log)。

另一个解决方案是使用以下方式编译 nginxHttpHeadersMore模块。此模块允许您以比 nginx 默认指令更灵活的方式操作 http 标头add_header。因此,要查看$fastcgi_script_name值,您可以这样写:

location ~ \.php$ {
    more_set_headers    "x-debug-header: $fastcgi_script_name";
    fastcgi_pass        127.0.0.1:9000;
    ...
}

然后您可以在 Google Chrome DevTools 的网络选项卡中看到标题(或其他浏览器中的类似工具)。

ServerPS :当然,如果你需要的话,你也可以用HttpHeadersMoreModule重写标头:

more_set_headers    "Server: my_server";

祝你好运!

相关内容