#apache #tomcat #mod-jk
#apache #tomcat #mod-jk
Вопрос:
В настоящее время работающий сервер работает неэффективно, и способ его настройки также не идеален. По этой причине я пытаюсь найти новый способ делать вещи, которые, надеюсь, помогут как с производительностью, так и с развертыванием.
Подход, который я выбрал, заключается в том, чтобы иметь экземпляры tomcat для наших веб-приложений (в настоящее время их два, так что это будет экземпляр для каждого веб-приложения) и использовать Apache в качестве «фронта». У меня нет опыта в этом, так что это нормально, что у меня возникают проблемы здесь и там, но пока мне удается это сделать.
Я ожидаю, что перенаправление с mysite.com индексируйте страницу к любому mysite.com/service1 или mysite.com/service2 . Service1 был настроен на тестовом сервере на порту 8080, а service2 — на 8081. Вчера я установил Apache2 и mod_jk и настроил apache с содержимым mysite.com . Сегодня я запустил конфигурации, которые закончились следующим образом:
workers.properties
worker.list=s1
worker.s1.type=ajp13
worker.s1.port=8009
#host is localhost by default according to the documentation
jk.load
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
JkWorkersFile /etc/apache2/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel debug
JkMount /service1/* s1
Сервис1 server.xml соединитель (все остальное по умолчанию)
<Connector protocol="AJP/1.3" port="8009" redirectPort="8443" />
У меня было больше, но из-за ошибок я сделал шаг назад и пока попробовал только с одним tomcat. Я добавлю второй tomcat и балансировщик нагрузки.
Хорошо, так что же происходит?
Я могу получить доступ к серверу и индексной странице нашей системы без проблем. Проблема в том, что я пытаюсь перенаправить на service1. Он просто загружается без ответа, но если я попытаюсь получить доступ к service1 напрямую через порт 8080, он работает правильно (я устал комментировать этот соединитель. Не повезло).
Глядя на состояние сервера, я вижу, что запрос застрял при отправке ответа, а в mod_jk.log я вижу, что рабочий правильно соответствует запросу. Итак, хотя мои конфигурации кажутся правильными, происходит что-то среднее. Я действительно не знаю, связано ли это с Apache, Tomcat или Mod_jk. Я также пытался следовать нескольким руководствам о том, как это сделать, но все они привели меня к 404s. К сожалению, просмотр здесь и ServerFault не пролил много света, поэтому я спрашиваю сейчас.
Я что-то упустил? Должен ли я просто использовать другой подход? Я очень новичок в этом, и сейчас я в растерянности. Конфигурация и журналы показывают, что на самом деле все в порядке (по крайней мере, на первый взгляд …), Поэтому я полностью уверен, что мой случай scneario возможен даже с mod_jk… Честно говоря, запустить его обратно и попробовать с помощью прокси-сервера на данный момент очень заманчиво, но если это так, я бы предпочел знать, где я ошибаюсь.
Дополнительная информация: работает на Ubuntu Server 18.04, последние версии apache2 и mod_jk доступны из apt (по состоянию на 14 апреля), java 1.8 и Tomcat 8.5.64.
Комментарии:
1. Добавьте
secretRequired="false"
в конфигурацию вашего соединителя: по умолчанию значение равноtrue
(см. документацию ). Проверьте журналы, чтобы увидеть, правильно ли запускается соединитель.2. Я не могу поверить, что я даже не подумал о проверке документации tomcat. Я был более уверен, что это дело Apache… что, я думаю, технически это тоже так. Не могли бы вы ответить, чтобы я мог это принять? Я также посмотрю на секреты, это может быть удобно добавить. Спасибо!
3. Хотя технически этот вопрос уже задавался ранее, трудно найти ответ, если вы не знаете решения.
Ответ №1:
В прошлом году в Tomcat произошли изменения (начиная с версии 8.5.51 и версии 9.0.31), которые ввели secretRequired
атрибут для соединителя AJP с значением по умолчанию true
(см. документацию). Следовательно, вы можете либо:
- добавьте общий секрет между соединителем AJP и
mod_jk
- или добавить
secretRequired="false"
к разъему AJP:<Connector protocol="AJP/1.3" port="8009" secretRequired="false" redirectPort="8443" />
Примечание: AJP — очень старый протокол и редко используется. Поскольку ваша установка довольно новая, вы можете рассмотреть возможность использования прямого HTTP (см. this talk ).