#servlets #tomcat9
#сервлеты #tomcat9
Вопрос:
Есть ли способ определить из HttpServletRequest, выполняется ли запрос через соединитель Apache AJP или напрямую
<Connector port="8443"
scheme="https" secure="true" enableLookups="false" disableUploadTimeout="true"
maxHttpHeaderSize="8192" maxThreads="8000" acceptCount="3000" SSLEnabled="true"
maxConnections="10000" protocol="org.apache.coyote.http11.Http11NioProtocol">
...
</Connector>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" secretRequired="false" />
Проблема, которую мы имеем, заключается в том, что некоторые пользователи получают доступ к tomcat через Интернет, доступ к которому
веб-адрес: 8443 —> указывает брандмауэром на интрасеть apache: 443 —> Соединитель AJP для tomcat: 8009
когда в интрасети администратор клиента сопоставил веб-адрес с котом, чтобы
веб-адрес: 8443 —> tomcat: 8443
таким образом, URL-адрес broswer тот же веб-адрес: 8443, поэтому из URL-адреса невозможно определить, передается ли он через apache или напрямую в tomcat
Ответ №1:
Нашел способ, установив заголовок в apache
RequestHeader set PROXY_HEADER APACHE
затем определите PROXY_HEADER в HttpServletRequest.getHeaders