将端口从 8080 更改为 80,以查看域名上的 JBoss/Wildfly Java 应用程序,而不是 IP 地址

Posted

技术标签:

【中文标题】将端口从 8080 更改为 80,以查看域名上的 JBoss/Wildfly Java 应用程序,而不是 IP 地址【英文标题】:Change Port from 8080 to 80 to see JBoss/Wildfly Java app on domain name, not IP Address 【发布时间】:2021-01-01 08:15:39 【问题描述】:

我有一个在专用 Linux 服务器上使用 Wildfly 16 的 Java 应用程序,运行 WHM CentOS 6.10。该应用程序在 IP 地址端口 8080 上运行。

Apache 2.4 已安装并正在运行。有人告诉我 Apache 使用域名所在的端口 80。我可以从域 URL 中看到位于 public_html 下的样板 index.html 页面,但看不到 WildFly 索引页面。 IP 地址端口 8080 确实显示了 WildFly 索引页面。需要使用域名显示。

我尝试了以下方法:

./bin/standalone.sh -Djboss.http.port=80

ERROR [org.jboss.msc.service.fail](MSC 服务线程 1-5)MSC000001:无法启动服务 org.wildfly.undertow.listener.default:服务中的 org.jboss.msc.service.StartException org.wildfly.undertow.listener.default:地址已经在使用/127.0.0.1:80

在standalone.xml 中,我更改了以下内容: <socket-binding name="http" port="80"/>

很遗憾,我不知道如何发布所有错误,但我可以提交以下内容: 错误 [org.jboss.as.controller.management-operation] - 失败描述:“WFLYCTL0080:失败的服务”=>“org.wildfly.undertow.listener.default”

INFO [org.jboss.as.controller](控制器引导线程)​​WFLYCTL0183:服务状态报告 WFLYCTL0186:无法启动的服务:服务 org.wildfly.undertow.listener.default:WFLYUT0082:无法启动“默认”侦听器。

通过更改以下内容在standalone.xml 中再次尝试: <socket-binding name="http" port="$jboss.http.port:80"/>

错误 [org.jboss.as.controller.management-operation] WFLYCTL0013:操作(“添加”)失败-地址:

故障描述:"WFLYCTL0080: 失败的服务" => "org.wildfly.undertow.listener.default" => "WFLYUT0082: 无法启动“默认”侦听器。 原因:java.net.SocketException: Permission denied"

WFLYCTL0186:无法启动的服务:服务 org.wildfly.undertow.listener.default:WFLYUT0082:无法启动“默认”侦听器。 WFLYCTL0448:另外 2 个服务因依赖项丢失或失败而关闭

最后,如果有这个帮助,这个standalone.xml 还包括以下内容:

<interfaces>
        <interface name="management">
            <inet-address value="$jboss.bind.address.management:127.0.0.1"/>
        </interface>
        <interface name="public">
            <inet-address value="$jboss.bind.address:127.0.0.1"/>
        </interface>
 </interfaces>

请帮助将应用程序从 IP 地址、端口 8080 切换为显示在域 URL 中。也许我需要将域转发或指向 JBOSS 主目录。不确定或如何。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您收到“地址已在使用中的错误”,因为 Apache httpd 已绑定到端口 80。因此,您无法将 WildFly Java 应用程序绑定到端口 80,因此您的 Java 应用程序将无法启动。您需要使用 WildFly 配置/集成您的 Apache Web 服务器。像 Apache 这样的东西提供静态内容,而 WildFly 是它的应用程序服务器。您的httpd.conf 中会有类似的内容:

JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T"
LoadModule jk_module modules/mod_jk.so

那么您的vhosts.conf 中就会有类似的内容:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/dir/dir"
    
    ... snipped ...

    JkMount /* jboss
</VirtualHost> 

然后在workers.properties

worker.list = jboss

worker.jboss.type=ajp13
worker.jboss.host=localhost
worker.jboss.port=8009

然后在standalone.xml:

<socket-binding-group ... snipped ... >
    <socket-binding name="ajp" port="$jboss.ajp.port:8009" />
    ... snipped ...
</socket-binding-group>

【讨论】:

感谢您的回复。我对你的回答有点困惑。我需要添加到我的 httpd.conf 吗?我也找不到 vhost.conf,但我的 httpd.conf 文件中确实有 我的回答旨在为您指明将 Apache Web Server 与 WildFly/JBoss 集成的方向。你用谷歌搜索过吗?这个想法是您不需要更改 WildFly 端口。是的,VirtualHost 可以在 httpd.conf 内部。请阅读有关ajp 连接的httpd 手册和WildFly 手册。尝试使用谷歌搜索“apache as a frontend to wildfly using mod_jk”。 我之前遗漏了一个重要的部分。在应用程序服务器重新启动之前,该站点曾经按预期工作。我以前不知道 Wildfly 或 Apache 是如何工作的,但我做了一个 httpd -Mrpm –qa | grep mod_proxy 来查看服务器上启用的 apache 模块是 mod_proxy。 httpd.conf 将我引导至管理员包含文件 pre_virtualhost_global.conf。不幸的是,即使我在 httpd 和 wildfly 上进行了停止/启动,我在该文件中的任何更新都没有执行任何好的或坏的更改。 是的,这是将 Apache 与 WildFly/JBoss 集成的另一种方式。不要搜索如何配置mod_jk,而是搜索mod_proxy。对于mod_proxy,我猜你正在使用 Apache 作为负载均衡器。 请看更新【参考方案2】:

通过 mod_proxy 和 CentOS 使用 Apache 作为 Wildfly 的反向代理。

    验证 Apache 使用的配置文件 (httpd.conf)

    httpd - V | grep SERVER_CONFIG_FILE

    验证模块是否在httpd.conf 或模块includes 文件中启用

    LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so

    由于httpd.conf 文件警告由于新的 Apache 升级或重新生成配置文件而导致文件更新,因此改为使用配置 include 文件。在这种情况下,includes/post_virtualhost_global.conf(不是pre_virtualhost_global.conf)。

    将以下内容添加到includes/post_virtualhost_global.conf

    ProxyPreserveHost 开启 代理通/http://localhost:8080/ ProxypassReverse / http://localhost:8080/

    重启Apache服务

    服务 httpd 停止

    服务 httpd 启动

【讨论】:

以上是关于将端口从 8080 更改为 80,以查看域名上的 JBoss/Wildfly Java 应用程序,而不是 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

将默认端口(80)更改为 8080 时如何设置虚拟主机?

XAMPP - 端口 80 正在使用...虽然我将端口更改为 8080

如何将默认端口号更改为 Tomcat 端口号 8080?

请问怎样将域名绑定到IP地址的8080端口?

nginx怎么把来自80端口的请求交给8080

如何将Tomcat的端口从8080改为80?