Таймаут обратного прокси Apache составляет 60 секунд.

Вопрос или проблема

У меня есть сервер обратного прокси Apache, который проксирует запросы на мой внутренний сервер Apache. Я использую версию Apache 2.4 на платформе Linux.

Я столкнулся со страницей тайм-аута и HTTP ERROR 504, когда задний сервер Apache занимает более 60 секунд (страница PHP ждет результаты запроса Mysql на заднем сервере Apache)

По умолчанию тайм-аут Apache установлен на 300 секунд.

Эта проблема возникает только при доступе к веб-сайту через обратный прокси Apache. Все работает хорошо при использовании внутреннего IP.

Я пытался установить следующие параметры для proxypass, но безуспешно.

ProxyPass / http://internal-ip:8080/ retry=1 acquire=3000 timeout=600 Keepalive=On

Я также пытался использовать ProxyPass на несуществующий IP, который также показывает ошибку HTTP 504 через 60 секунд

Пожалуйста, помогите мне понять эту проблему.

<VirtualHost *:80>
 ServerName mywebsite.example.com
 ServerAlias www.mywebsite.example.com
 ProxyPreserveHost On
 DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/mywebsite.example.com-error.log
        CustomLog ${APACHE_LOG_DIR}/mywebsite.example.com-access.log combined

 RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
 RewriteRule .* - [R=405,L]
 ProxyPass /.static-pages !
 ProxyPass / http://<Internal Apache Server IP>/
 ProxyPassReverse / http://<Internal Apache Server IP>/
</VirtualHost>

С директивой ProxyPass вы можете рассмотреть параметр connectiontimeout.

Смотрите документацию по mod_proxy Apache httpd: https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#workers

Параметр connectiontimeout устанавливает количество секунд, которое Apache httpd
ждет завершения создания соединения с задним сервисом.

Значение по умолчанию для этого параметра равно 60s

Ответ или решение

Проблема таймаута Apache Reverse Proxy через 60 секунд

Введение

Вы столкнулись с проблемой таймаута на вашем Apache Reverse Proxy сервере, который используется для проксирования запросов к внутреннему серверу Apache. При этом возникновение ошибки HTTP 504 происходит, когда запросы к бэкенду превышают 60 секунд, несмотря на то, что по умолчанию Apache настроен на таймаут в 300 секунд. В данной статье мы разберем возможные причины проблемы и предложим решения.

Причины проблемы

  1. Настройки таймаута: Обратите внимание, что в Apache модуль mod_proxy имеет свои параметры таймаута, отличные от общих параметров сервера. Вы указали, что использовали параметр timeout=600, но это не влияет на настройку connectiontimeout, которая по умолчанию составляет 60 секунд.

  2. Параметры ProxyPass: Ваша текущая настройка ProxyPass может потребовать дополнительной настройки времени ожидания. Параметры, такие как ProxyTimeout, connectiontimeout, могут проявлять различные значения в зависимости от конфигурации.

  3. Задержка со стороны Бэкенда: Если бэкенд-сервер занимает более 60 секунд для обработки запроса, это может быть следствием длительных операций, таких как сложные запросы к базам данных или медленные внешние API.

Решения

1. Изменение параметров ProxyPass и конфигурации таймаута

Для решения проблемы с таймаутом попробуйте изменить конфигурацию следующим образом:

<VirtualHost *:80>
    ServerName mywebsite.example.com
    ServerAlias www.mywebsite.example.com
    ProxyPreserveHost On
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/mywebsite.example.com-error.log
    CustomLog ${APACHE_LOG_DIR}/mywebsite.example.com-access.log combined

    RewriteCond %{REQUEST_METHOD} !^(GET|POST)$
    RewriteRule .* - [R=405,L]

    ProxyPass /.static-pages !
    ProxyPass / http://<Internal Apache Server IP>/ connectiontimeout=600 timeout=600
    ProxyPassReverse / http://<Internal Apache Server IP>/
</VirtualHost>
2. Использование ProxyTimeout

Добавьте параметр ProxyTimeout для установки времени ожидания по умолчанию для всех запросов:

ProxyTimeout 600
3. Оптимизация Бэкенда

Проверьте производительность вашего бэкенд-сервера. Возможно, стоит оптимизировать SQL-запросы или проверить работу скриптов PHP.

4. Логирование и мониторинг

Рекомендую включить более детальное логирование для выявления узких мест. Вы можете использовать mod_log_config для настройки детализированных логов и анализа, где именно происходят задержки.

Заключение

Корректная настройка параметров таймаута в Apache Reverse Proxy и оптимизация вашего бэкенда способны существенно улучшить пользовательский опыт и избежать ошибок таймаута. Если после внесения изменений проблема сохраняется, стоит рассмотреть возможность использования инструментов мониторинга, что позволит более глубоко анализировать производительность вашего приложения и выявить узкие места.

Оцените материал
Добавить комментарий

Капча загружается...