Wie richte ich einen SSL-Reverse-Proxy mit Nginx ein?

Wie richte ich einen SSL-Reverse-Proxy mit Nginx ein?

Im Zusammenhang mit meiner Frage bzgl.So richten Sie einen Reverse-Proxy mit Nginx ein, ich stecke jetzt beim Einrichten fest, das zusätzlich eine SSL-Verbindung erfordert.

Ich habe einen Docker-Container, der meinem Host-System den zugeordneten SSL-Port 4430 zur Verfügung stellt. Der Webserver verwendet ein selbstsigniertes Zertifikat.

In meiner /etc/hostsDatei habe ich Folgendes definiert:

127.0.0.1 app.local

Und meine Nginx-Serverkonfiguration sieht so aus:

server {
    listen 80;
    server_name app.local;
    location / {
        return https://$host$request_uri;
    }
}

server {
    listen 443;
    server_name app.local;
    location / {
        proxy_pass https://127.0.0.1:4430;
    }
}

Wenn ich über auf meine Webanwendung zugreife, https://127.0.0.1::4430funktioniert es einwandfrei. Allerdings erhalte ich beim ersten Mal eine Warnung bezüglich des Zertifikats, die ich dann zulassen muss.

http://app.localWenn ich jedoch über oder eine Verbindung herstelle https://app.local, zeigt mein Browser Folgendes an:

SSL connection error
ERR_SSL_PROTOCOL_ERROR

Ich habe auch damit gerechnet, dass die Zertifikatswarnung erscheint, die ich dann zulassen könnte.

Wie lässt sich der Reverse-Proxy bei Verwendung von SSL mit Nginx zum Laufen bringen?

Antwort1

So beenden Sie SSL auf nginx:

a) Im Serverbereich müssen Port und „SSL“ angegeben werden.

listen 192.168.2.26:443 ssl;

b) Der Serverblock gibt dann auch Zertifikate und SSL-Parameter an

ssl_certificate      new-cert.cer;
ssl_certificate_key  new-cert.key;

ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;

Antwort2

Ich denke, Sie sind nah dran (ich bin selbst ein Neuling bei Nginx), aber Ihr zweiter Serverblock braucht etwas mehr ... Ich habe einen auf meinem Server mit folgendem:

listen 443 ssl;
listen [::]:443 ipv6only=on ssl;
charset utf-8;
client_max_body_size 75M;
server_name example.com www.example.com;
ssl_certificate /etc/ssl/certs/example.com.crt;
ssl_certificate_key /etc/ssl/private/example.com.key;

Beachte das Folgende:

  1. Die Listen-Direktive gibt SSL an.
  2. Das Zertifikat und der Zertifikatsschlüssel werden angegeben. Das Zertifikat sollte an einem leicht zugänglichen Ort aufbewahrt werden, da es an jeden gesendet wird, der auf Ihre Site zugreift. Der Schlüssel befindet sich an einem Ort, an dem nur die Benutzer darauf zugreifen können, die ihn benötigen.

Die Zeilen „IPv6“, „Charset“ und „Client Max“ sind Zeilen, die ich auf meinem Server habe, die aber für das, was Sie hier tun, nicht erforderlich sind. Sie können diese beliebig benennen und an beliebiger Stelle platzieren, also machen Sie sich keine Gedanken über den genauen Dateinamen oder Speicherort, wenn Sie Ihre Datei woanders speichern. So mache ich es einfach gerne und meine ls -lAusgabe ist:

-rw-r--r-- 1 root root 1887 Oct  8 14:16 /etc/ssl/certs/example.com.crt
-rw-r----- 1 root ssl-cert 1704 Oct  8 13:47 /etc/ssl/private/example.com.key

verwandte Informationen