it-swarm.com.ru

Запретите время ожидания шлюза nginx 504 с помощью PHP set_time_limit ()

Я получаю сообщение о 504 тайм-аутах от nginx, когда мой сценарий PHP работает дольше обычного. set_time_limit(0), похоже, не предотвращает это! Разве это не работает при запуске php5-fpm на nginx? Если да, то как правильно установить ограничение по времени?

Ошибка:

504 Gateway Time-out
nginx/1.2.7
101
Nyxynyx

Есть несколько способов установить таймаут для php-fpm. В /etc/php5/fpm/pool.d/www.conf я добавил эту строку:

request_terminate_timeout = 180

Кроме того, в /etc/nginx/sites-available/default я добавил следующую строку в блок местоположения рассматриваемого сервера:

fastcgi_read_timeout 180;

Весь блок местоположения выглядит так:

location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_read_timeout 180;
    include fastcgi_params;
} 

Теперь просто перезапустите php-fpm и nginx, и для запросов, занимающих менее 180 секунд, не должно быть больше времени ожидания.

176
pymkin

Попробуйте это ссылка , у него есть лучшее решение, как это исправить. Итак, шаги:

  1. Откройте файл nginx.conf, расположенный в каталоге /etc/nginx.
  2. Добавьте этот фрагмент кода в разделе http {:

    client_header_timeout 3000;
    client_body_timeout 3000;
    fastcgi_read_timeout 3000;
    client_max_body_size 32m;
    fastcgi_buffers 8 128k;
    fastcgi_buffer_size 128k;
    

    Примечание: если оно уже присутствует, измените значения в соответствии с.

  3. Перезагрузите Nginx и php5-fpm.

    $ service nginx reload
    $ service php5-fpm reload
    

    Если ошибка не устранена, попробуйте увеличить значения.

40
arp

Вы не можете использовать PHP, чтобы предотвратить тайм-аут, выданный nginx.

Чтобы сконфигурировать nginx для предоставления большего количества времени, смотрите директиву proxy_read_timeout .

9
Bart

Правильный ответ увеличивается fastcgi_read_timeout в вашей конфигурации Nginx.
Просто как тот!

7
tfont
 Sudo nano /etc/nginx/nginx.conf

Добавьте эти переменные в файл nginx.conf:

http {  
  # .....
  proxy_connect_timeout       600;
  proxy_send_timeout          600;
  proxy_read_timeout          600;
  send_timeout                600;
}

И затем перезапустите:

service nginx reload
4
kabus

Вам необходимо добавить дополнительную директиву nginx (для ngx_http_proxy_module) в nginx.conf, например:

proxy_read_timeout 300;

По сути, директива nginx proxy_read_timeout изменяет время ожидания прокси, FcgidIOTimeout для сценариев, которые слишком тихие, а FcgidBusyTimeout для сценариев, выполнение которых занимает слишком много времени.

Также, если вы используете приложение FastCGI, увеличьте и эти параметры:

FcgidBusyTimeout 300
FcgidIOTimeout 250

Затем перезагрузите nginx и PHP5-FPM.

Plesk

В Plesk вы можете добавить его в Настройки веб-сервера в разделе Дополнительные директивы nginx .

Для FastCGI проверьте Настройки веб-сервера в разделе Дополнительные директивы для HTTP .

См .: Как исправить проблемы с тайм-аутом FastCGI в Plesk?

1
kenorb

Использование set_time_limit(0) бесполезно при использовании php-fpm или аналогичного менеджера процессов.

Нижняя строка не должна использовать set_time_limit при использовании php-fpm, чтобы увеличить время ожидания выполнения, отметьте это учебное пособие .

0
pangkalizer

Поскольку вы используете php-fpm, вы должны использовать fastcgi_finish_request () для обработки запросов, которые, как вы знаете, могут занять больше времени.

0
Kate

В таком случае могут возникнуть три вида таймаутов. Можно видеть, что каждый ответ сфокусирован только на одном аспекте этих возможностей. Итак, я подумал записать это, чтобы кому-то из присутствующих здесь в будущем не нужно было случайно проверять каждый ответ и добиваться успеха, не зная, что сработало.

  1. Тайм-аут запроса от запрашивающей стороны - необходимо установить заголовок тайм-аута (см. Конфигурацию заголовка в запрашивающей библиотеке)
  2. Тайм-аут от nginx при выполнении запроса (перед пересылкой на проксируемый сервер), например: загружается огромный файл
  3. Timeout после пересылки на проксируемый сервер сервер не отвечает nginx вовремя. Например: отнимающие много времени скрипты, работающие на сервере

поэтому исправления для каждой проблемы следующие.

  1. установить заголовок тайм-аута, например: в ajax
$.ajax({
    url: "test.html",
    error: function(){
        // will fire when timeout is reached
    },
    success: function(){
        //do something
    },
    timeout: 3000 // sets timeout to 3 seconds
});
  1. тайм-аут клиента nginx

    http{
         #in seconds
        fastcgi_read_timeout 600;
        client_header_timeout 600;
        client_body_timeout 600;
     }
    
  2. таймаут прокси-сервера nginx

    http{
      #Time to wait for the replying server
       proxy_read_timeout 600s;
    
    }
    

Так что используйте тот, который вам нужен. Может быть, в некоторых случаях вам нужны все эти конфигурации. Мне было нужно.

0
Gayan Kavirathne