Für meine Dokumentationen verwende ich aktuell das System Confluence von Atlassian. Damit die Zugriffe auf das System mit SSL abgesichert sind, verwende ich den Webserver nginx als Reverse Proxy mit aktiver SSL Verschlüsselung. Die genaue Konfiguration beleuchte ich in diesem Beitrag.

In der Standardinstallation ist Confluence auf einem Server über den Port 8090 mittels HTTP erreichbar. Da ich bereits den nginx-Webserver für andere Webseiten im Einsatz habe, verwende ich diesen als Reverse Proxy mit SSL-Funktionalität.

Die nginx-Konfiguration sieht in meinem Setup wie folgt aus. Die Datei für den Diffie-Hellman Schlüsselaustausch wird mittels Befehl (letzte Zeile) generiert, die markierten Zeilen müssen an die entsprechende Infrastruktur angepasst werden.

root@myserver:~# cat /etc/nginx/sites-enabled/confluent
server {
        listen 443 ssl http2 default;
        listen [::]:443 ssl http2 default;
 
        server_name myserver.name;
 
        ssl_certificate /etc/ssl/certs/mycert.crt;
        ssl_certificate_key /etc/ssl/private/mycert.key;
 
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers on;
        ssl_session_cache shared:SSL:10m;
 
        ssl_dhparam /etc/nginx/dh.pem;
 
        location / {
                client_max_body_size 100m;
 
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Server $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
                proxy_pass http://localhost:8090/;
        }
 
}
root@myserver:~# openssl dhparam -out /etc/nginx/dh.pem 4096

Zusätzlich wird der XML-Knoten „Connector“ in der Konfiguration des Tomcat-Webservers der Confluence Installation um die Parameter proxyName, proxyPort und scheme erweitert.

root@myserver:~# cat /opt/atlassian/confluence/conf/server.xml
<Server port="8000" shutdown="SHUTDOWN" debug="0">
    <Service name="Tomcat-Standalone">
        <Connector port="8090" connectionTimeout="20000" redirectPort="8443"
                maxThreads="48" minSpareThreads="10"
                enableLookups="false" acceptCount="10" debug="0" URIEncoding="UTF-8"
                protocol="org.apache.coyote.http11.Http11NioProtocol"
                proxyName="myserver.name" proxyPort="443" scheme="https" />
        <Engine name="Standalone" defaultHost="localhost" debug="0">
            <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="false" startStopThreads="4">
                <Context path="" docBase="../confluence" debug="0" reloadable="false" useHttpOnly="true">
                    <!-- Logger is deprecated in Tomcat 5.5. Logging configuration for Confluence is specified in confluence/WEB-INF/classes/log4j.properties -->
                    <Manager pathname="" />
                    <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60" />
                </Context>
                <Context path="${confluence.context.path}/synchrony-proxy" docBase="../synchrony-proxy" debug="0" reloadable="false" useHttpOnly="true">
                    <Valve className="org.apache.catalina.valves.StuckThreadDetectionValve" threshold="60" />
                </Context>
            </Host>
        </Engine>
    </Service>
</Server>

Nach einem Neustart der Dienste ist Confluence über HTTPS erreichbar.

root@myserver:~# service nginx restart
root@myserver:~# service confluence restart