Wildfly 8:无法在不同端口部署 Jolokia 运行 w.r.t 同一 IP 下的其他应用程序
Wildfly 8 : Not able to deploy Jolokia running at different port w.r.t other applications under same IP
首先,这不是 Jolokia 问题,而是与 Wildfly 相关的问题。
我希望我在 wildfly 中的一个应用程序 (Jolokia) 监听与其他应用程序不同的端口(在默认端口监听)。在这两个 (here and ) 之后,我做了以下事情:
1. 在 Jolokia war 的 WEB-INF 目录下添加 jboss-web.xml(除了位于同一位置的 web.xml):
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.jboss.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss-web_8_0.xsd">
<context-root>/jolokia</context-root>
<virtual-host>jolokia-host</virtual-host>
<server-instance>jolokia-server</server-instance>
</jboss-web>
在 standalone.xml 中添加了以下 (jolokia-server)。我只想在本地主机上访问这两个应用程序(没有不同的域)。
<subsystem xmlns="urn:jboss:domain:undertow:1.2">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http"/>
<https-listener name="secure" socket-binding="https" security-realm="ssl-realm"/>
<host name="default-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
</host>
</server>
<server name="jolokia-server">
<http-listener name="jolokia-listener" socket-binding="jolokia-manager"/>
<host name="jolokia-host" alias="localhost">
<location name="/" handler="welcome-content"/>
<filter-ref name="server-header"/>
<filter-ref name="x-powered-by-header"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<filters>
<response-header name="server-header" header-name="Server" header-value="WildFly/8"/>
<response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
</filters>
</subsystem>
......
<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="jacorb" interface="unsecure" port="3528"/>
<socket-binding name="jacorb-ssl" interface="unsecure" port="3529"/>
<socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<socket-binding name="jolokia-manager" port="8282"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
有了这些,wildfly(和应用程序 Jolokia)开始在 8282 监听。但是,我只能通过本地主机从同一个盒子访问 Jolokia 应用程序:
curl -u admin:admin http://localhost:8282/jolokia
它returns成功。
curl -u admin:admin http://10.104.245.67:8282/jolokia
<html><head><title>Error</title></head><body>404 - Not Found</body></html>
但是,其他应用程序正在默认端口(在我们的示例中为 8778)侦听,并且可用于本地主机和真实 IP (10.104.245.67)。两个端口都连接到 0.0.0.0.
#netstat -an | grep 8282
tcp 0 0 0.0.0.0:8282 0.0.0.0:* LISTEN
#netstat -an | grep 8778
tcp 0 0 0.0.0.0:8778 0.0.0.0:* LISTEN
**更新:**
正如 ctomc 所指出的,将 "default-host" 添加到虚拟服务器解决了这个问题。
<server name="jolokia-server" default-host="jolokia-host">
完整配置见here.
您缺少名为 "jolokia-server"
服务器的默认主机配置
这就是它只响应 "localhost" 名称的原因。
解决此问题的最简单方法是像这样修改您的配置:
<server name="jolokia-server" default-host="jolokia-host">
即使没有虚拟主机映射(别名),这也会使 jolokia-host 默认主机
首先,这不是 Jolokia 问题,而是与 Wildfly 相关的问题。
我希望我在 wildfly 中的一个应用程序 (Jolokia) 监听与其他应用程序不同的端口(在默认端口监听)。在这两个 (here and
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web xmlns="http://www.jboss.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.jboss.com/xml/ns/javaee
http://www.jboss.org/j2ee/schema/jboss-web_8_0.xsd">
<context-root>/jolokia</context-root>
<virtual-host>jolokia-host</virtual-host>
<server-instance>jolokia-server</server-instance>
</jboss-web>
在 standalone.xml 中添加了以下 (jolokia-server)。我只想在本地主机上访问这两个应用程序(没有不同的域)。
<subsystem xmlns="urn:jboss:domain:undertow:1.2"> <buffer-cache name="default"/> <server name="default-server"> <http-listener name="default" socket-binding="http"/> <https-listener name="secure" socket-binding="https" security-realm="ssl-realm"/> <host name="default-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> <server name="jolokia-server"> <http-listener name="jolokia-listener" socket-binding="jolokia-manager"/> <host name="jolokia-host" alias="localhost"> <location name="/" handler="welcome-content"/> <filter-ref name="server-header"/> <filter-ref name="x-powered-by-header"/> </host> </server> <servlet-container name="default"> <jsp-config/> <websockets/> </servlet-container> <handlers> <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/> </handlers> <filters> <response-header name="server-header" header-name="Server" header-value="WildFly/8"/> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/> </filters> </subsystem>
......
<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="jacorb" interface="unsecure" port="3528"/>
<socket-binding name="jacorb-ssl" interface="unsecure" port="3529"/>
<socket-binding name="messaging-group" port="0" multicast-address="${jboss.messaging.group.address:231.7.7.7}" multicast-port="${jboss.messaging.group.port:9876}"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<socket-binding name="jolokia-manager" port="8282"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
有了这些,wildfly(和应用程序 Jolokia)开始在 8282 监听。但是,我只能通过本地主机从同一个盒子访问 Jolokia 应用程序:
curl -u admin:admin http://localhost:8282/jolokia
它returns成功。
curl -u admin:admin http://10.104.245.67:8282/jolokia
<html><head><title>Error</title></head><body>404 - Not Found</body></html>
但是,其他应用程序正在默认端口(在我们的示例中为 8778)侦听,并且可用于本地主机和真实 IP (10.104.245.67)。两个端口都连接到 0.0.0.0.
#netstat -an | grep 8282
tcp 0 0 0.0.0.0:8282 0.0.0.0:* LISTEN
#netstat -an | grep 8778
tcp 0 0 0.0.0.0:8778 0.0.0.0:* LISTEN
**更新:** 正如 ctomc 所指出的,将 "default-host" 添加到虚拟服务器解决了这个问题。
<server name="jolokia-server" default-host="jolokia-host">
完整配置见here.
您缺少名为 "jolokia-server"
服务器的默认主机配置这就是它只响应 "localhost" 名称的原因。
解决此问题的最简单方法是像这样修改您的配置:
<server name="jolokia-server" default-host="jolokia-host">
即使没有虚拟主机映射(别名),这也会使 jolokia-host 默认主机