Nginx-Frühjahrsputz

Wenn man Nginx als Reverse-Proxy einsetzt, schadet es nicht hin und wieder die Konfiguration zu prüfen und ggfs. zu aktualisieren. Gerade der Reverse-Proxy ist ein Kandidat, der eher gerne übersehen wird, weil er i.d.R. unauffällig und transparent seinen Dienst verrichtet. Während Updates aus dem Softwarerepository regelmäßig installiert werden, muss man die Konfiguration selbst prüfen und ggfs. aktualisieren.
Bei einem von mir geprüften Test-Server, der eher selten genutzt wurde, habe ich die folgenden Punkte in der Konfiguration ergänzt. Die Auflistung erhebt natürlich keinen Anspruch auf Vollständigkeit - wie lange ist es her, dass Sie Ihren Reverse-Proxy überprüft haben?

  1. Prüfen, ob http 2 verwendet wird und wenn nicht http2 ergänzen:

    1
    listen 443 ssl http2;

    Über die Entwicklertools im Browser kann geprüft werden, ob http2 tatsächlich verwendet wird:

    DevTools

  2. Hinsichtlich der Sicherheit empfiehlt es sich, seine Website regelmäßig z.B. mit dem SSL Server Test der SSL-Labs zu prüfen. Nach Eingabe der zu prüfenden Domain erhält man hier nach einer kurzen Wartezeit ein Rating inkl. möglicher Optimierungspunkte.

    Wer anstatt eines Ratings einen Fehler erhält bzgl. eines nicht gültigen max-age Wertes, der hat vermutlich HSTS nicht konfiguriert. Eine einfache HSTS Konfiguration kann z.B. so aussehen:

    1
    2
    # Security headers
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

    Weitere Informationen zur HSTS finden sich u.a. in Mozillas MDN web docs

  3. Als Wert für ssl_protocols verwende ich TLSv1.2 mit den im Folgenden aufgeführten Ciphers.
    Vor Poodle und Heartbleed ist man damit sicher, ebenfalls wird weitestgehend auf schwache Ciphers verzichtet. SSL-Labs vergibt hierfür ein A-Rating:

    1
    2
    ssl_protocols TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384';
  4. Um die TLS-Performance von Nginx zu verbessern, kann ein SSL-Session-Cache verwendet werden. Diesen aktiviert man in der Nginx-konfiguration wie folgt:

    1
    2
    3
    #SSL-Sessions Cache verwenden
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1h; # Sessions können 1 Stunde lang wiederverwendet werden
  5. Zur Reduktion der TTFB (Time to first byte) kann die Buffergröße reduziert werden. Der default beträgt 16k.

    1
    ssl_buffer_size 4k;