Как изменить порт wildfly

I just started JAVA EE development with WildFly 8.2. My first problem is how to change the default port 8080 to something else? I found many xml files containing below line. <socket-binding na...

I just started JAVA EE development with WildFly 8.2. My first problem is how to change the default port 8080 to something else?

I found many xml files containing below line.

<socket-binding name="http" port="${jboss.http.port:8080}"/>

but I guess I don’t have to change all of them?!

asked Jan 13, 2015 at 12:29

dermoritz's user avatar

dermoritzdermoritz

12.2k21 gold badges97 silver badges175 bronze badges

2

In your standalone.xml file, look for this element:

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">

The port-offset attribute lets you modify all the ports wildfly uses, by adding the number you specify.

For example, the default value is 0, which means that http port will be 8080, remoting 4447, etc.

If you use ${jboss.socket.binding.port-offset:100}, http port will be 8180 (8080+100), remoting 4547 (4447+100), etc.

So you need to change the offset, nothing else.

EDIT: You can also do this by using a system property at startup, check http://www.mastertheboss.com/jboss-server/jboss-configuration/configuring-port-offset-on-jboss-as-wildfly

acm's user avatar

acm

2,0283 gold badges14 silver badges34 bronze badges

answered Jan 13, 2015 at 13:05

mendieta's user avatar

mendietamendieta

3,4402 gold badges19 silver badges23 bronze badges

1

An alternative would be to start the WildFly instance by directly specifying the port in the startup command.


Windows:

standalone.bat -Djboss.http.port=1234

*nix:

standalone.sh -Djboss.http.port=1234

This would start the port for http-remoting on 1234. Some context here.

answered Apr 10, 2017 at 9:35

TT.'s user avatar

TT.TT.

15.6k6 gold badges46 silver badges86 bronze badges

2

Don’t forget to also offset your debug port if you are running in debug mode. This should be in the standalone.conf

answered Mar 17, 2016 at 4:04

Zwakele Mgabhi's user avatar

0

If youre running onLinux`, try this command at the start

./standalone.sh -b 0.0.0.0 -Djboss.socket.binding.port-offset=1000

If youre working onWindows` environment,

standalone.bat -Djboss.socket.binding.port-offset=1000

answered Aug 16, 2018 at 4:43

Du-Lacoste's user avatar

Du-LacosteDu-Lacoste

10.7k2 gold badges64 silver badges50 bronze badges

/socket-binding-group=standard-sockets:write-attribute(name=port-offset,value=100)

You may need to start the cli in offline mode if there is another wildfly running.

answered Dec 24, 2021 at 13:46

grigouille's user avatar

grigouillegrigouille

4563 silver badges12 bronze badges

This tutorial discusses how to configure the default ports for WildFly and JBoss EAP through the various server releases. We will learn how to change a single port definition, such as the default 8080 port and how to shift all ports using a port offset.

WildFly / JBoss EAP default ports

JBoss EAP  and WildFly use Socket Binding groups to configure the network ports, which are actively listening for incoming connections. In Standalone mode, there is a single Socket Binding Group which defines all port settings:

    <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>

For example, if you want to change the default 8080 port for the HTTP Server, you can pass the jboss.http.port attribute as System Property:

$ ./standalone.sh -Djboss.http.port=8090

Most of the times, it is preferable to define an offset for all ports. You can do that through the jboss.socket.binding.port­offset attribute which shifts all port definitions of a fixed number. For example, to declare an offset of 100, start the application server as follows:

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

The corresponding interfaces used to bind the ports are defined by the default-interface attribute. Here are the default interfaces available:

    <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>

When you are running in Domain mode, there are multiple Socket Binding Groups which you can assign to a Server group:

<server-group name="main-server-group" profile="full-ha">  
    <socket-binding-group ref="full-ha-sockets"/>
</server-group>

In the above example, the main-server-group uses the full-ha-sockets configuration:

<socket-binding-group name="full-ha-sockets" default-interface="public">
    <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>

Please notice that WildFly uses the port 9990 for all management interfaces (Web interface and CLI). On the other habd, EAP 6/ AS 7 uses the native port 9999 to communicate over the CLI.

How to find the JBoss Port number

If you cannot access the server configuration, a simple way to find which port the application server is using is the netstat command.

Firstly, check which is the PID of the application server:

ps -ef | grep jboss

Then, use the netstat command with the following set of options:

netstat -tulpn | grep <pid>

In this example, the application server is using the ports 8080, 9990 and 8443:

how to I know which port is using jboss

JBoss AS 5 Port settings

