Для чего нужен порт перенаправления в Tomcat?

13

Трудно разобраться в документации по tomcat, и, взглянув на server.xml, вы обнаружите множество портов, которые могут быть трудны для понимания, потому что это не объясняется должным образом или подробно в документации.

Например, эта строка в файле конфигурации server.xml

<Connector port="8345" protocol="AJP/1.3" redirectPort="9875" />

И здесь вы можете найти еще один порт перенаправления:

<Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" /> 

Я понимаю, что делает порт разъема. В первом случае вы используете это для создания работника в apache и отправки его туда, во втором вы открываете порт для прямого доступа к tomcat. Однако, когда дело доходит до перенаправления вещи становятся нечеткими.

Вот объяснение, данное в документации tomcat для порта ajp:

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

Я всегда выбираю случайный порт перенаправления более 1024, и это работает,

Но когда это войдет в практику? Как он узнает, когда запрос требует транспорта SSL?

У меня есть спутниковый сервер с модулем Tomcat. Этот модуль вступает в силу, перенаправляя трафик к коннектору ajp с помощью apache с главного сервера и наоборот.

На главном сервере https применяется в apache. Означает ли это, что все запросы на спутниковый сервер отправляются в зашифрованном виде или в виде обычного текста? Я знаю, что если я получаю доступ к спутниковому серверу через порт 8080, он не зашифрован, но мне интересно, относится ли это к трафику, перенаправляемому на основной сервер, и где этот порт перенаправления вступает в силу.

Ulukai
источник

Ответы:

6

Как определено в документации, порт перенаправления будет отображаться, когда на сервер поступит запрос SSL, и поскольку порт коннектора http не может обрабатывать запросы SSL, он будет перенаправлен на определенный порт. Но это должен быть другой раздел, определенный в файле server.xml, в котором определенный порт перенаправления будет действовать как порт соединителя для обработки запросов SSL. Например, если вы хотите, чтобы http-запросы обрабатывались портом 80, а https-запросы - портом 443, server.xml будет выглядеть так:

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" />

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true" scheme="https" secure="true" sslProtocol="TLS" keystoreFile="/path/to/kestorefile" keystorePass="my_keystore_password"/>

Keystorefile - это ssl-сертификат вашего сайта.

Если вы не настроите другой раздел с портом перенаправления в качестве порта соединителя, ваши запросы не будут перенаправлены на этот порт. Например, если веб-сайт не поддерживает ssl-запросы, и вы пытаетесь отправить https-запрос на этот веб-сайт, в браузере будет отображаться ошибка типа «Ошибка безопасного подключения» .

Гаурав Пундир
источник
Справедливо. Как насчет конфигурации для ajp, а не для http? Также стоит ли использовать порты до 1024, как вы упомянули? Это будет означать запуск tomcat от имени root, и это не хорошо.
Улукай
1
Я не очень разбираюсь в ajp, но перенаправление должно работать так же, как http. Об использовании портов до 1024, это полностью ваше дело. 80 и 443 являются портами по умолчанию для протокола https & https, нет необходимости явно упоминать их в URL. Если вы хотите использовать нестандартные порты, это до вас. Также работает tomcat с рутом, это зависит от развернутого приложения. Если вы не доверяете своему приложению с точки зрения безопасности, вы не должны запускать tomcat с правами root. Другой путь - вы можете использовать apache или nginx в качестве прокси для запуска через порты 80 и 443 и перенаправить ваш запрос на tomcat.
Гаурав Пундир
Отмечу, что это iptablesтакже хорошо работает для перенаправления трафика на Tomcat, среди других подходов .
SeldomNeedy
Это объяснение неполное. Если вы перенаправляете с не-SSL на порт SSL, недостаточно включить целевой соединитель в server.xml. Также необходимо настроить раздел <security-constraint> в web.xml. См stackoverflow.com/questions/9526425/...
luiscolorado