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

mod_jk или mod_proxy

Я попробовал поискать в Google, и единственные статьи, которые я нашел, сравнивая эти две, были с 2005 по 2002 год. Я только что настроил свой первый экземпляр Tomcat для запуска Jira для проекта, над которым я работаю. Я хочу проксировать это через порт 80 и apache. Насколько я могу судить, я могу легко перенаправить трафик с помощью mod_proxy. В чем разница с использованием mod_jk? Есть ли различия в производительности / безопасности между этими двумя модами? У кого-нибудь есть советы / опыт настройки пересылки через apache? Я управляю Дебианом Ленни.

Оба метода пересылают запросы от apache к tomcat. mod_proxy использует HTTP, который мы все любим. mod_jk использует бинарный протокол AJP. Основные преимущества mod_jk:

  • AJP - это бинарный протокол, поэтому он немного быстрее работает на обоих концах и использует немного меньше накладных расходов по сравнению с HTTP, но это минимально.
  • AJP включает такую ​​информацию, как исходное имя хоста, удаленный хост и SSL-соединение. Это означает, что ServletRequest.isSecure () работает так, как ожидалось, и что вы знаете, кто к вам подключается, и позволяет вам выполнять какой-то виртуальный хостинг в вашем коде.

Небольшой недостаток заключается в том, что AJP основан на блоках фиксированного размера и может разбиваться на длинные заголовки, особенно запрашивать URL-адреса с длинным списком параметров, но вы редко можете иметь 8K параметров URL. (Это наводит на мысль, что вы делаете это неправильно. :))

Положение немного осложняется существованием mod_proxy_ajp. Между ними mod_jk является более зрелым из двух, но mod_proxy_ajp работает в той же структуре, что и другие модули mod_proxy. Я еще не использовал mod_proxy_ajp, но подумал бы о том, чтобы сделать это в будущем, поскольку mod_jk включает настройку вне Apache.

Имея выбор, я бы предпочел соединитель на основе AJP, в основном из-за моего второго заявленного преимущества, а не с точки зрения производительности. Конечно, если Atlassian не поддерживает ничего, кроме mod_proxy_http, это несколько связывает вам руки, но mod_jk действительно работает с JIRA.

Да, есть разница. Однако то, что вы решите использовать, будет зависеть от вашего приложения.

Например, mod_proxy будет работать как обычный обратный прокси, который будет пересылать только обычные заголовки, пока mod_jk будет функционировать как специальный соединитель, который пересылает не только обычные заголовки, но и некоторые другие переменные среды. Можно провести сравнение с scgi и Fastcgi разъемы.

Для работы с JSP вы должны использовать mod_jk для чего он был разработан. Использовать только mod_proxy при пересылке только на обычные веб-серверы (которые могут запускать другие ajp разъемы за ними).

[front apache]---proxy---[back apache]---ajp---[tomcat]
       |
       +--------- ajp----[tomcat]

Надеюсь это поможет.

mod_proxy будет действительно "проксировать" все запросы к tomcat, используя обычные соединители http.

mod_jk открывает соединения "ajp13" с сервером tomcat, которые отделены от обычных HTTP-коннекторов tomcat, и таким образом передает трафик.

JIRA официально не поддерживает размещение tomcat позади apache, если вы не используете mod_proxy_http. Рекомендуемая конфигурация выглядит примерно так

/etc/httpd/vhosts.d/jira.company.com.conf

...
ProxyPreserveHost On
<Location />
   ProxyPass http://localhost:8080/
</Location>
...

/opt/j2ee/domains/company.com/jira/tomcat/conf/server.xml

...
<Connector address="localhost" port="8080" URIEncoding="UTF-8"
   maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
   enableLookups="false" redirectPort="8443" acceptCount="100"
   debug="0" connectionTimeout="20000"
   proxyName="jira.company.com" proxyPort="80"
   disableUploadTimeout="true" /> 
...

Это должно заставить вас продолжить httpдайте мне знать, если вам нужен пример для https

отказ от ответственности: в настоящее время я являюсь сотрудником Atlassian, но не работаю в команде JIRA