Die Varnish-Cache-Software unterstützt standardmäßig kein SSL/TLS. Sie benötigen zusätzliche Software, um die SSL/TLS-Unterstützung auf Varnish zu aktivieren.
SSL-Beendigung ist eine Methode, um SSL/TLS auf Varnish zu aktivieren. Sie können Hitch, Nginx oder Apache verwenden um die SSL-Terminierung für den Varnish-HTTP-Beschleuniger zu aktivieren.
Die SSL-Beendigungssoftware wird auf HTTPS ausgeführt Port '443 ' und behandelt alle HTTPS-Anfragen von Clients. Danach werden alle Anfragen an die Lack-Cache-Software und dann an den Ursprungs-Backend-Server weitergeleitet.
Voraussetzungen
In diesem Artikel erfahren Sie, wie Sie die Varnish-SSL-Terminierung mit dem Nginx-Webserver einrichten.
Bevor Sie beginnen, vergewissern Sie sich, dass die folgenden Anforderungen erfüllt sind:
- Ein Linux-Server, auf dem Varnish installiert ist.
- Root-Rechte
- Ein Domainname
Für dieses Beispiel verwenden wir den Rocky Linux-Server, auf dem Varnish installiert ist. Und wir werden den Domainnamen „example.io“ verwenden '.
Fangen wir jetzt an.
Nginx-Webserver installieren
Wenn Sie Nginx als Varnish-Backend verwenden, überspringen Sie diesen ersten Schritt.
In diesem ersten Schritt installieren Sie Nginx auf dem Linux-System.
1. Führen Sie für eine Debian/Ubuntu-basierte Distribution den folgenden apt-Befehl aus, um den Nginx-Webserver zu installieren.
sudo apt install nginx -y
2. Führen Sie für das Betriebssystem CentOS/RockyLinux/AlmaLinux den folgenden DNF-Befehl aus, um den Nginx-Webserver zu installieren.
sudo dnf install nginx -y
3. Nachdem die Nginx-Installation abgeschlossen ist, starten und aktivieren Sie den Nginx-Webserver mit dem folgenden Befehl.
sudo systemctl enable --now nginx
Wenn Sie einen Fehler haben, lassen Sie ihn. Im nächsten Schritt konfigurieren Sie Nginx.
SSL mit Certbot generieren
In diesem Schritt installieren Sie das Cerbot-Tool und generieren SSL-Zertifikate von Letsencrypt für die Domain „example.io '.
1. Fügen Sie zuerst die HTTP- und HTTPS-Ports zur Systemfirewall hinzu.
Führen Sie für Debian/Ubuntu-Systeme den folgenden ufw-Befehl aus, um HTTP- und HTTPS-Ports zu öffnen.
sudo ufw allow http
sudo ufw allow https
sudo ufw reload
Führen Sie für CentOS/RockyLinux/AlmaLinux-Systeme den folgenden Befehl firewall-cmd aus.
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload
2. Installieren Sie als Nächstes das certbot-Tool mit dem folgenden Befehl.
Installieren Sie das certbot-Tool auf Debian/Ubuntu-Systemen mit dem folgenden apt-Befehl.
sudo apt install certbot -y
Installieren Sie das certbot-Tool auf den CentOS/RockyLinux/AlmaLinux-Systemen mit dem folgenden DNF-Befehl.
sudo dnf install certbot -y
3. Bevor Sie SSL Letsencrypt generieren, stoppen Sie den Varnish-Dienst, der auf dem Standard-HTTP-Port ausgeführt wird.
sudo systemctl stop varnish
sudo systemctl stop nginx
4. Führen Sie nun den folgenden certbot-Befehl aus, um SSL Letsencrypt zu generieren. Und vergessen Sie nicht, den Domainnamen und die E-Mail-Adresse zu ändern.
sudo certbot certonly --agree-tos --email [email protected] --standalone --preferred-challenges http -d example.io
Nach Abschluss des Certbot-Prozesses ist Ihr Zertifikat im Verzeichnis „/etc/letsencrypt/live/DOMAIN.COM/ verfügbar '.
Das Zertifikat 'fullchain.pem ' ist Ihr öffentlicher SSL-Schlüssel und die 'privkey.pem ' ist Ihr privater SSL-Schlüssel.
Standard-Nginx-Port einrichten
Überspringen Sie diesen Schritt, wenn Sie den Nginx-Webserver als Backend für Ihren Varnish-HTTP-Beschleuniger verwenden.
Wenn Sie einen anderen Back-End-Webserver verwenden, müssen Sie den Standardport für Nginx konfigurieren.
1. Bearbeiten Sie die Standard-nginx-Konfiguration mit dem Nano-Editor.
sudo nano /etc/nginx/nginx.conf
Auf dem Standard-'server { ... } ' Abschnitt, ändern Sie die Option 'zuhören ' an Port '8081 ' wie unten.
....
server {
listen 8081 default_server;
listen [::]:8081 default_server;
...trim...
}
....
Speichern Sie die Konfiguration und beenden Sie.
2. Starten Sie nun den Nginx-Dienst neu, um eine neue Konfiguration anzuwenden.
sudo systemctl restart nginx
Der standardmäßige Nginx-Dienst wird jetzt auf Port „8081 ausgeführt '.
SSL-Terminierung mit Nginx-Webserver einrichten
Um die SSL-Terminierung mit Nginx einzurichten, müssen Sie eine neue Konfiguration für virtuelle Host-/Serverblöcke erstellen, die auf dem HTTPS-Port „443“ ausgeführt wird.
Dieser virtuelle Host verarbeitet alle HTTPS-Anfragen von Clients und leitet alle Anfragen an den Varnish-HTTP-Beschleuniger weiter.
1. Erstellen Sie mit dem folgenden Befehl eine neue Nginx-Serverblockkonfiguration.
Wenn Sie das Debian/Ubuntu-basierte System verwenden, erstellen Sie eine neue Konfiguration „/etc/nginx/sites-available/example.io '.
sudo nano /etc/nginx/sites-available/example.io
Erstellen Sie für das CentOS/RockyLinux/AlmaLinux-System eine neue Konfiguration '/etc/nginx/conf.d/example.conf' .
sudo nano /etc/nginx/conf.d/example.conf
Kopieren Sie die folgende Konfiguration und fügen Sie sie ein. Und stellen Sie sicher, dass Sie den Domänennamen und den Pfad der SSL-Zertifikate ändern.
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;
}
}
Speichern Sie die Konfiguration und beenden Sie.
2. Aktivieren Sie als Nächstes für das Debian/Ubuntu-System die Serverblockkonfiguration mit dem folgenden Befehl.
sudo ln -s /etc/nginx/sites-available/example.io /etc/nginx/sites-enabled/
3. Führen Sie nun den folgenden Befehl aus, um die Nginx-Konfiguration zu überprüfen, und starten Sie dann den Nginx-Dienst neu, um die neue Konfiguration zu übernehmen.
sudo nginx -t
sudo systemctl restart nginx
4. Überprüfen Sie nun den Nginx-Dienst und HTTPS Port '443 ' mit dem folgenden Befehl.
Überprüfen Sie den Status des Nginx-Dienstes mit dem folgenden systemctl-Befehl.
sudo systemctl status nginx
Stellen Sie sicher, dass der Nginx-Dienst aktiv ist und ausgeführt wird.
Überprüfen Sie den HTTPS-Port '443 ' auf Ihrem System mit ss Befehl unten.
ss -antpl | grep 443
Stellen Sie sicher, dass der HTTPS-Port '443 ' auf den Zustand 'LISTEN '.
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))
Jetzt haben Sie die grundlegende Konfiguration der SSL-Terminierung mit dem Nginx-Webserver abgeschlossen.
Automatisches HTTP zu HTTPS mit Varnish
In diesem Schritt richten Sie Varnish so ein, dass HTTP automatisch auf das HTTPS-Protokoll umgeleitet wird. Dies kann erreicht werden, indem eine neue Varnish-Regel für die Konfiguration 'default.vcl' erstellt wird .
1. Bearbeiten Sie die Lackkonfiguration '/etc/varnish/default.vcl' Verwenden des Nano-Editors.
nano /etc/varnish/default.vcl
Kopieren Sie die folgende Konfiguration und fügen Sie sie in die Option „sub vcl_recv { ... }“ ein '. Und stellen Sie sicher, dass Sie den Domainnamen mit Ihrer Domain ändern.
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...
{
Fügen Sie als Nächstes die folgende Konfiguration am Ende der Zeile hinzu. Dadurch wird die Umleitungsmethode zu HTTP '301' bestimmt.
sub vcl_synth {
if (resp.status == 850) {
set resp.http.Location = req.http.x-redir;
set resp.status = 301;
return (deliver);
}
}
Speichern Sie die Lackkonfiguration und beenden Sie.
2. Starten Sie als Nächstes den Varnish-Dienst neu, um eine neue Konfiguration mit dem folgenden Befehl anzuwenden.
sudo systemctl restart varnish
Und Sie haben die automatische HTTP- und HTTPS-Umleitung mithilfe der Varnish-Regel abgeschlossen.
SSL-Terminierung von Varnish überprüfen
Um die SSL-Terminierung von Varnish zu testen, können Sie den Webbrowser oder den curl-Befehl verwenden.
1. Öffnen Sie Ihren Webbrowser und geben Sie Ihren Domainnamen in die Adressleiste ein. Für dieses Beispiel verwenden wir den Firefox-Webbrowser.
http://example.io
Sie werden automatisch zum HTTPS-Protokoll weitergeleitet.
Klicken Sie mit der rechten Maustaste auf die Webseite und klicken Sie auf das Menü „Inspizieren“ '.
Wechseln Sie zum Tab 'Netzwerk ' und klicken Sie auf 'Neu laden ' Schaltfläche.
Klicken Sie auf die Root-URL-Anforderung und Sie sehen eine ähnliche Ausgabe wie unten.
Die Anfrage an http://example.io wird automatisch auf das HTTPS-Protokoll https://example.io umgeleitet mit dem Statuscode '301 '.
Der Varnish-Server verarbeitet alle Client-Anfragen.
2. Verwenden Sie den folgenden Befehl, um die Lack-SSL-Terminierung mit curl zu überprüfen.
curl -I http://example.io
Sie werden einen detaillierten HTTP-Header wie unten sehen.
Die Anfrage wird an das HTTPS-Protokoll „https://example.io“ mit dem HTTP-Statuscode „301 umgeleitet '. Der Lackserver verarbeitet alle Anfragen von Clients.
Schlussfolgerung
Glückwunsch! Sie haben die Konfiguration von Varnish SSL Termination mit dem Nginx-Webserver gelernt.
Außerdem haben Sie den grundlegenden certbot-Befehl zum Generieren von kostenlosem SSL Letsencrypt und die grundlegende Lackregel zum automatischen Umleiten von HTTP zu HTTPS gelernt.