The JBoss AS port configuration file is located in confbindingservice.beansMETA-INFbindings-jboss-beans.xml.  This file gathers port configuration information about both AS services and the Web server services.

Actually the release Community version JBoss AS 6.x of the application server provides a richer abstraction by removing port definitions also from the Web server configuration file (server.xml) which now contains an application server property

<Connector protocol="HTTP/1.1" port="${jboss.web.http.port}" address="${jboss.bind.address}" 
 redirectPort="${jboss.web.https.port}" />

 <Connector protocol="AJP/1.3" port="${jboss.web.ajp.port}" address="${jboss.bind.address}"
 redirectPort="${jboss.web.https.port}" />

The single service ports are properties of the StandardBindings Bean.

<bean name="StandardBindings" class="java.util.HashSet">
   <constructor>
       <parameter class="java.util.Collection">
       <set elementClass="org.jboss.services.binding.ServiceBindingMetadata">
 

       <!-- Naming Service -->
       <bean class="org.jboss.services.binding.ServiceBindingMetadata">
         <property name="serviceName">jboss:service=Naming</property>
         <property name="bindingName">Port</property>
         <property name="port">1099</property>
         <property name="description">The listening socket for the Naming service</property>
       </bean>

. . . . . . . . . . . .

     </set>
     </parameter>
   </constructor>
 </bean>

Supposing we have bound JBoss AS to the IP Address 10.2.20.156, here’s the list of ports engaged by the application server:

Port       Description
-------------------------------------------------
1090       RMI/JRMP for Remote JMX

1091       RMI server socket

1098       Naming Service - RMI requests from client proxies

1099       Naming Service - Main port

3873       EJB3 Remoting Connector

4446       JBoss Remoting Connector - Unified Invoker

4712       JBossTS Recovery Manager

4713       JBossTS Transaction Status Manager

4714       JBossTS - used to create a unique process id

5445       HornetQ

5455       Socket for HornetQ throughput connection factory

5500       Non-SSL Remoting

5501       SSL Remoting

8009       AJP Port

8080       HTTP Port

8083       Dynamic class and resource loading

Clustered servers will additionally open the following ports:

1100  HA JNDI Service
1101  HA JNDI Service
3528  Corba IIOP Service

The Service Binding Manager

The Service Binding Manager co-ordinates which ports the JBoss Application Server instance listens on when it starts up and the Administration Console provides a mechanism for configuring this service to change which ports get used.

The Service Binding Manager can be used to change the default port sets, without changing the single service ports.

Out of the box, the JBoss Application Server 5 ships with four port sets:

* ports-default: The standard ports, for instance JBoss HTTP is on 8080.
* ports-01: The standard ports incremented by 100. For example, HTTP is on 8180
* ports-02: The standard ports incremented by 200. For example, HTTP is on 8280
* ports-03: The standard ports incremented by 300. For example, HTTP is on 8380

In order to change the port set you can edit the file bindings-jboss-beans.xml and set for example the ports-01

<parameter>${jboss.service.binding.set:ports-01}</parameter>

You can as well change the Service Binding ports from the start-up script of the application server. For example:

run -Djboss.service.binding.set=ports-01

This is pretty useful if you don’t have to maintain a separate copy of the all folder if you want to, say, start up multiple instances of JBoss running as a cluster.

You can change Port binding by means of the JBoss AS admin console: reach the Service Binding Manager thorough the path:

<machine> : JBossAS Servers : JBoss AS 6 (default) : Service Binding Manager.

Next go to its Configuration tab and for the Active Binding Set Name property enter the name of the new port set you wish the JBoss Application Server instance to use and hit the SAVE button at the bottom of the page.

jboss port configuration

Select the Service Binding Sets  folder from the navigation, hit the Add a new resource button on the main panel and enter in the necessary information.
Once you have updated the configuration for the Service Binding Manager, the JBoss Application Server instance must be restarted for those changes to take effect.


See the following article for more details about the error “java.net.BindException: Address already in use: JVM_Bind ” : Solving java.net.BindException: Address already in use: JVM_Bind


Post Views:
2,441

This is an article about JBoss Wildly Change Port Configuration. JBoss WildFly runtime manages the applications deployed on its server. It used to be called as JBoss application server. In this article, setup of WildFly Change Port Configuration is presented and discussed.

1. Introduction

A JBoss WildFly instance can be deployed on the standalone server. The default port for the standalone server is 8080. The port can be changed in the Jboss wildfly configuration

2. JBoss Wildfly Change Port

2.1 Prerequisites

Java 7 or 8 is required on the machine where JBoss Wildfly is running. In addition, JBoss Wildfly need to be installed after the Java is installed.

