2009-11-24 2 views
7

У меня есть сервер apache 2.2 на сервере tomcat 6. используя mod_proxy_ajp на apache для прокси-запросов к tomcat. симпатичный стандарт setup.apache proxy to tomcat keep alive confusion

Если мне нужно отключить связи keep-alive для браузеров, как мне это сделать?

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

На апаше и в tomcat есть различные «сохранить живые» биты и куски конфигурации.

httpd.conf имеет «KeepAlive Off» (который, кажется, не делать разницу в моем случае)

также в httpd.conf, где вы установили ProxyPass, вы можете иметь параметр «KeepAlive», но это должен только помочь, если есть прокси/брандмауэры между моим апачем и tomcat, которых нет в моем случае и не проблема.

Сам Tomcat, соединитель http имеет «keepAliveTimeout» и «maxKeepAliveRequests», но это только для http-коннекторов.

У коннектора tomcat ajp также есть «keepAliveTimeout», но это для запросов ajp, исходящих от apache, не уверен, что это должно/вытекает из реального HTTP-запроса из браузера в apache.

В довершение ко всему, существует также различие HTTP1.0 и HTTP1.1.

Так что это путает .... может кто-то объяснить?

+0

Интересно, почему вы хотите отключить функцию keep-alive. – Stephane

ответ

12

Есть (по крайней мере) четыре «живых существа».

  1. Уровень HTTP поддерживается между браузером клиента и Apache. (Включает несколько клиентских запросов в HTTP/TCP-соединении. Директива «KeepAlive» для настройки.)

  2. Уровень TCP поддерживается между браузером клиента и Apache. (Чтобы избежать закрытия соединения брандмауэрами, периодически отправляйте пустой пакет (около 2 часов по умолчанию в Linux). Я не знаю, как настроить в Apache.)

  3. Уровень AJP поддерживается между Apache и Кот. (Включает несколько запросов Apache в AJP/TCP-соединении. Параметры «max» и «smax» для «ProxyPass» для настройки.)

  4. Уровень TCP поддерживается между Apache и Tomcat. (То же, что и 2, но для брандмауэра между Apache и Tomcat. Опция «оставайся в живых» для «ProxyPass» директива для настройки.)

Таким образом, конфигурация («KeepAlive выключено») может работать некорректно для межсетевых экранов в пределах клиента и Apache. Используйте «% X» для директивы «LogFormat», чтобы проверить, отключен ли keep-alive (тип 1 выше).

Кстати, я думаю, что закрытие соединения брандмауэрами не вызывает серьезной проблемы, когда «KeepAliveTimeout» не так велик. Если у вас нет проблем (кроме предупреждающих сообщений), на мой взгляд, вы можете оставить как есть.