我有一个 nginx(在 Debian docker 容器中),其 Symfony 应用程序的配置如下:
location ~ ^/api/(app|app_dev|config)\.php(/|$) {
root /var/www/backend/web/;
fastcgi_split_path_info ^/api/(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
fastcgi_param HTTPS off;
}
位置被正确识别,SCRIPT_FILENAME
指向正确的文件。但是,我得到了
recv() not ready (11: Resource temporarily unavailable)
每当我发出请求时,nginx 调试日志中都会出现这样的信息。nginx 会以 进行响应504 Gateway Time-out
。
有一些空闲的 fpm 工作进程,我杀死它们后它们会立即被重新创建,这对我来说似乎是正确的,因为它是一个池。我尝试使用127.0.0.1:9000
而不是套接字,但结果是一样的。这很可能不是负载或内存的问题,有足够的 RAM 可用,而且我只发出一个请求,CPU 负载为 0.0。
如何使 FPM 与 nginx 协同工作?
答案1
在您的配置片段中,我看到的明显的东西是杂散/
字符:
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
请注意,在示例配置中,这一点是不存在的。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
您/
在root
指令中也有一个遗漏之处。
root /var/www/backend/web/;
我期望看到:
root /var/www/backend/web;
使用您现有的配置,SCRIPT_FILENAME
设置为,例如/var/www/backend/web///api/config.php
。这实际上不应该有关系,但您可能遇到过它确实有关系的情况。
如果这不能解决问题,请开始查看您的应用程序代码。