Как настроить JBoss EAP (6.4.x) для комбинированного обратного прокси HTTP / HTTPS? - PullRequest
0 голосов
/ 12 июня 2018

Наше приложение работает в JBoss EAP 6.4.Наши настройки разработки предоставляют экземпляр JBoss, работающий в режиме HTTP на порту 8080, и обратный прокси-сервер с конечными точками HTTP (порт 9090) и HTTPS (порт 9443), чтобы помочь тестировать различные сценарии.

Проблема возникает, когда я пытаюсьиспользуйте «текущий» URL, введя UriInfo в мои обработчики запросов.Часть схемы URI внутри всегда зависит от атрибута схемы параметра соединителя в standalone.xml, а не от фактически используемой схемы.Так, например, если я вызываю https://localhost:9443 и http://localhost:9090, когда схема соединителя установлена ​​на https, оба URL-адреса преобразуются в HTTPS, то есть https://localhost:9443, но также https://localhost:9090.Если я переключаю схему соединителя на http, оба URL-адреса изменяются на HTTP.Само собой разумеется, X-Forwarded-Proto также игнорируется.

Есть ли способ заставить JBoss вести себя более как большинство других серверов приложений, то есть без каких-либо предположений об используемой среде и особенно об обратных прокси и балансировщиках нагрузки?

1 Ответ

0 голосов
/ 14 июня 2018

RemoteIpValve должен делать все, что вам нужно.

Исходный код из JBossWeb 7.5.20 (EAP 6.4.20): http://anonsvn.jboss.org/repos/jbossweb/tags/JBOSSWEB_7_5_20_FINAL/src/main/java/org/apache/catalina/valves/RemoteIpValve.java

Вот более читаемая документацияна вышестоящем веб-сайте проекта Apache Tomcat 7.0: https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/catalina/valves/RemoteIpValve.html

Минимальная конфигурация в вашем случае будет следующей глобальной конфигурацией клапана в веб-подсистеме:

<valve name="remoteip-valve" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteIpValve">
    <param param-name="protocolHeader" param-value="X-Forwarded-Proto"/>
</valve>

Это установит схемуоснованный на значении заголовка X-Forwarded-Proto.Для https он также установит для флага безопасности значение true, а для порта - 443. Поскольку вам, кажется, требуется, чтобы порт HTTPS был установлен на 9443, вы можете сделать это с помощью дополнительного параметра httpsServerPort (и я думаю, что вы 'Вам также потребуется установить httpServerPort на 9090, как вы упомянули выше, потому что RemoteIpValve переопределит его на 80 в противном случае), например

<valve name="remoteip-valve" module="org.jboss.as.web" class-name="org.apache.catalina.valves.RemoteIpValve">
    <param param-name="protocolHeader" param-value="X-Forwarded-Proto"/>
    <param param-name="httpServerPort" param-value="9090"/>
    <param param-name="httpsServerPort" param-value="9443"/>
</valve>

И вы можете сделать больше с этим клапаном, если вам нужно, просто проверьтедокументация для получения более подробной информации.

Это также кратко описано, например, здесь (требуется регистрация RH): https://access.redhat.com/solutions/629863

BTW Если вы сможете использовать протокол AJP (от прокси досервер приложений), в этом нет необходимости, поскольку AJP предназначен для этих случаев, и вся необходимая информация должна быть передана в приложение.сервер в значительной степени прозрачно.

...