![nginx 和 php-fpm 中的“文件未找到”确切路径](https://linux22.com/image/624108/nginx%20%E5%92%8C%20php-fpm%20%E4%B8%AD%E7%9A%84%E2%80%9C%E6%96%87%E4%BB%B6%E6%9C%AA%E6%89%BE%E5%88%B0%E2%80%9D%E7%A1%AE%E5%88%87%E8%B7%AF%E5%BE%84.png)
有时在配置 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_level
php-fpm.conf 中的选项更改为error
和debug
,但结果仍然相同
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 的网络选项卡中看到标题(或其他浏览器中的类似工具)。
Server
PS :当然,如果你需要的话,你也可以用HttpHeadersMoreModule重写标头:
more_set_headers "Server: my_server";
祝你好运!