【问题标题】:make wildfly listen on port 443 not 8443让 wildfly 监听端口 443 而不是 8443
【发布时间】:2016-06-30 12:25:07
【问题描述】:

所以我已将SSL 证书添加到我的wildfly 9 并且它正在工作,但我想将我的standalone.xml 配置为在port 443 上收听https 而不是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>

【问题讨论】:

  • * WildFly 应用服务器未在允许的超时时间内启动 * 请查看文件“/var/log/wildfly/console.log”以查看服务状态
  • /var/log/wildfly/console.log 中有什么东西吗?

标签: https port wildfly-9


【解决方案1】:

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

我和你有类似的需求。用户通过网络访问我们的系统,其中唯一可用的请求在端口 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) 停止wildfly: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:你在一个名为“nat”的表上添加了一条规则,来自 iptables 的手册页:

自然:

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

所以,如果你在创建规则之前请求了https://localhost:443,那么连接wal已经创建了,所以nat表没有被应用。在新设备上尝试。

其中$launched是代表wildfly状态的bash变量

2) 在standalone.xml 中,创建一个额外的socket-binding 条目:

<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>

注意新标签条目&lt;socket-binding name="https-external" port="443"/&gt;

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。

Obs:最好先备份 /etc/init.d/wildfly 脚本和standalone.xml 文件配置,然后再对它们进行任何更改。

【讨论】:

  • 我有完全相同的要求。遵循以上所有要点。但是 443 端口不工作(显示“无法访问此站点”)。虽然 8443 像上一个一样正常工作。还有其他解决方法吗??
  • 验证您在 Wildfly 启动时是否记录了任何错误。
  • 似乎让wildfly/tomcat/glassfish在80和443端口上运行对我们来说太聪明太容易了。这就是他们没有这样做的原因。您有 98% 的人在挖掘配置更改端口.. 而不是只有 1% 或 2% 的人将端口更改为默认端口以外的其他端口。关于 java web dev 的一切都让我想吐。
  • 不错的答案。请记住 nat 表的工作原理:来自手册页“遇到创建新连接的数据包时会查询此表”,因此如果您在防火墙规则之前对其进行了测试,则不会应用它。已编辑;)
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 2022-06-23
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2023-04-07
相关资源
最近更新 更多