Ошибка шлюза Nginx php-fpm 504

После нескольких часов поиска и отладки я сдаюсь!

Есть тысячи вопросов и статей о длительных процессах PHP, но ни один из них не решил мою проблему.

У меня есть скрипт PHP со следующими кодами:

$cur = 0;
// Second, loop for $timeout seconds checking if process is running
while( $cur < 31 ) {
sleep(1);
$cur += 1;

echo "\n ---- $cur ------ \n";
}

Он просто предназначен для работы в течение 31 секунды.

У меня есть Nginx, PHP настроен как fastcgi на сервере Debian.

Я поставил
max_execution_time = 600

В

/etc/php5/fpm/php.ini

Я даже установил это в

/etc/php5/cli/php.ini

Также установлено

request_terminate_timeout = 600

в
/etc/php5/fpm/pool.d/www.conf

Я также сделал эти изменения в разделе http nginx.conf

client_header_timeout   600;
client_body_timeout     600;
send_timeout           600;

fastcgi_read_timeout    600;
fastcgi_send_timeout    600;
client_max_body_size    600;
fastcgi_buffers         8 128k;
fastcgi_buffer_size     128k;

И поместите директивы в раздел сервера. и эти директивы внутри раздела местоположения конфигурации nginx

send_timeout           600;

fastcgi_read_timeout    600;
fastcgi_send_timeout    600;
client_max_body_size    600;
fastcgi_buffers         8 128k;
fastcgi_buffer_size     128k;

Но я все еще сталкиваюсь с ошибкой истечения времени ожидания в браузере!
(И да! Я перезапускал php-fpm и nginx тысячи раз)

Ребята, у вас есть идеи?

1

Решение

Пожалуйста, не воспринимайте мой ответ как оскорбление, но вы убедились, что ваш веб-сервер включен, и вы пытались получить доступ к другой странице сайта?

0

Другие решения

Увидев этот ответ, Я склонен полагать, что ситуация выглядит следующим образом: nginx пытается заполнить свой буфер FastCGI (который включен по умолчанию), в то время как вашему сценарию требуется слишком много времени, чтобы вернуть первый байт, что приводит к тайм-ауту. При условии, что я прав, есть две вещи, которые вам нужно сделать, чтобы решить эту проблему:

  1. переключатель fastcgi_buffering в off
  2. изменить свой сценарий так, чтобы flush() а также ob_flush() Вызваны после каждой итерации:

    while( $cur < 31 ) {
    ++$cur;
    echo "\n ---- $cur ------ \n";
    
    flush();
    ob_flush();
    sleep(1);
    }
    

НТН

0

Я считаю, что вам нужно включить proxy_read_timeout директива в вашем конфигурационном файле Nginx. Мой собственный файл конфигурации выглядит так:

server {
proxy_read_timeout 300s;
...
}

Вы заметите, что это в моем блоке сервера, однако эта директива также действует внутри блоков http и location.

* Изменить, чтобы добавить, что это потому, что Nginx прокси запросы к серверу PHP-FPM; директивы, которые вы пытались использовать, действительны только для контента, который обслуживается самим Nginx, и не быть прокси

0
По вопросам рекламы [email protected]