2.2 Download

You can download Java 7 and Java 8 from the links Oracle site1 and site2  respectively. JBoss Wildfly can be downloaded from this link.

2.3 Setup

JDK environment variable can be set in JBoss Wildfly standalone.conf. This configuration file is in the bin folder. For example, The script below shows the environmental variables set for JBoss Wildfly.

environmental variables

JAVA_HOME=”/jboss/jdk1.8.0_73″
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
JBOSS_HOME=”/jboss/wildfly-10.1.0.Final”
JAVA_OPTS= -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true
export JAVA_OPTS

2.4 Running the JBoss Wildfly

Wildfly server can be started with this command from wildfly-16.0.0.Final/bin:start command

./standalone.sh

After the wildfly server starts and you can check in the browser using the url : http://localhost:8080/

JBoss Wildfly Change Port Configuration - Wildflly started

Wildflly started

A sample war provided below in the download section can be deployed on to the server using the admin console. You can check the war deployed by using the link http://localhost:8080/sample

JBoss Wildfly Change Port Configuration - Hello World

Sample Hello World

2.5 Port Change Configuration

The port change can be done in the socket binding element of the standalone.xml configuration file.standalone.xml port configuration

<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>

The http port number change should not conflict with https, ajp, management-https and other protocols. You can pick the port number 8443 + 20 = 8463. 8443 is the biggest port in the range 8000 – 9000. The changed element in the file is shown below.standalone.xml port changed configuration

<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:8463}"/>
        <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>

The Wildfly server is restarted and the link to the deployed sample war will be http://localhost:8463/sample

JBoss Wildfly Change Port Configuration - Port changed to 8463

Port changed to 8463

3 Download The Source Code

Sample war file can be used for deployment on JBoss WildFly Server

Содержание

  • 1 Настройка
    • 1.1 Из командной строки
      • 1.1.1 Настройка PayControl
      • 1.1.2 Добавление источников данных (разные СУБД)
    • 1.2 Удаление настроек по умолчанию
    • 1.3 Добавление сертификатов корпоративных УЦ
    • 1.4 Включение и конфигурирование HTTPS
      • 1.4.1 Добавление сертификата
      • 1.4.2 Отключение HTTP порта (8080)
      • 1.4.3 Переключение публикации схемы на HTTPS
      • 1.4.4 Указание определённых стандартов защиты и алгоритмов
      • 1.4.5 Включение дополнительных заголовков
    • 1.5 Изменение номера порта
      • 1.5.1 Изменение порта PCS
      • 1.5.2 Изменение порта PCIS Internal
      • 1.5.3 Изменение порта PCIS External
    • 1.6 Валидация подключения
      • 1.6.1 PostgreSQL
      • 1.6.2 Oracle
      • 1.6.3 MS SQL
  • 2 Журналирование
    • 2.1 Доступ к данным журнала
    • 2.2 Включение журналирования SOAP-вызовов
    • 2.3 Направление логов Wildfly в Kafka
      • 2.3.1 Модули
        • 2.3.1.1 org.apache.kafka.clients
        • 2.3.1.2 org.apache.kafka.log4jappender
        • 2.3.1.3 org.apache.log4j
        • 2.3.1.4 org.jboss.as.standalone
      • 2.3.2 Хэндлеры
        • 2.3.2.1 kafka
        • 2.3.2.2 async-kafka-wrapper
        • 2.3.2.3 Включение хэндлера
  • 3 Проблемы и способы их устранения
    • 3.1 Очень медленный старт через standalone.sh (каждый этап скрипта запуска — с большими задержками). Система отправляет сигнал на остановку сервиса
    • 3.2 Не происходит «биндинг» IP-адреса адаптера
    • 3.3 Частое появление WARNING в логе
    • 3.4 INFO: Disabling contextual LOB creation as createClob() method threw error
    • 3.5 Wildfly не стартует как служба и нет логов

Настройка

Из командной строки

Подключение к консоли:

sudo /opt/wildfly/bin/jboss-cli.sh --connect

Выполнение команд в неинтерактивном режиме:

sudo /opt/wildfly/bin/jboss-cli.sh --connect --commands=ls deployment

Настройка PayControl

Удаление настроек по умолчанию:

data-source remove --name=ExampleDS
/subsystem=ee/service=default-bindings:remove()
reload
/subsystem=datasources/jdbc-driver=h2:remove
/subsystem=undertow/server=default-server/host=default-host/location=/:remove()
/subsystem=undertow/configuration=handler:remove()

