504 Время ожидания шлюза 70007 в Apache 2.4 + mod_proxy Ubuntu 18.04
Я устал от многих попыток исправить тайм-аут 504 шлюза из mod_proxy в Apache 2.4 с использованием PHP-FPM. Поэтому я пытаюсь найти решение здесь. На самом деле я планирую перенести Программное обеспечение со старого сервера Apache на новый Ubuntu 18.04., 20 ГБ MySQL, более 30 миллионов записей, 98 таблиц, ничего большого, но иногда медленного.
Сценарий выполняется, но такие длинные операции, как "Пользователь", "Удаление данных" или "Оптимизация базы данных" (5000 с), завершаются при 504. В журнале ошибок Apache отображаются
[Fri Sep 20 22:08:44.426924 2019] [proxy_fcgi:error] [pid 9308] (70007)The timeout specified has expired: [client 87.xx.204.109:62982] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx
[Fri Sep 20 22:14:05.539446 2019] [proxy_fcgi:error] [pid 9308] (70007)The timeout specified has expired: [client 87xx.204.109:62982] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx
[Fri Sep 20 22:39:54.892255 2019] [proxy_fcgi:error] [pid 9273] (70007)The timeout specified has expired: [client 87.x.204.109:50931] AH01075: Error dispatching request to : (polling), referer: https://test.xxxx
Первый должен был установить max_execution_time
без ограничений, но без эффекта. Второй был memory limit
а также input time
также без эффекта
Я решил установить request_terminate_timeout = 0
в PHP-FPM Pool тоже не эффективен [я знаю, что это стандарт]. Может быть, мне нужно настроить proxy_timeout, но liveconfig, моя система управления сервером, управляет vhost. Я нашел решения для Ngix, но не для Apache. Я также попробовал mod_php, который работает для решения, так что я думаю, что проблема заключается в mod_proxy, сторона php в порядке.
Что я могу сделать, чтобы увеличить время ожидания для mod_proxy более 5000 с
<IfModule mod_proxy_fcgi.c>
<FilesMatch ".+\.ph(p[3457]?|t|tml|ps)$">
SetHandler "proxy:unix:/var/run/php7.2-fpm/web0.sock|fcgi://localhost"
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</FilesMatch>
</IfModule>
Кто-нибудь может мне помочь? Я обнаружил, что могу использовать тайм-аут в
3 ответа
По умолчанию Apache используетTimeout
директива, настроенная на60
секунды.
Чтобы изменить тайм-аут прокси-запросов, вам необходимо использоватьProxyTimeout
.
Например:
<IfModule mod_proxy.c>
ProxyTimeout 180
</IfModule>
Дополнительная информация в документации Apache: https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#proxytimeout.
я исправил по ссылке https://shouts.dev/articles/apache-proxy-fcgi-the-timeout-specified-has-expired-on-rhel , это тайм-аут ошибки apache
У меня была похожая проблема, и я нашел решение после того, как внимательно прочитал примеры https://httpd.apache.org/docs/2.4/mod/mod_proxy_fcgi.html
Особенно полезен пример "Прокси через обработчик".
Это должно установить время ожидания для mod_proxy на '''OVER 9000!!!'''
<IfModule mod_proxy_fcgi.c>
<FilesMatch ".+\.ph(p[3457]?|t|tml|ps)$">
SetHandler "proxy:unix:/var/run/php7.2-fpm/web0.sock|fcgi://localhost"
SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
</FilesMatch>
<Proxy "fcgi://localhost">
ProxySet timeout=9001
</Proxy>
</IfModule>
По ссылке выше:
"Часть, которая соответствует SetHandler, является частью, которая следует за каналом".
Часть fcgi://localhost
должен быть в SetHandler
а также Proxy
,