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

504 Тайм-аут шлюза с PHP на nginx

Я пытаюсь переместить приложение PHP Laravel со своего компьютера разработки, на котором запущен apache, на сервер, на котором запущен nginx. Я настроил соединение с базой данных, и мое приложение Laravel (в основном) отвечает ожидаемой страницей. Однако бывают случайные моменты, когда сервер не отвечает быстро и возвращает

504 Gateway Time-out

через некоторое время. А

service php5-fpm restart

или повторная попытка позже исправляет это временно. Я использую nginx с PHP 5.6 (через FPM), HHVM и MySQL. Я не хочу увеличивать максимальное время выполнения, так как сценарий не должен занимать так много времени.

Я подозреваю, что это проблема либо сценариев PHP в новой среде, либо проблема конфигурации. Это не должно быть проблемой для самого nginx, поскольку статические ресурсы отправляются правильно. Как я могу найти и исправить это?

  • Если вы не доверяете приложению, вы можете установить медленный журнал, чтобы регистрировать каждый запрос, который длится более N секунд (на fpm), добавив конфигурацию пула fpm (расположение по умолчанию обычно (debian): / etc / php5 / fpm / pool.d / www.conf)

    slowlog = /path/to/slow.log

    request_slowlog_timeout = Ns

измените N на количество секунд, которое вы хотите, установите его ниже максимального времени выполнения (чтобы он регистрировался до истечения времени ожидания)

  • Взгляните на количество детей, max_requests и серверов, работающих с fpm. Если проблема возникает время от времени, возможно, вы достигли предела, и для nginx больше нет доступных соединений.

  • Взгляните на свои значения тайм-аута nginx, возможно, тайм-аут fpm больше, и nginx сдается, прежде чем получить ответ.

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