Добавление драйвера (postgresql) и источников данных:

module add --name=org.postgresql --resources=/opt/paycontrol/postgresql-42.2.5.jar --dependencies=javax.api,javax.transaction.api,javax.servlet.api
/subsystem=datasources/jdbc-driver=postgres:add(driver-name="postgres",driver-module-name="org.postgresql",driver-class-name=org.postgresql.Driver)
data-source add --jndi-name=java:jboss/datasources/PayControlDS --name=PayControlDS --connection-url=jdbc:postgresql://localhost:5432/pcs --driver-name=postgres --user-name=pcuser --password=XXXXXXXX
data-source add --jndi-name=java:jboss/datasources/PayControlISDS --name=PayControlISDS --connection-url=jdbc:postgresql://localhost:5432/pcis --driver-name=postgres --user-name=pcuser --password=XXXXXXXX

Установка wsdl-host

/subsystem=webservices:write-attribute(name=wsdl-host,value=docker.loc)

Добавление источников данных (разные СУБД)

Datasource Connection URL
IBM DB2 jdbc:db2://SERVER_NAME:PORT/DATABASE_NAME
MariaDB jdbc:mariadb://SERVER_NAME:PORT/DATABASE_NAME
Microsoft SQL Server jdbc:sqlserver://SERVER_NAME:PORT;DatabaseName=DATABASE_NAME
MySQL jdbc:mysql://SERVER_NAME:PORT/DATABASE_NAME
Oracle jdbc:oracle:thin:@SERVER_NAME:PORT:ORACLE_SID
PostgreSQL jdbc:postgresql://SERVER_NAME:PORT/DATABASE_NAME
Sybase jdbc:sybase:Tds:SERVER_NAME:PORT/DATABASE_NAME

Удаление настроек по умолчанию

При конфигурировании Wildfly можно (при переводе системы в промышленную эксплуатацию — рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml необходимо убрать (либо закомментировать) следующие объекты:

                <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
                    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
                    <driver>h2</driver>
                    <security>
                        <user-name>sa</user-name>
                        <password>sa</password>
                    </security>
                </datasource>
                    <driver name="h2" module="com.h2database.h2">
                        <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
                    </driver>
             <default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
                    <location name="/" handler="welcome-content"/>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>

Добавление сертификатов корпоративных УЦ

java keytool – с его помощью установить корневой сертификат в keystore. Если есть промежуточные, то их тоже.

java keystore password по умолчанию – “changeit”.

Примеры инструкций:

  • https://docs.microsoft.com/ru-ru/java/azure/java-sdk-add-certificate-ca-store?view=azure-java-stable
  • https://www.ibm.com/support/knowledgecenter/en/SSFUEU_6.2.1/com.ibm.swg.ba.cognos.administrators_guide.6.2.1.doc/t_shi_import_the_root_certificate_for_java.html

Как минимум в CN сертификата должен быть адрес, по которому происходит обращение к серверу (DNS или IP). Если этого будет недостаточно, тогда добавить в SAN сертификата.

Включение и конфигурирование HTTPS

Добавление сертификата

Для добавления/обновления сертификата необходимо выполнить следующие действия:

  1. Составить цепочку сертификатов.
    Из файлов сертификатов в формате PEM (Base64) составить цепочку путём соединения в новом файле с расширением crt, например fullchain.crt. Для этого в новый файл с помощью текстового редактора нужно добавить сертификат корневого УЦ, промежуточных, и собственно сертификат сервера.
  2. Создать контейнер формата pkcs12:
    openssl pkcs12 -export -in fullchain.crt -inkey private_key.key -out keycontainer.p12
    

    при экспорте следует задать пароль <password> для приватного ключа.

  3. Создать JKS-контейнер из PKCS12:
    keytool -importkeystore -srckeystore keycontainer.p12 
            -srcstoretype PKCS12 
            -destkeystore <container-name>.jks 
            -deststoretype JKS
    

    при импорте указываем <password>, при экспорте указываем пароль к контейнеру.

  4. Скопировать <container-name>.jks например в /opt/wildfly/standalone/configuration/ (для Linux), либо в C:wildflystandaloneconfiguration (для Windows).
  5. Имя файла-контейнера (относительный путь от директории configuration) и пароли указать в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:wildflystandaloneconfigurationstandalone.xml (для Windows), для WildFly 25 и выше, :
                <tls>
                    <key-stores>
                        <key-store name="applicationKS">
                            <credential-reference clear-text="ПАРОЛЬ К КОНТЕЙНЕРУ"/>
                            <implementation type="JKS"/>
                            <file path="ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks" relative-to="jboss.server.config.dir"/>
                        </key-store>
                    </key-stores>
                    <key-managers>
                        <key-manager name="applicationKM" key-store="applicationKS" generate-self-signed-certificate-host="localhost">
                            <credential-reference clear-text="ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ"/>
                        </key-manager>
                    </key-managers>
                    <server-ssl-contexts>
                        <server-ssl-context name="applicationSSC" key-manager="applicationKM"/>
                    </server-ssl-contexts>
                </tls>
    

    До версии 25, в объекте keystore (если АЛИАС не был задан, по умолчанию устанавливается значение «1»):

                <security-realm name="ApplicationRealm">
                    <server-identities>
                        <ssl>
                            <keystore path="ИМЯ ФАЙЛА-КОНТЕЙНЕРА.jks" relative-to="jboss.server.config.dir" keystore-password="ПАРОЛЬ К КОНТЕЙНЕРУ" alias="АЛИАС" key-password="ПАРОЛЬ К ПРИВАТНОМУ КЛЮЧУ" generate-self-signed-certificate-host="localhost"/>
                        </ssl>
                    </server-identities>
    
  6. Перезапустить сервис WildFly.
  7. Проверить подключение:
    openssl s_client -connect <server-name>:8443
    

    Verify Result должен быть 0.

Отключение HTTP порта (8080)

В работе

Предупреждение! Приведённый ниже порядок действий применим для приложений, не публикующих WSDL-схему. Для приложений с WSDL потребуется дополнительная донастройка.

Для того, чтобы на сервере PCIS External отключить доступ к REST-интерфейсу по порту 8080 необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (для Linux), либо в C:wildflystandaloneconfigurationstandalone.xml (для Windows) (перед этим лучше сделать его резервную копию) в блоке <server name="default-server"> удалить строку

<http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>

В блоке <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}"> удалить строку:

