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

Обратный прокси-сервер Apache2 периодически зависает?

Обратный прокси-сервер Apache2 периодически зависает при проксировании веб-приложения Tomcat.

Проблема в том, что время от времени (один или два раза в день, обычно после бездействия), когда я пытаюсь войти в это проксированное веб-приложение, оно просто зависает. Приложение просто зависает на неопределенный срок, нет кода ответа 500 ... браузер просто ждет и ждет.

Если я буду продолжать пытаться намекать на веб-адрес в моем браузере, он в конечном итоге просто снова начнет работать.

Я попытался воспроизвести эту проблему, перейдя непосредственно в веб-приложение через порт 8080 tomcat, но мне никогда не удавалось воспроизвести это без прохождения через обратный прокси.

Вот моя конфигурация обратного прокси ... какие-нибудь идеи по поиску неисправностей? Спасибо

/ и т.д. / apache2 / сайты-доступные / по умолчанию

ProxyPass /manage/ http://localhost:8080/manage/
ProxyPassReverse /manage/ http://localhost:8080/manage/

ProxyPass /manage http://localhost:8080/manage
ProxyPassReverse /manage http://localhost:8080/manage

/etc/apache2/mods-available/proxy.conf

  <IfModule mod_proxy.c>
    #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
                Allow from all
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
    </IfModule>

Больше информации: (не уверен, если актуально)

Включенные модули apache:

core_module (статический) log_config_module (статический) logio_module (статический) mpm_worker_module (статический) http_module (статический) so_module (статический) alias_module (общий) auth_basic_module (общий) authn_file_module (общий) authz_default_module (общий) authz_default_module_module) authz_default_module (общий) authz_default_module_module) authz_default_module общий) autoindex_module (общий) cgid_module (общий) deflate_module (общий) dir_module (общий) env_module (общий) mime_module (общий )gotiation_module (общий) proxy_module (общий) proxy_ajp_module (общий) proxy_connect_module (общий) proxy_module (общий) proxy_connect_module (shared) rewrite_module (общий) setenvif_module (общий) status_module (общий)

Обновить: Сейчас я использую протокол ajp для прокси. Установили дополнительную конфигурацию ProxyPass, например.

ProxyPass /manage ajp://localhost:8009/manage max=20 ttl=120 acquire=10000 retry=0
ProxyPassReverse /manage ajp://localhost:8009/manage

Убедитесь, что ваш файловый кеш apache отключен.

# LoadModule file_cache_module modules/mod_file_cache.so

Если это не решит проблему (не должно, это не похоже на проблему с кешем), попробуйте отладить с помощью mod_jk. Загрузите подходящую версию mod_jk для вашего Apache, настройте ее и установите уровень журнала на DEBUG.

# Set the jk log level [debug/error/info] 
JkLogLevel          debug

Кроме того, включите тонны информации в свои журналы apache

LogFormat "%h %l %u %t \" %m \"%V\" \"%r \" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D CustomLogFormat
. . .
CustomLog "|C:/Apache2/bin/rotatelogs.exe C:/Apache2/logs/access_%Y%m%d.log 86400" CustomLogFormat

Теперь у вас должен быть журнал Apache с микросекундами, затраченными на обслуживание страницы, и журнал уровня отладки вашего соединения AJP 1.3 с tomcat (с mod_jk).

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

Это ничего не решит, но, скорее всего, даст вам некоторое представление о том, что происходит.

Я бы попытался использовать ajp для подключения к tomcat из apache.
Пожалуйста, проверьте конфигурацию с помощью mod_proxy_ajp с Tomcat.
Из журналов похоже, что tomcat не ответил на запрос apache. Он отказался от связи.

Если у вас высокий трафик, ищите глубже в журналах вашего приложения. Это может быть тупик или достигнуто максимальное количество потоков.

HTH

Если вы получаете отказ в соединении, возможно, вы достигли максимального числа потоков на Tomcat. Что установлено в maxclient для Apache? Какой параметр maxthread установлен на Tomcat? Вы хотите убедиться, что ваш maxclient не превышает maxthread. В противном случае Apache попытается проксировать больше соединений, чем может обслужить Tomcat, а Tomcat откажется от соединений.

Также если вы retry=0 до конца ваших операторов ProxyPass. Apache не отключит серверного воркера, и ваше восстановление при возникновении этой проблемы будет быстрее.