Назад | Перейти на главную страницу

nginx + php5-fpm: ресурс временно недоступен

У меня есть 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. На самом деле это не имеет значения, но, возможно, вы столкнулись со сценарием, в котором это имеет значение.


Если это не решит проблему, начните изучать код своего приложения.