<socket-binding name="http" port="${jboss.http.port:8080}"/>

Изменить параметр <http-connector name="http-remoting-connector" connector-ref="default" security-realm="ApplicationRealm"/> следующим образом (изменить значение connector-ref с default на https):

<http-connector name="http-remoting-connector" connector-ref="https" security-realm="ApplicationRealm"/>

Переключение публикации схемы на HTTPS

Для того, чтобы, располагающаяся в WSDL, ссылка на схему была также корректна, необходимо в <subsystem xmlns="urn:jboss:domain:webservices:2.0"> добавить (заменив значения wsdl-host и, при необходимости, wsdl-port и wsdl-secure-port на необходимые) следующее:

            <wsdl-host>yoursite.com</wsdl-host>
            <wsdl-port>8080</wsdl-port>
            <wsdl-secure-port>8443</wsdl-secure-port>
            <wsdl-uri-scheme>https</wsdl-uri-scheme>

Пример результата:

<subsystem xmlns="urn:jboss:domain:webservices:2.0">
            <wsdl-host>paycontrol.org</wsdl-host>
            <wsdl-port>8080</wsdl-port>
            <wsdl-secure-port>8443</wsdl-secure-port>
            <wsdl-uri-scheme>https</wsdl-uri-scheme>
            <endpoint-config name="Standard-Endpoint-Config"/>
            <endpoint-config name="Recording-Endpoint-Config">
                <pre-handler-chain name="recording-handlers" protocol-bindings="##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM">
                    <handler name="RecordingHandler" class="org.jboss.ws.common.invocation.RecordingServerHandler"/>
                </pre-handler-chain>
            </endpoint-config>
            <client-config name="Standard-Client-Config"/>
        </subsystem>

Указание определённых стандартов защиты и алгоритмов

Для выбора стандарта защиты HTTPS, только, например, TLS 1.2, нужно в объект https-listener объекта <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> добавить, enabled-protocols=»TLSv1.2″.

Для выбора определённых криптографических алгоритмов, необходимо их указать в объекте https-listener объекта <subsystem xmlns=»urn:jboss:domain:undertow:X.X»>. Например, для запрета режимов работы без использования алгоритмов Диффи-Хеллмана, нужно добавить enabled-cipher-suites=»ALL:!kRSA».

Пример:

<subsystem xmlns="urn:jboss:domain:undertow:1.2">
    <server name="default-server">
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/>
    </server>
</subsystem>

https://security.stackexchange.com/questions/145855/how-to-enforce-perfect-forward-secrecy-using-jvm-properties

https://www.openssl.org/docs/manmaster/man1/ciphers.html

Включение дополнительных заголовков

