Standalone.xml
Um sicher zustellen, dass der WildFly Server korrekt funktioniert, sollten noch Änderungen an der Konfigurationsdatei
/opt/wildfly/standalone/configuration/standalone.xml
vorgenommen werden.
HTTP-Listener
Der default http-listener muss so konfiguriert werden, dass bei Proxy-Aufrufen die Adressen weitergeleitet werden.
Zusätzlich kann die max-post-size und die max-parameters nach Ihren Bedürfnissen eingestellt werden.
Folgendes Beispiel bildet unsere aktuellen Empfehlungen ab:
<http-listener name="default" proxy-address-forwarding="true" socket-binding="http" redirect-socket="https" max-post-size="157286400" max-parameters="1500" ></http-listener>
Deployment Timeout
Da der Start des voll bestückten WildFly Servers länger als eine Minute dauern kann, muss ein entsprechender Timeout im Element <deployment-scanner> eingefügt werden, z. B.
so:
<deployment-scanner
path="deployments"
relative-to="jboss.server.base.dir"
scan-interval="5000"
deployment-timeout="6000"
runtime-failure-causes-rollback="${jboss.deployment.scanner.rollback.on.failure:false}"
></deployment-scanner>
und die <system-properties> entsprechend erweitern:
<system-properties>
<property name="jboss.as.management.blocking.timeout" value="6000"></property>
</system-properties>
Security
Die sichere Ausführung von Regeln benötigt eine Erweiterung im Subsystem security-manager(Offizielle Dokumentation).
Das Element deployment-permissions muss um ein minimum-set erweitert werden, sodass der gesamte Subsystem-Block folgendermaßen aussehen muss:
<subsystem xmlns="urn:jboss:domain:security-manager:1.0">
<deployment-permissions>
<minimum-set>
<permission class="java.security.AllPermission"></permission>
</minimum-set>
<maximum-set>
<permission class="java.security.AllPermission"></permission>
</maximum-set>
</deployment-permissions>
</subsystem>
Vermeidung von Information-Disclosure
Zur unnötigen Ausgabe des Servernamens bzw. der Versionsnummer müssen unterhalb des Subsystem undertow:3.1 entfernt werden. Die zu löschenden Zeilen sind:
<filter-ref name="server-header"></filter-ref> <filter-ref name="x-powered-by-header"></filter-ref>
sowie der Abschnitt
<filters> <response-header name="server-header" header-name="Server" header-value="WildFly/10"></response-header> <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"></response-header> </filters>
Generelles setzen von security-Flags (secure und http-only)
Zur generellen Setzung der security-Flags secure und http-only kann folgender Eintrag innerhalb des Subsystems undertow:3.1 innerhalb des Elements servlet-container ergänzt werden:
<session-cookie http-only="true" secure="true"></session-cookie>
Servertuning
Es ist möglich WildFly - falls physisch vorhanden - mehr Speicher zuzuteilen. Hierzu kann man die Datei
/opt/wildfly/bin/standalone.conf
öffnen und die Variable JAVA_OPTS entsprechend den Speicheranforderungen ändern.
Standardmäßig sollte hier
if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-server -Xms4g -Xmx10g -XX:MaxMetaspaceSize=4g -Djava.net.preferIPv4Stack=true" ... fi
ausreichen.
Allerdings kann es je nach Anzahl der Kunden, die auf dem Server gehostet werden, nötig werden den initialen Heapspace (Parameter -Xms), den maximalen Heapspace (Parameter -Xmx) , den Metadaten-Speicher (-XX:MaxMetaspaceSize) und/oder die maximale Stack-Größe (-Xss) zu erhöhen bzw. zu verringern.
Als Vergleichswert kann die Konfiguration unseres Produktivsystems mit
-Xms4g -Xmx10g -XX:MaxMetaspaceSize=4g
dienen.
Zusätzlich kann bei der Verwendung von open9j noch das Teilen von Klassen verwendet werden.
Hierzu ergänzen Sie die obere Zeile um die folgenden Einträge:
-Xshareclasses -Xscmx256M
Zusätzlich kann die Speicherverwaltung mit folgenden Parametern optimiert werden (angepasst für unsere Produktivwerte):
#Optimierung Speicherverteilung JAVA_OPTS="$JAVA_OPTS -XX:ReservedCodeCacheSize=256m -XX:NewRatio=6" #Optimierung GarbageCollection JAVA_OPTS="$JAVA_OPTS -XX:+UseConcMarkSweepGC -XX:-UseCodeCacheFlushing"
Diese sind am Ende der Datei zu ergänzen.