Заставить wildfly слушать порт 443, а не 8443
Поэтому я добавил SSL
сертификат к моему wildfly 9
и это работает, но я хочу настроить свой standalone.xml
слушать https
на port 443
не на port 8443
в качестве конфигурации по умолчанию, поэтому, когда я обновляю значение ${jboss.https.port:8443} to ${jboss.https.port:443}
это генерирует ошибку. это то, что у меня есть в моем standalone.xml
:
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https"/>
<https-listener name="httpsServer" socket-binding="https" security-realm="ApplicationRealm"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<location name="/images" handler="ImagesDirHandler"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
</host>
</server>
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
1 ответ
Пожалуйста, предоставьте более точную информацию о вашей среде и ошибках.
У меня были такие же потребности, как у вас. Пользователи получают доступ к нашей системе через сеть, где единственные доступные запросы находятся на порту 80 или 443. Затем, когда клиент вызывает систему на порт 80, wildfly перенаправляет на порт 8443, и пользователь не может подключиться к системе. Решением было сделать перенаправление wildfly на порт 443 вместо 8443. Следуйте инструкциям для всех, кто ищет помощь в этом вопросе:
- В случае операционной системы на основе Linux порты до 1024 доступны для привязки только с привилегиями root.
- Не стоит запускать wildfly или любой другой веб-сервер / сервер приложений с привилегиями root на производственно-ориентированном сервере.
- В других руках, попробуйте запустить wildfly с "обычным" пользователем, напрямую связывающимся с портом 443 или 80, генерирующим отказано как ошибки.
Решение описанной выше проблемы состояло в том, чтобы привязать wildfly к портам 8080/8443 (без полномочий root) и попросить операционную систему перенаправить трафик с порта 80 на порт 8080 и с порта 443 на порт 8443. После этого настройте wildfly для перенаправления http запросы на запросы https через порт 443 вместо 8443.
Итак, предположим, что wildfly работает с http на порте 8080 и https на порте 8443 в ОС на базе Linux в качестве службы:
1) Остановить дикую бабочку sudo service wildfly stop
2) Добавьте команды iptables в сценарий запуска /etc/init.d/wildfly, например:
if [ $launched -eq 0 ]; then
log_warning_msg "$DESC hasn't started within the timeout allowed"
log_warning_msg "please review file \"$JBOSS_CONSOLE_LOG\" to see the status of the service"
else
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 8443
fi
PS: Вы добавляете правило для таблицы с именем "nat" из man-страниц iptables:
физ:
К этой таблице обращаются, когда встречается пакет, который создает новое соединение.
Итак, если вы запросили https://localhost/ до создания правила, соединение уже создано, поэтому таблица nat не применяется. Попробуйте с нового устройства.
куда $launched
переменная bash для представления состояния wildfly
2) В standalone.xml создайте дополнительную запись привязки к сокету:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9993}"/>
<socket-binding name="ajp" port="${jboss.ajp.port:8009}"/>
<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>
<socket-binding name="https-external" port="443"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
...
</socket-binding-group>
Обратите внимание на новую запись тега <socket-binding name="https-external" port="443"/>
3) Измените http-слушатель для перенаправления на https-external вместо https:
<http-listener name="default" socket-binding="http" redirect-socket="https-external" max-header-size=...
Где изменение - redirect-socket = " https-external "
4) Перезапуск wildfly: запуск sudo службы wildfly
После запуска wildfly проверьте файл console.log, чтобы увидеть отчет об ошибках.
Таким образом, если ваш раздел web.xml обеспечивает конфиденциальный транспорт:
....
<security-constraint>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
...
Wildfly перенаправит запросы через порт 80 или 8080 напрямую на порт 443 вместо 8443.
Obs: Хорошая идея сделать резервные копии вашего скрипта /etc/init.d/wildfly и конфигурации файла standalone.xml, прежде чем вносить в них изменения.