Для включения дополнительных HTTP заголовков необходимо в файл

  • Linux:
    /opt/wildfly/standalone/configuration/standalone.xml
  • Windows:
    C:wildflystandaloneconfigurationstandalone.xml
  1. добавить фильтры в раздел <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> добавив блок (при его отсутствии) <filters></filters> следующего содержания:
                <filters>
                    <response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/>
                    <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/>
                    <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/>
                    <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/>
                </filters>
    
  2. добавить ссылки на эти фильтры в раздел <subsystem xmlns=»urn:jboss:domain:undertow:X.X»> в <server name=»default-server»> в <host name=»default-host» alias=»localhost»> включив следующие строки:
                        <filter-ref name="transport-security"/>
                        <filter-ref name="x-frame-options"/>
                        <filter-ref name="x-content-type-options"/>
                        <filter-ref name="Content-Security-Policy"/>
    

Пример:

<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" enabled-cipher-suites="ALL:!kRSA" enabled-protocols="TLSv1.2"/>
        <host name="default-host" alias="localhost">
            <http-invoker security-realm="ApplicationRealm"/>
            <filter-ref name="transport-security"/>
            <filter-ref name="x-frame-options"/>
            <filter-ref name="x-content-type-options"/>
            <filter-ref name="Content-Security-Policy"/>
        </host>
    </server>
    <servlet-container name="default">
        <jsp-config/>
        <websockets/>
    </servlet-container>
    <filters>
        <response-header name="transport-security" header-name="Strict-Transport-Security" header-value="max-age=31536000"/>
        <response-header name="x-frame-options" header-name="X-Frame-Options" header-value="DENY"/>
        <response-header name="x-content-type-options" header-name="X-Content-Type-Options" header-value="nosniff"/>
        <response-header name="Content-Security-Policy" header-name="Content-Security-Policy" header-value="default-src 'self'"/>
    </filters>
</subsystem>

Изменение номера порта

В работе

Предупреждение! ОС Linux не позволяет сервисам работающим не от имени root использовать порты с номерами ниже 1024. Для использования портов ниже 1024 необходимо выполнять трансляцию, например с помощью netfilter (iptables/firewalld).

Для изменения номера порта необходимо в файле /opt/wildfly/standalone/configuration/standalone.xml (Linux) или в C:wildflystandaloneconfigurationstandalone.xml (Windows), в блоке

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">

в нужном (для http, либо https) параметре

<socket-binding name="http" port="${jboss.http.port:8080}"/>
<socket-binding name="https" port="${jboss.https.port:8443}"/>

изменить номер используемого порта.

После изменения номера порта, службу WildFly необходимо перезапустить.

При использовании «сервером» стандартных портов (80 для HTTP или 443 для HTTPS), при установке параметров настроек «клиента» для подключения к «серверу», номер порта в адресе дополнительно указывать не рекомендуется во избежании проблем, т.к. в этих случаях, согласно RFC2616 используется порт по умолчанию. При дополнительном указании в адресе порта по умолчанию бывали случаи возникновения проблем подключения.

Приведённые ниже примеры описаны для протокола HTTP. При использовании HTTPS, необходимо также скорректировать название используемого протокола в адресе подключения.

Изменение порта PCS

При изменении порта для подключения к PCS, необходимо:

  • установить новый порт для обращения к PC в настройках прикладной системы;
  • изменить номер порта в настройках PCIS External.

Для изменения номера порта для обращения к PCS, в настройках PCIS External в файле /opt/wildfly/bin/standalone.conf (Linux) или C:optwildflybinstandalone.conf.bat (Windows), в строке

JAVA_OPTS="$JAVA_OPTS -Dpcservice.endpoint=http://localhost:8080/ws/PayControlServiceV3?wsdl -Duser.language=ru -Dpaycontrol.locale=ru"

в параметре -Dpcservice.endpoint=http://<HOSTNAME>:<PORT>/ws/PayControlServiceV3?wsdl установить новое значение <PORT>.

Изменение порта PCIS Internal

Для изменения порта для подключения к PCIS Internal необходимо в БД PCS выполнить следующий запрос:

update pc_system set pc_is_internal_url='http://<HOSTNASME>:<PORT>/wsis/PayControlInteractionService?wsdl' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';

где

  • <HOSTNASME> — имя хоста PCIS Internal;
  • <PORT> новое значение порта;
  • XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX — UUID идентификатор прикладной системы.

Допускается выполнять запрос к БД PCS на обновление адреса PCIS Internal без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS Internal для всех прикладных систем.

После изменения номера порта, службу wildfly необходимо перезапустить.

Изменение порта PCIS External

