第 4 章 网络和端口配置

4.1. 接口

在配置中,JBoss EAP 会指定已命名的接口。这将可以在配置中使用接口的逻辑名来指定独立的接口,而不需要在每次指定端口时都需要它们的完整详细信息。

这还使在一个管理域中的配置变得比较容易,因此网络接口的详细信息在多个机器中可能会有所不同。每个服务器实例都可以与一个逻辑名组相关联。

standalone.xmldomain.xmlhost.xml 文件都包括了接口的声明。根据使用的默认配置的不同,可能会有几个不同的预配置的接口名。management 接口可用于所有需要管理层的组件和服务,包括 HTTP 管理端点。public 阶段可用于所有与应用程序相关的网络通讯。unsecure 接口用于标准配置中的 IIOP 套接字。private 接口用于标准配置中的 JGroups 套接字。

4.1.1. 默认的接口配置

<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>
  <interface name="private">
    <inet-address value="${jboss.bind.address.private:127.0.0.1}"/>
  </interface>
  <interface name="unsecure">
    <inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
  </interface>
</interfaces>

在默认情况下,JBoss EAP 绑定这些接口到 127.0.0.1,但这些值可以通过设置合适的属性在运行时进行覆盖。例如,用下列命令将 JBoss EAP 作为独立服务器启动时,您可以设置 public 接口的 inet-address

$ EAP_HOME/bin/standalone.sh -Djboss.bind.address=IP_ADDRESS

或者,您可以在命令行里使用 -b 参数。关于服务器启动选项的更多信息,请参考服务器运行时参数

重要

如果您修改了 JBoss EAP 使用的默认网络接口或端口,您必须记得修改任何使用这些接口或端口的脚本,这包含 JBoss EAP 服务脚本,而且记得在访问管理控制台或管理 CLI 时指定正确的接口和端口。

4.1.2. 配置接口

网络接口通过指定一个逻辑名和物理接口选择条件进行声明。选择条件可以包括一个使用通配符的地址,也可以指定一组字符,只有包括这些字符的接口或地址才可以被有效匹配。如需了解选择条件的网站列表,请参阅接口属性项。

接口可以通过管理控制台或管理 CLI 进行配置。以下是添加和更新接口的一些示例。管理 CLI 命令被首先显示,接下来是相应的配置 XML。

添加带有 NIC 值的接口

添加具有 eth0 NIC 值的新接口。

/interface=external:add(nic=eth0)
<interface name="external">
   <nic name="eth0"/>
</interface>
添加带有几个条件值的接口

添加一个新的网络接口,这个接口的匹配条件是:在特定子网中、已在线、支持多点传送,并且不是点对点的。

/interface=default:add(subnet-match=192.168.0.0/16,up=true,multicast=true,not={point-to-point=true})
<interface name="default">
   <subnet-match value="192.168.0.0/16"/>
   <up/>
   <multicast/>
   <not>
      <point-to-point/>
   </not>
</interface>
更新接口属性

更新 public 接口的默认 inet-address 值,保留 jboss.bind.address 属性以允许在运行时设置这个值。

/interface=public:write-attribute(name=inet-address,value="${jboss.bind.address:192.168.0.0}")
<interface name="public">
    <inet-address value="${jboss.bind.address:192.168.0.0}"/>
</interface>
把接口添加到受管域里的一个服务器
/host=master/server-config=SERVER_NAME/interface=INTERFACE_NAME:add(inet-address=127.0.0.1)
<servers>
   <server name="SERVER_NAME" group="main-server-group">
      <interfaces>
         <interface name="INTERFACE_NAME">
            <inet-address value="127.0.0.1"/>
         </interface>
      </interfaces>
   </server>
</servers>

4.2. 套接字绑定

套接字绑定和套接字绑定组可以用来定义网络端口,以及它们与 JBoss EAP 配置所需的网络接口的关系。套接字绑定就是一个端口的已命名的配置。套接字绑定组是一组套接字绑定声明的集合,它们被分成组,并带有一个逻辑名。

这样,配置中的其它部分就可以使用逻辑名来指定套接字绑定,而不需要使用套接字配置的详细信息。

对于这些已命名配置的声明可以在 standalone.xmldomain.xml 配置文件中找到。一个独立的服务器只包括一个套接字绑定组,而一个管理的域可以包括多个组。您可以为管理域中的每个服务器组创建一个套接字绑定组,或在多个服务器组间共享一个套接字绑定组。

JBoss EAP 默认使用的端口取决于所使用的套接字绑定组以及部署的要求。

4.2.1. 管理端口

JBoss EAP 7 合并了管理端口。在默认情况下,JBoss EAP 7 对于原生管理(被管理 CLI 使用)和 HTTP 管理(被基于 Web 的管理控制台使用)使用端口 9990。在 JBoss EAP 6 里用于原生管理端口的 9999 不再使用,但仍可以在需要时启用。

如果管理控制台启用了 HTTPS,那默认情况下端口 9993 将被使用。

4.2.2. 默认的套接字绑定

JBoss EAP ships with a socket binding group for each of the four predefined profiles (default, ha, full, full-ha).

关于默认套接字绑定的详细信息,如默认端口和描述,请参考默认套接字绑定章节。

重要

如果您修改了 JBoss EAP 使用的默认网络接口或端口,您必须记得修改任何使用这些接口或端口的脚本,这包含 JBoss EAP 服务脚本,而且记得在访问管理控制台或管理 CLI 时指定正确的接口和端口。

独立服务器

在运行为独立服务器时,每个配置文件都只定义一个套接字绑定组。每个独立配置文件(standalone.xmlstandalone-ha.xmlstandalone-full.xmlstandalone-full-ha.xml)都为它对应的配置集使用的技术定义了套接字绑定。

