У меня есть nginx (в Docker-контейнере Debian) с этой конфигурацией для приложения 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
вместо розетки, но тоже самое. Скорее всего, это не вопрос нагрузки или памяти, оперативной памяти достаточно, и я делаю только один запрос, загрузка процессора равна 0,0.
Как заставить FPM работать с nginx?
Очевидные вещи, которые я вижу в вашем фрагменте конфигурации, ошибочны /
персонажи:
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
. На самом деле это не имеет значения, но, возможно, вы столкнулись со сценарием, в котором это имеет значение.
Если это не решит проблему, начните изучать код своего приложения.