В работе

Предупреждение! При изменении порта PCIS External мобильное приложение потеряет возможность подключения к серверу PayControl до тех пор, пока пользователю мобильного приложения не будет перевыпущен ключ с новым адресом подключения к серверу.

В работе

Предупреждение! Изменение порта, на котором сервер PCIS External ожидает подключения не всегда ведёт к изменению порта назначения, который используется мобильным приложением для доступа к серверу PayControl. Такая ситуация, например, может возникнуть, если перед сервером PCIS External со стороны сети Интернет установлено оборудование/ПО, выполняющее трансляцию сетевых портов.

При изменении порта PCIS External необходимо в БД PCS выполнить следующий запрос:

update pc_system set pc_is_external_url='http://<HOSTNASME>:<PORT>/PayControl-interaction-rest/' where systemid='XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX';

где

  • <HOSTNASME> — имя хоста PCIS External, используемое мобильными устройствами для доступа к серверу PayControl;
  • <PORT> новое значение порта;
  • XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX — UUID идентификатор прикладной системы.

Допускается выполнять запрос к БД PCS на обновление адреса PCIS External без указания systemid, в случае, если подключена только одна прикладная система, или необходимо обновить адрес PCIS External для всех прикладных систем.

После изменения номера порта, службу wildfly необходимо перезапустить.

Валидация подключения

PostgreSQL

    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"></valid-connection-checker>
      <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"></exception-sorter>
    </validation>

Oracle

    <validation>
        <check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
        <validate-on-match>false</validate-on-match>
        <background-validation>true</background-validation>
        <background-validation-millis>10000</background-validation-millis>
    </validation>

MS SQL

    <validation>
      <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
    </validation>

Журналирование

Доступ к данным журнала

Журнал работы сервера PayControl записываются общий лог функционирования Wildfly.

Файлы журналов за текущий день доступны по следующему пути:

  • Linux:
    /opt/wildfly/standalone/log/server.log
  • Windows:
    C:wildflystandalonelogserver.log

Для просмотра журнала за другие дни, нужно добавить к имени файла требуемую дату в формате server.log.YYYY-MM-DD

Включение журналирования SOAP-вызовов

Для включения расширенного логирования необходимо:

  1. Остановить службу wildfly.
  2. Добавить после блока <extensions> … </extensions> в файл
    • Linux:
      /opt/wildfly/standalone/configuration/standalone.xml
    • Windows:
      C:wildflystandaloneconfigurationstandalone.xml
    следующий блок:

        <system-properties>
            <property name="org.apache.cxf.logging.enabled" value="pretty"/>
        </system-properties>
    
  3. Запустить службу wildfly.

Направление логов Wildfly в Kafka

Исходник https://developer.jboss.org/docs/DOC-56423. Основное отличие — добавление <module name="com.fasterxml.jackson.core.jackson-databind"/> в зависимости модуля org.apache.kafka.clients.

Модули

Файлы модулей можно загрузить с https://mvnrepository.com/

org.apache.kafka.clients

Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/clients/main/module.xml с содержанием

<?xml version="1.0" encoding="UTF-8"?>
<module name="org.apache.kafka.clients" xmlns="urn:jboss:module:1.8">
    <resources>
        <resource-root path="kafka-clients-2.6.0.jar"/>
        <resource-root path="snappy-java-1.1.8.2.jar"/>
        <resource-root path="lz4-java-1.7.1.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="org.slf4j"/>
        <module name="com.fasterxml.jackson.core.jackson-databind"/>
    </dependencies>
</module>

и добавить в директорию указанные в блоке resources файлы.

org.apache.kafka.log4jappender

Создать файл /opt/wildfly/modules/system/layers/base/org/apache/kafka/log4jappender/main/module.xml с содержанием

<?xml version="1.0" encoding="UTF-8"?>
<module name="org.apache.kafka.log4jappender" xmlns="urn:jboss:module:1.8">
    <resources>
        <resource-root path="kafka-log4j-appender-2.6.0.jar"/>
        <resource-root path="slf4j-log4j12-1.7.30.jar"/>
    </resources>
    <dependencies>
        <module name="org.slf4j"/>
        <module name="org.apache.kafka.clients" />
        <module name="org.jboss.log4j.logmanager" />
    </dependencies>
</module>

и добавить в директорию указанные в блоке resources файлы.

org.apache.log4j

Добавить модуль log4jappender в качестве зависимости в существующий org.apache.log4j модуль:

<module name="org.apache.log4j" xmlns="urn:jboss:module:1.6">

    ...

    <dependencies>

        ...

        <module name="org.apache.kafka.log4jappender" export="true"/>

    </dependencies>

