在 Wildfly/Jboss 中部署 ear 期间如何防止 HTTP 404

Posted

技术标签:

【中文标题】在 Wildfly/Jboss 中部署 ear 期间如何防止 HTTP 404【英文标题】:How to prevent HTTP 404 during deployment of ear in Wildfly/Jboss 【发布时间】:2016-06-02 18:36:27 【问题描述】:

我们使用 WildFly 10 作为我们的应用服务器并通过 Docker 进行部署(在 WF 中部署是普通的热部署)。我们没有使用 WildFly 的集群机制,而只是在前面安装了负载均衡器 (HAProxy)。

问题是 WF 在 EAR 部署仍在进行时打开了它的 HTTP 端口。这(当然?)会导致我们不想在 LB 中专门处理的 HTTP 404 错误。这可能会导致误报...

有没有办法只在 EAR 成功启动后才允许 HTTP 连接?

或者是否可以用“503 服务不可用”替换“404,因为这里没有部署任何内容”-错误?这样可以更好地表达问题,并且易于外部处理...

【问题讨论】:

我们有类似的设置,也尝试过处理这种情况。 haproxy 被配置为在 EAR 中对我们的简单服务进行健康检查,该服务仅在部署完成时返回 Http 200(通过 jmx.. 完成检查)。我也在寻找更简单的解决方案。 是的,我不想介绍另一个健康检查。 ctomc 的解决方案听起来不错。 【参考方案1】:

您可以为正在运行它的主机设置默认响应代码。

类似的东西:

<host name="default-host" alias="localhost" default-response-code="503">

或在 cli 中:

/subsystem=undertow/server=default-server/host=default-host:write-attribute(name=default-response-code, value=503)

对于您可能拥有的任何其他主机也是如此。

【讨论】:

非常好。我是否必须列出每个主机,或者我可以这样做吗? “*”? 工作得很好!我只是离开了“localhost”,它确实工作正常。但是有一个问题:你是怎么知道这个配置的?哪里是看的好地方?我发现 Wildfly 文档严重缺乏...... 好吧,我参与了为模型文档添加功能 :) 我建议使用 Wildscribe wildscribe.github.io/Wildfly/10.0.0.Final/subsystem/undertow/…,它显示了所有模型详细信息/配置选项 如果您通过 XML 配置它(我不鼓励),您可以随时查看 xsd 架构,您可以在发行版的 docs/schema 中找到。对于 undertow 子系统本身,您还可以在以下来源中找到它们:github.com/wildfly/wildfly/tree/10.0.0.Final/undertow/src/main/… 有谁知道如何为人类用户定制 503 页面内容? HTTP 503 适用于负载平衡器,但 503 - 服务不可用 不适合人类查看者。

以上是关于在 Wildfly/Jboss 中部署 ear 期间如何防止 HTTP 404的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Wildfly (Jboss) 为 ws 端点访问 CXF jar

Wildfly/JBOSS 持久性错误 MSC000001:无法启动服务 jboss.persistenceunit

Infinispan/JDBC 作为 Wildfly/JBoss 上 Hibernate Search 的后端

Wildfly Jboss NoClassDefFoundError:无法为 org/jboss/ws/core/jaxws/spi/ProviderImpl 链接错误

Dockerize Wildfly 和 ssh

如何使用多个独立实例管理 WildFly/JBoss