JBoss hinter einem Reverse-Proxy
Die in diesem Abschnitt beschriebenen Konfigurationen sind nicht updatesicher und werden z.B. vom Installer nicht ausgewertet und auf (zukünftigen) Versionen erneut gesetzt.
Allgemeine Informationen
WebSockets
Das CRM nutzt an den folgenden Stellen WebSockets:
https://<server>:<port>/webclient/primepush/tasklist/*
https://<server>:<port>/script/languageserver/groovy
Ggf. müssen diese im Reverse-Proxy separat hinterlegt werden.
TLS-Termination
Der Applikationsserver (JBoss) kann nicht ohne gültige https-Konfiguration (→ Zertifikate, Key- und Truststore) betrieben werden. Natürlich kann das verwendete Zertifikat zwischen JBoss und Reverse-Proxy ein anderes sein als das für die externe Kommunikation des Reverse-Proxys.
Path-Prefix
Der Betrieb des CRMs hinter einem Path-Prefix wird nicht unterstützt.
Konfiguration für mehrere Domains
Die globalen Variablen
C0CursorDefaultServerBaseURL
,C0CursorDefaultServerPort, C0CursorDefaultServerProtocol
, dürfen nicht gepflegt sein.Der Reverse-Proxy muss die
X-Forwarded-*
Header pflegen, d.h.X-Forwarded-Host
,X-Forwarded-Server
,X-Forwarded-For.
Der Applikationsserver muss diese auswerten, d.h. folgende JBoss-Konfigurationen sind zu setzen:
jboss-cli --connect --controller="https-remoting://localhost:<jbossManagementPort>" --command=/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name="proxy-address-forwarding",value=true)
jboss-cli --connect --controller="https-remoting://localhost:<jbossManagementPort>" --command=/subsystem=undertow/server=default-server/https-listener=default-https:write-attribute(name="proxy-address-forwarding",value=true)
Diese Konfiguration kann bei Bedarf auch deaktiviert werden:
jboss-cli --connect --controller="https-remoting://localhost:<jbossManagementPort>" --command=/subsystem=undertow/server=default-server/http-listener=default:undefine-attribute(name="proxy-address-forwarding")
jboss-cli --connect --controller="https-remoting://localhost:<jbossManagementPort>" --command=/subsystem=undertow/server=default-server/https-listener=default-https:undefine-attribute(name="proxy-address-forwarding")
Der Port <jbossManagementPort>
errechnet sich aus Port-Range * 1000 + 9993
.
Diese Einstellungen sollten nur und ausschließlich hinter vertrauenswürdigen Proxys gesetzt werden. Andernfalls können Benutzer IP-Spoofing betreiben. Das umfasst auch den direkten Zugriff auf den Applikationsserver ohne Reverse-Proxy.
nginx als Reverse-Proxy (mehrere Domains)
Der nachfolgende Konfigurationsblock kann als Basis für die Konfiguration von nginx als Reverse-Proxy dienen. Die Platzhalter <parameter>
sind zu ersetzen.
server {
listen 443 ssl;
server_name <public_server>;
# SSL configuration matching best practices according to https://ssl-config.mozilla.org/
<insert_ssl_config_here>
# Root
location / {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://<crm_server>:<crm_port>;
}
# WebSockets
location /webclient/primepush/tasklist/ {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://<crm_server>:<crm_port>/webclient/primepush/tasklist/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /script/languageserver/groovy {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://<crm_server>:<crm_port>/script/languageserver/groovy;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}