我在chroot(archlinuxwiki)中安装了arch-linux和nginx。这很管用。
现在我想运行fastcgi。我将php-fpm套接字设置为127.0.0.1:9000,以便从chroot(/srv/http)访问它。
当html文件被成功打印时,php文件却"找不到"。在nginx日志中,我发现:
FastCGI sent in stderr: "primary script unknown" while reading response header from upstream, client: 10.211.55.2, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000:, host: "10.211.55.6".
所以我认为php-fpm没有找到文件,因为nginxchroot中的路径是绝对的,它在真正的根目录中搜索。所以我在我的设置中添加了以下内容,是的,非常丑陋,但结果没有改变。我如何调试它,或者更好地找到一个干净的解决方案?
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /srv/http$document_root$fastcgi_script_name
}
坦克很多。
FPM找错地方了。
更改php-fpm配置以在访问日志文件中添加其他信息。我的服务器是这样配置的:
[www]
access.format = "%t "%m %r%Q%q" %s %f %{mili}d %{kilo}M %C%%"
来自我的服务器的配置结果的示例行:
07/Sep/2022:19:23:03 -0400 "GET index.php?q=/login&" 200 /nginx/ech11/public/index.php 23.787 2048 21.67%
按顺序,我在访问日志中使用以下选项:
- %t是当前时间(07/9/2022:22:23:03)
- %m是方法(GET)
- %r是请求URI(index.php?q=/login)
- %Q是介于%Q和%r(&)之间的胶水
- %q是查询字符串。(在我的示例中为空)
- %s是状态(200)
- %f是脚本(/nginx/ech11/public/index.php)
- %d是持续时间µs(23.787)
- %M是存储器(2048)
- %C是CPU的百分比(21.67%)
这应该会通知您在nginx.conf中更改哪些设置,以使fpm能够找到index.php文件。
您可以使用的其他一些选项:
%e fastcgi env
%l content length
%n pool name
%o header output
%p PID
%T time