</module>

org.jboss.as.standalone

Указать в имеющемся модуле org.jboss.as.standalone в качестве зависимости модуль org.apache.kafka.clients.

<module name="org.jboss.as.standalone" xmlns="urn:jboss:module:1.6">

    ...

    <dependencies>

        ...

        <module name="org.apache.kafka.clients" />

    </dependencies>

</module>

Хэндлеры

Необходимо добавить перечисленные ниже хэндлеры в файл standalone.xml в блок <subsystem xmlns="urn:jboss:domain:logging:8.0">

kafka

            <custom-handler name="kafka" class="org.apache.kafka.log4jappender.KafkaLog4jAppender" module="org.apache.log4j">
                <level name="INFO"/>
                <formatter>
                    <named-formatter name="PATTERN"/>
                </formatter>
                <properties>
                    <property name="brokerList" value="localhost:9092"/>
                    <property name="topic" value="out-topic"/>
                </properties>
            </custom-handler>

async-kafka-wrapper

            <async-handler name="async-kafka-wrapper">
                <level name="ALL"/> 
                <queue-length value="1024"/> 
                <overflow-action value="block"/> 
                <subhandlers> 
                    <handler name="kafka"/> 
                </subhandlers> 
            </async-handler>

Включение хэндлера

В блок <handlers> добавить <handler name="async-kafka-wrapper"/>

Проблемы и способы их устранения

Очень медленный старт через standalone.sh (каждый этап скрипта запуска — с большими задержками). Система отправляет сигнал на остановку сервиса

Вероятная проблема — неверные настройки DNS сервера.
Решение:Необходимо скорректировать настройки DNS.
Проблема обнаружилась 2018-07-27 при развёртывании у заказчика. A.bursakov (обсуждение) 19:56, 1 августа 2018 (MSK)

Не происходит «биндинг» IP-адреса адаптера

Вероятная проблема — отсутствие PTR-записи на DNS-сервере, или неправильная работа службы DNS.
Решение: Добавить в файл opt/wildfly/bin/standalone.conf (Linux) или C:optwildflybinstandalone.conf.bat (Windows), в переменную JAVA_OPTS параметр -Djboss.bind.address=0.0.0.0
Проблема проявилась на тестовом Windows-сервере A.bursakov (обсуждение) 19:56, 1 августа 2018 (MSK)

Частое появление WARNING в логе

Предупреждения в логе вида:

WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter.
Caused by: com.ctc.wstx.exc.WstxIOException: UT010029: Stream is closed
Caused by: java.io.IOException: UT010029: Stream is closed
WARNING [org.apache.cxf.phase.PhaseInterceptorChain] (default task-1) Interceptor for {http://ws.safetech.ru/PayControlV3/}PayControlServiceV3 has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Could not send Message.
Caused by: java.io.IOException: Broken pipe

Могут быть вызваны системой мониторинга, которая для проверки того, что сервер доступен, устанавливает соединение и обрывает его получив лишь только header.

Для отключения предупреждений о непредвиденном закрытии соединения необходимо в файл /opt/wildfly/standalone/configuration/standalone.xml в блок

<profile>
    <subsystem xmlns="urn:jboss:domain:logging:X.X">
       ... 
    </subsystem>
</profile>

добавить:

<!-- to prevent warnings on unsuspicious connection close -->
<logger category="org.apache.cxf.phase.PhaseInterceptorChain">
      <level name="ERROR"/>
</logger>

INFO: Disabling contextual LOB creation as createClob() method threw error

Иногда смущает появление в журнале события, из-за присутствия в его составе слова «error»:

   INFO  [org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl] (ServerService Thread Pool -- 64) HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException 

Для отключения этого сообщения необходимо установить hibernate.temp.use_jdbc_metadata_defaults=false
в файл persistence.xml, располагающийся внутри модуля сервера следующим образом:

       <properties>
           ...
           <property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
           ...
       </properties>

Wildfly не стартует как служба и нет логов

Возможные проблемы:

  • Некорректные права на директории/файлы в /opt/wildfly.
    chown -RHv wildfly:wildfly /opt/wildfly
    
  • Проблемы с определением необходимой Java. Для восстановления необходимо выполнить
    sudo update-alternatives --config java
    

Like this post? Please share to your friends:
  • Как изменить порт wan на роутере
  • Как изменить потенциал игрока фифа 19
  • Как изменить порт wake on lan
  • Как изменить посуточную плату на ежемесячную
  • Как изменить постоянный ток на переменный ток