So richtest du Varnish SSL Termination mit Nginx Webserver auf Rocky Linux 8 ein

Die Varnish Cache-Software unterstützt SSL/TLS standardmäßig nicht. Du brauchst zusätzliche Software, um SSL/TLS-Unterstützung für Varnish zu aktivieren.

SSL-Termination ist eine Methode, um SSL/TLS auf Varnish zu aktivieren. Du kannst Hitch, Nginx oder Apache verwenden, um SSL-Termination für den Varnish HTTP-Beschleuniger zu aktivieren.

Die SSL-Terminierungssoftware wird auf dem HTTPS-Port„443“ ausgeführt und bearbeitet alle HTTPS-Anfragen von Clients. Danach werden alle Anfragen an die Varnish-Cache-Software weitergeleitet, die sie dann an den ursprünglichen Backend-Server weiterleitet.

Voraussetzungen

In diesem Artikel erfährst du, wie du Varnish SSL Termination mit dem Webserver Nginx einrichtest.

Bevor du beginnst, solltest du sicherstellen, dass du die folgenden Voraussetzungen erfüllst:

  • Ein Linux-Server, auf dem Varnish installiert ist.
  • Root-Rechte
  • Ein Domain-Name

Für dieses Beispiel verwenden wir den Rocky Linux Server, auf dem Varnish installiert ist. Und wir werden den Domainnamen„example.io“ verwenden.

Jetzt können wir loslegen.

Nginx Webserver installieren

Wenn du Nginx als Varnish-Backend verwendest, überspringst du diesen ersten Schritt.

In diesem ersten Schritt installierst du Nginx auf dem Linux-System.

1. Bei Debian/Ubuntu-basierten Distributionen führst du den folgenden apt-Befehl aus, um den Nginx-Webserver zu installieren.

sudo apt install nginx -y

2. Für das Betriebssystem CentOS/RockyLinux/AlmaLinux führst du den DNF-Befehl aus, um den Nginx-Webserver zu installieren.

sudo dnf install nginx -y

3. Nachdem die Installation von Nginx abgeschlossen ist, starte und aktiviere den Nginx-Webserver mit dem folgenden Befehl.

sudo systemctl enable --now nginx

Wenn du eine Fehlermeldung erhältst, lass sie stehen. Du wirst Nginx im nächsten Schritt konfigurieren.

SSL mit Certbot generieren

In diesem Schritt installierst du das Tool cerbot und generierst SSL-Zertifikate von Letsencrypt für die Domain„example.io„.

1. Füge zunächst die HTTP- und HTTPS-Ports zur Systemfirewall hinzu.

Bei Debian/Ubuntu-Systemen führst du den unten stehenden ufw-Befehl aus, um HTTP- und HTTPS-Ports zu öffnen.

sudo ufw allow http
sudo ufw allow https
sudo ufw reload

Für CentOS/RockyLinux/AlmaLinux-Systeme führst du den Befehl firewall-cmd aus.

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

2. Als Nächstes installierst du das Tool certbot mit dem folgenden Befehl.

Installiere das certbot-Tool auf Debian/Ubuntu-Systemen mit dem unten stehenden apt-Befehl.

sudo apt install certbot -y

Installiere das certbot-Tool auf CentOS/RockyLinux/AlmaLinux-Systemen mit dem unten stehenden DNF-Befehl.

sudo dnf install certbot -y

3. Bevor du das SSL Letsencrypt generierst, beende den Varnish-Dienst, der auf dem Standard-HTTP-Port läuft.

sudo systemctl stop varnish
sudo systemctl stop nginx

4. Führe nun den unten stehenden certbot-Befehl aus, um SSL Letsencrypt zu erzeugen. Achte darauf, dass du den Domainnamen und die E-Mail-Adresse änderst.

sudo certbot certonly --agree-tos --email [email protected] --standalone --preferred-challenges http -d example.io

Nachdem der certbot-Prozess abgeschlossen ist, ist dein Zertifikat im Verzeichnis„/etc/letsencrypt/live/DOMAIN.COM/“ verfügbar.

Das Zertifikat„fullchain.pem“ ist dein öffentlicher SSL-Schlüssel und die„privkey.pem“ ist dein privater SSL-Schlüssel.

Standard Nginx Port einrichten

Überspringe diesen Schritt, wenn du den Nginx Webserver als Backend für deinen Varnish HTTP-Beschleuniger verwendest.

Wenn du einen anderen Backend-Webserver verwendest, musst du den Standard-Port für Nginx konfigurieren.

1. Bearbeite die Standardkonfiguration von Nginx mit dem nano-Editor.

sudo nano /etc/nginx/nginx.conf

Ändere im Standardabschnitt„server { ...}“ änderst du die Option„listen“ in Port„8081“ wie unten beschrieben.

....

    server {
        listen       8081 default_server;
        listen       [::]:8081 default_server;

        ...trim...
    }

....

Speichere die Konfiguration und beende sie.

2. Starte nun den Nginx-Dienst neu, um die neue Konfiguration zu übernehmen.

sudo systemctl restart nginx

Der Standard-Nginx-Dienst läuft jetzt auf Port8081.

SSL-Terminierung mit dem Nginx-Webserver einrichten

Um die SSL-Terminierung mit Nginx einzurichten, musst du eine neue Konfiguration von virtuellen Hosts/Serverblöcken erstellen, die auf dem HTTPS-Port „443“ laufen wird.

Dieser virtuelle Host bearbeitet alle HTTPS-Anfragen von Clients und leitet alle Anfragen an den Varnish HTTP-Beschleuniger weiter.

1. Erstelle eine neue Nginx-Server-Blockkonfiguration mit dem folgenden Befehl.

