将端口从 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 文件中确实有VirtualHost
可以在 httpd.conf
内部。请阅读有关ajp
连接的httpd 手册和WildFly 手册。尝试使用谷歌搜索“apache as a frontend to wildfly using mod_jk”。
我之前遗漏了一个重要的部分。在应用程序服务器重新启动之前,该站点曾经按预期工作。我以前不知道 Wildfly 或 Apache 是如何工作的,但我做了一个 httpd -M
和 rpm –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 地址的主要内容,如果未能解决你的问题,请参考以下文章