заставить 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>

person majd hwas    schedule 30.06.2016    source источник
comment
* Сервер приложений WildFly не запущен в течение отведенного тайм-аута * просмотрите файл /var/log/wildfly/console.log, чтобы увидеть статус службы   -  person majd hwas    schedule 01.07.2016
comment
Есть что-нибудь в /var/log/wildfly/console.log?   -  person James R. Perkins    schedule 02.07.2016


Ответы (1)


Пожалуйста, предоставьте более точную информацию о вашей среде и ошибках.

У меня были такие же потребности, как у вас. Пользователи получают доступ к нашей системе через сеть, где доступны только запросы на порт 80 или 443. Затем, когда клиент вызывает систему через порт 80, wildfly перенаправляет на порт 8443, и пользователь не может подключиться к системе. Решение состояло в том, чтобы перенаправить wildfly на порт 443 вместо 8443. Следуйте некоторым инструкциям для всех, кто ищет помощи в этой проблеме:

  1. В случае операционной системы на базе Linux порты до 1024 доступны для привязки только с привилегиями root.
  2. Не рекомендуется запускать wildfly или любой другой сервер веб-приложений с привилегиями root на сервере, ориентированном на производство.
  3. С другой стороны, попытка запустить 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» со справочных страниц iptables:

натур:

К этой таблице обращаются, когда встречается пакет, создающий новое соединение.

Итак, если вы запросили https://localhost:443 перед созданием правила, соединение уже создано, поэтому 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-listener для перенаправления на 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.

Замечания: Рекомендуется сделать резервные копии вашего скрипта /etc/init.d/wildfly и конфигурации файла standalone.xml, прежде чем вносить в них какие-либо изменения.

person Duloren    schedule 22.09.2016
comment
у меня точно такое же требование. следовал всем вышеперечисленным пунктам. Но порт 443 не работает (показывает, что этот сайт недоступен). Хотя 8443 работает нормально, как и предыд. любой другой обходной путь?? - person ManishS; 17.03.2017
comment
Проверьте, есть ли у вас какие-либо зарегистрированные ошибки при запуске wildfly. - person Duloren; 25.03.2017
comment
кажется, что было бы слишком умно и просто заставить wildfly/tomcat/glassfish работать на портах 80 и 443. вот почему они этого не сделали. у вас есть 98% людей, копающихся в конфигурации, меняющих порты ... вместо того, чтобы просто 1 или 2% людей меняют порт на что-то другое, кроме значения по умолчанию. все, что связано с java web dev, вызывает у меня рвоту. - person user2914191; 03.08.2017
comment
хороший ответ. Помните о работе таблицы nat: из справочной страницы. К этой таблице обращаются, когда встречается пакет, создающий новое соединение, поэтому, если вы протестировали его до правила брандмауэра, он не применяется. Отредактировал ;) - person Daniele Licitra; 14.03.2018