Wenn du ein Debian/Ubuntu-basiertes System verwendest, erstelle eine neue Konfiguration„/etc/nginx/sites-available/example.io„.

sudo nano /etc/nginx/sites-available/example.io

Für das CentOS/RockyLinux/AlmaLinux-System erstellst du eine neue Konfiguration„/etc/nginx/conf.d/example.conf“.

sudo nano /etc/nginx/conf.d/example.conf

Kopiere die folgende Konfiguration und füge sie ein. Achte darauf, dass du den Domainnamen und den Pfad der SSL-Zertifikate änderst.

server {

    listen 443 ssl http2;
    server_name example.io;
    ssl_certificate           /etc/letsencrypt/live/exmaple.io/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/example.io/privkey.pem;

    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log            /var/log/nginx/example.io_access.log;
    error_log             /var/log/nginx/example.io_error.log;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $host;
        }

  }

Speichere die Konfiguration und beende sie.

2. Als Nächstes aktivierst du für das Debian/Ubuntu-System die Konfiguration des Serverblocks mit dem folgenden Befehl.

sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/

3. Führe den folgenden Befehl aus, um die Nginx-Konfiguration zu überprüfen, und starte dann den Nginx-Dienst neu, um die neue Konfiguration anzuwenden.

sudo nginx -t
sudo systemctl restart nginx

4. Überprüfe nun den Nginx-Dienst und den HTTPS-Port„443“ mit dem folgenden Befehl.

Überprüfe den Status des Nginx-Dienstes mit dem folgenden systemctl-Befehl.

sudo systemctl status nginx

Stelle sicher, dass der Nginx-Dienst aktiv ist und läuft.

Nginx SSL-Terminierung für Varnish Web Cache einrichten

Überprüfe den HTTPS-Port„443“ auf deinem System mit dem folgenden ss-Befehl.

ss -antpl | grep 443

Vergewissere dich, dass der HTTPS-Port„443“ den Status„LISTEN“ hat.

LISTEN 0      128          0.0.0.0:443        0.0.0.0:*    users:(("nginx",pid=4787,fd=8),("nginx",pid=4786,fd=8),("nginx",pid=4785,fd=8))

Damit hast du die Grundkonfiguration der SSL-Terminierung mit dem Nginx-Webserver abgeschlossen.

Automatisches HTTP zu HTTPS mit Varnish

In diesem Schritt richtest du Varnish so ein, dass es automatisch das HTTP- auf das HTTPS-Protokoll umleitet. Dazu erstellst du eine neue Varnish-Regel in der Konfiguration„default.vcl“.

1. Bearbeite die Varnish-Konfiguration„/etc/varnish/default.vcl“ mit dem Editor nano.

nano /etc/varnish/default.vcl

Kopiere die folgende Konfiguration und füge sie in die Option„sub vcl_recv { ...}‚. Achte darauf, dass du den Domainnamen mit deiner Domain änderst.

sub vcl_recv {

…trim…

if (client.ip != „127.0.0.1“ && req.http.host ~ „example.io“) {
set req.http.x-redir = „https://example.io“ + req.url;
return(synth(850, „“));
}

…trim…
{

Als Nächstes fügst du die folgende Konfiguration am Ende der Zeile ein. Damit wird die Umleitungsmethode auf HTTP „301“ festgelegt.

sub vcl_synth {
    if (resp.status == 850) {
       set resp.http.Location = req.http.x-redir;
       set resp.status = 301;
       return (deliver);
    }
}

Speichere die Konfiguration von varnish und beende sie.

2. Starte als Nächstes den Varnish-Dienst mit dem folgenden Befehl neu, um die neue Konfiguration anzuwenden.

sudo systemctl restart varnish

Damit hast du die automatische HTTP- und HTTPS-Umleitung mithilfe der Varnish-Regel abgeschlossen.

Überprüfen der Varnish-SSL-Terminierung

Um die SSL-Terminierung von Varnish zu testen, kannst du den Webbrowser oder den Befehl curl verwenden.

1. Öffne deinen Webbrowser und gib den Namen deiner Domain in die Adressleiste ein. Für dieses Beispiel verwenden wir den Firefox-Webbrowser.

http://example.io

Du wirst automatisch auf das HTTPS-Protokoll umgeleitet.

Klicke mit der rechten Maustaste auf die Webseite und wähle das Menü„Untersuchen„.

Wechsle zur Registerkarte„Netzwerk“ und klicke auf die Schaltfläche„Neu laden„.

Klicke auf die Root-URL-Anfrage und du wirst eine ähnliche Ausgabe wie unten sehen.

Überprüfe varnish SSL/TLS

Die Anfrage an http://example.io wird automatisch auf das HTTPS-Protokoll https://example.io mit dem Statuscode„301“ umgeleitet.

Der Varnish-Server bearbeitet alle Client-Anfragen.

2. Um die SSL-Terminierung von Varnish mit curl zu überprüfen, verwende den folgenden Befehl.

curl -I http://example.io

Du wirst einen detaillierten HTTP-Header wie unten sehen.

Überprüfe varnish SSL TLS

Die Anfrage wird auf das HTTPS-Protokoll ‚https://example.io‘ mit dem HTTP-Statuscode‚301‚ umgeleitet. Der varnish-Server bearbeitet alle Anfragen von Clients.

Fazit

Herzlichen Glückwunsch! Du hast die Konfiguration von Varnish SSL Termination mit dem Nginx Webserver gelernt.

Außerdem hast du den grundlegenden Befehl certbot für die Erzeugung des kostenlosen SSL Letsencrypt und die grundlegende Varnish-Regel für die automatische Umleitung von HTTP zu HTTPS kennengelernt.

Das könnte dich auch interessieren …