例如,默认的独立服务器配置文件(standalone.xml)指定了下面的套接字绑定。

<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>
受管域

When running in a managed domain, all socket binding groups are defined in the domain.xml file. There are four predefined socket binding groups:

  • standard-sockets
  • ha-sockets
  • full-sockets
  • full-ha-sockets

每个套接字绑定组都为对应的配置集使用的技术指定了套接字绑定。例如,full-ha-sockets 套接字绑定组定义了几个高可用性的 full-ha 所使用的 jgroups 套接字绑定。

<socket-binding-groups>
    <socket-binding-group name="standard-sockets" default-interface="public">
        <!-- Needed for server groups using the 'default' profile  -->
        <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>
    <socket-binding-group name="ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'ha' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full' profile  -->
    ...
    </socket-binding-group>
    <socket-binding-group name="full-ha-sockets" default-interface="public">
        <!-- Needed for server groups using the 'full-ha' profile  -->
        <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="iiop" interface="unsecure" port="3528"/>
        <socket-binding name="iiop-ssl" interface="unsecure" port="3529"/>
        <socket-binding name="jgroups-mping" interface="private" port="0" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45700"/>
        <socket-binding name="jgroups-tcp" interface="private" port="7600"/>
        <socket-binding name="jgroups-tcp-fd" interface="private" port="57600"/>
        <socket-binding name="jgroups-udp" interface="private" port="55200" multicast-address="${jboss.default.multicast.address:230.0.0.4}" multicast-port="45688"/>
        <socket-binding name="jgroups-udp-fd" interface="private" port="54200"/>
        <socket-binding name="modcluster" port="0" multicast-address="224.0.1.105" multicast-port="23364"/>
        <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>
</socket-binding-groups>
注意

管理接口的套接字配置是在域控制器的 host.xml 文件里定义的。

4.2.3. 配置套接字绑定

在定义套接字绑定时,您可以配置 portinterface 属性以及多点传送设置,如 multicast-addressmulticast-port。关于全部的可用套接字绑定属性,请参考套接字绑定属性章节。

套接字绑定可用管理控制台或管理 CLI 来配置。下面的步骤使用管理 CLI 来添加套接字绑定组、添加套接字绑定和配置套接字绑定设置。

  1. 添加新的套接字绑定组。请注意,在作为独立服务器运行时,无法执行这个步骤。

    /socket-binding-group=new-sockets:add(default-interface=public)
  2. 添加套接字绑定。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:add(port=1234)
  3. 修改套接字绑定以使用默认接口之外的接口,这是通过套接字绑定组设置的。

    /socket-binding-group=new-sockets/socket-binding=new-socket-binding:write-attribute(name=interface,value=unsecure)

下面的例子展示了在完成上述步骤后的 XML 配置文件。

<socket-binding-groups>
    ...
    <socket-binding-group name="new-sockets" default-interface="public">
        <socket-binding name="new-socket-binding" interface="unsecure" port="1234"/>
    </socket-binding-group>
</socket-binding-groups>

4.2.4. 端口偏移

端口偏移量是一个添加至所有在套接字绑定组里指定的端口值的数值。这允许该服务器继承套接字绑定组里定义的端口值,而偏移量确保了不会和相同主机上的其他服务器冲突。例如,如果套接字绑定组的 HTTP 端口是 8080,而服务器使用偏移量 100,那这个 HTTP 端口会是 8180

下面是一个使用管理 CLI 为受管域的服务器设置端口偏移量 250 的例子。

/host=master/server-config=server-two/:write-attribute(name=socket-binding-port-offset,value=250)

端口偏移量可以用于受管域里的服务器,也可以用于在相同主机上运行的多个独立服务器。

当用 jboss.socket.binding.port-offset 属性启动独立服务器时您可以传入一个端口偏移量。

$ EAP_HOME/bin/standalone.sh -Djboss.socket.binding.port-offset=100

4.3. IPv6 地址

在默认情况下,JBoss EAP 是以 IPv4 地址运行的。下面的步骤展示了如何配置 JBoss EAP 以 IPv6 地址运行。

根据 IPv6 地址配置 JVM 栈

更新启动配置以首选 IPv6 地址。

  1. 打开启动配置文件。

    • 当以独立服务器运行时,编辑 EAP_HOME/bin/standalone.conf 文件(或对于 Windows Server,编辑 standalone.conf.bat)。
    • 当运行在受管域里时,编辑 EAP_HOME/bin/domain.conf 文件(或对于 Windows Server,编辑 domain.conf.bat)。
  2. 设置 java.net.preferIPv4Stack 属性为 false

    -Djava.net.preferIPv4Stack=false
  3. 附加 java.net.preferIPv6Addresses 属性并设置它为 true

    -Djava.net.preferIPv6Addresses=true

下面的例子展示了在完成上述修改后启动配置里的 JVM 选项。

# Specify options to pass to the Java VM.
#
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms1303m -Xmx1303m -Djava.net.preferIPv4Stack=false"
   JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true"
   JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv6Addresses=true"
else

根据 IPv6 地址更新接口声明

配置里的默认接口值可改为 IPv6 地址。例如,下面的管理 CLI 命令将 management 接口设置为 IPv6 loopback 地址(::1)。

/interface=management:write-attribute(name=inet-address,value="${jboss.bind.address.management:[::1]}")

下面的例子展示了在执行上述命令后的 XML 配置文件。

<interfaces>
    <interface name="management">
        <inet-address value="${jboss.bind.address.management:[::1]}"/>
    </interface>
    ....
</interfaces>