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

Заставьте nginx ждать x секунд, прежде чем вернуть 502

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

-

У меня nginx выполняет ретрансляцию fastcgi для экземпляра php-fpm.

Экземпляр fpm время от времени необходимо перезапускать. Это может занять от 1 до 2 секунд. Если в это время поступит запрос, nginx выдаст пользователю ошибку 502.

В идеале у нас будет кластер процессов fpm для последовательного перезапуска, но в настоящее время это выходит за рамки возможностей.

Моя цель - заставить NGINX ждать до X с / мс перед тем, как вернуть 502 пользователю, если cgi-relay недоступен.

Вот общее представление о том, с чем я работаю:

  location ~ ^/path/to(/|$) {
    include includes/php.conf;
    fastcgi_param SCRIPT_FILENAME $document_root/index.php;
    fastcgi_param SCRIPT_NAME /index.php;
    fastcgi_param SERVER_NAME $host;
    fastcgi_param REQUEST_SCHEME $http_x_forwarded_proto;

    # Assume some timeout param can be added here??

    fastcgi_pass php-fpm:9000;
  }

Если я не ошибаюсь, я считаю, что тайм-аут 502 Gateway возвращается, когда ваш php-шлюз не работает. По этой причине время ожидания идеально контролируется в php.

В твоем php.ini в файле найдите следующую строку:

; Default timeout for socket based streams (seconds)
; http://php.net/default-socket-timeout
default_socket_timeout = 60

Измените 60 секунд на все, что вам нужно, затем перезапустите оба и снова проверьте время ожидания.