让 Wildfly 监听端口 443 而不是 8443

问题描述 投票:0回答:2

所以我已将

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>
https port wildfly-9
2个回答
8
投票

请提供有关您的环境和错误的更准确的详细信息。

我和你有类似的需求。用户通过网络访问我们的系统,唯一可用的请求位于端口 80 或 443。然后,当客户在端口 80 上调用系统时,wildfly 会重定向到端口 8443,并且用户无法连接到系统。解决方案是让 Wildfly 重定向到端口 443 而不是 8443。请按照一些说明来寻求此问题的帮助:

  1. 如果是基于 Linux 的操作系统,则端口最多为 1024 仅可与 root 权限绑定。
  2. 在面向生产的服务器中运行 Wildfly 或任何其他具有 root 权限的 Web/应用程序服务器并不是一个好主意。
  3. 另一方面,尝试使用直接绑定到端口 443 或 80 的“常规”用户运行 Wildfly 会生成权限被拒绝等错误。

我上面描述的问题的解决方案是将wildfly绑定到端口8080/8443(无需root权限),并要求操作系统将流量从端口80重定向到端口8080,将端口443重定向到端口8443。之后,将wildfly配置为将 http 请求重定向到端口 443(而不是 8443)上的 https 请求。

因此,假设 Wildfly 在基于 Linux 的操作系统中使用端口 8080 上的 http 和端口 8443 上的 https 作为服务:

1)阻止野蝇:

sudo service wildfly stop

2) 在启动 /etc/init.d/wildfly 脚本中添加 iptables 命令,例如:

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:您可以在 iptables 手册页中的名为“nat”的表上添加一条规则:

nat:

当遇到创建新连接的数据包时,会查阅此表。

因此,如果您在创建规则之前请求了 https://localhost:443,则连接 wal 已经创建,因此不会应用 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 service wildfly start

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 文件配置进行任何更改之前,最好对其进行备份。


0
投票

尝试使用像这样的直接端口,它对我有用

<socket-binding name="https" port="443"/>
© www.soinside.com 2019 - 2024. All rights reserved.