Android

Einrichten eines Nginx-Reverse-Proxy

Reverse Proxy mit NGINX und Let's Encrypt - Tutorial deutsch

Reverse Proxy mit NGINX und Let's Encrypt - Tutorial deutsch

Inhaltsverzeichnis:

Anonim

Ein Reverseproxy ist ein Dienst, der eine Clientanforderung entgegennimmt, die Anforderung an einen oder mehrere Proxy-Server sendet, die Antwort abruft und die Antwort des Servers an den Client übermittelt.

Aufgrund seiner Leistung und Skalierbarkeit wird NGINX häufig als Reverse-Proxy für HTTP- und Nicht-HTTP-Server verwendet. Eine typische Reverse-Proxy-Konfiguration besteht darin, Nginx vor Node.js-, Python- oder Java-Anwendungen zu setzen.

Die Verwendung von Nginx als Reverse Proxy bietet Ihnen mehrere zusätzliche Vorteile:

  • Lastausgleich - Nginx kann einen Lastausgleich durchführen, um die Anforderungen der Clients auf die Proxy-Server zu verteilen, wodurch die Leistung, Skalierbarkeit und Zuverlässigkeit verbessert werden. Zwischenspeichern - Mit Nginx als Reverse-Proxy können Sie die vorgerenderten Versionen von Seiten zwischenspeichern, um die Ladezeiten der Seiten zu verkürzen. Es funktioniert, indem der Inhalt, der von den Antworten der Proxy-Server empfangen wurde, zwischengespeichert wird und verwendet wird, um auf Clients zu antworten, ohne dass der Proxy-Server jedes Mal nach demselben Inhalt gefragt werden muss. SSL-Beendigung - Nginx kann als SSL-Endpunkt für Verbindungen mit den Clients fungieren. Eingehende SSL-Verbindungen werden verarbeitet und entschlüsselt, und die Antworten des Proxy-Servers werden verschlüsselt. Komprimierung - Wenn der Proxy-Server keine komprimierten Antworten sendet, können Sie Nginx so konfigurieren, dass die Antworten komprimiert werden, bevor sie an die Clients gesendet werden. DDoS-Angriffe verringern - Sie können die Anzahl der eingehenden Anfragen und Verbindungen pro IP-Adresse auf einen für normale Benutzer typischen Wert begrenzen. Mit Nginx können Sie auch den Zugriff basierend auf dem Client-Standort und dem Wert der Anforderungsheader wie "User-Agent" und "Referer" blockieren oder einschränken.

Dieser Artikel beschreibt die Schritte, die zum Konfigurieren von Nginx als Reverse Proxy erforderlich sind.

Voraussetzungen

Wir gehen davon aus, dass Sie Nginx auf Ihrem Ubuntu-, CentOS- oder Debian-Server installiert haben.

Verwendung von Nginx als Reverse Proxy

Um Nginx als Reverse-Proxy für einen HTTP-Server zu konfigurieren, öffnen Sie die Serverblock-Konfigurationsdatei der Domäne und geben Sie einen Speicherort und einen Proxy-Server darin an:

server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:8080; } }

Die Proxy-Server-URL wird mit der Anweisung proxy_pass und kann HTTP oder HTTPS als Protokoll, Domänenname oder IP-Adresse sowie einen optionalen Port und URI als Adresse verwenden.

Die obige Konfiguration weist Nginx an, alle Anforderungen an den /app Speicherort an den Proxy-Server unter http://127.0.0.1:8080 .

Auf Ubuntu- und Debian-basierten Distributionen werden Server- /etc/nginx/conf.d Verzeichnis /etc/nginx/sites-available gespeichert, während sie unter CentOS im Verzeichnis /etc/nginx/conf.d .

Um besser zu veranschaulichen, wie die Anweisungen location und proxy_pass funktionieren, nehmen wir das folgende Beispiel:

server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:8000/wordpress/; } }

Wenn ein Besucher auf http://example.com/blog/my-post zugreift, überträgt Nginx diese Anforderung an http://node1.com:8000/wordpress/my-post .

Wenn die Adresse des Proxy-Servers einen URI enthält ( /wordpress/ ), wird der Anforderungs-URI, der an den Proxy-Server übergeben wird, durch einen in der Direktive angegebenen URI ersetzt. Wenn die Adresse des Proxy-Servers ohne URI angegeben wird, wird der vollständige Anforderungs-URI an den Proxy-Server übergeben.

Anforderungsheader übergeben

Wenn Nginx eine Anfrage als Proxy fungiert, werden automatisch zwei Header-Felder in einem Proxy-Request vom Client, Host und Connection , definiert und leere Header entfernt. Host ist auf die Variable $proxy_host , und Connection ist auf close festgelegt.

Verwenden Sie zum Anpassen oder Festlegen von Headern für Proxy-Verbindungen die Anweisung proxy_set_header , gefolgt vom Header-Wert. Hier finden Sie eine Liste aller verfügbaren Anforderungsheader und ihrer zulässigen Werte. Wenn Sie verhindern möchten, dass ein Header an den Proxy-Server übergeben wird, setzen Sie ihn auf eine leere Zeichenfolge "" .

Im folgenden Beispiel ändern wir den Wert des Host Header-Felds in $host und entfernen das Accept-Encoding Header-Feld, indem wir den Wert auf eine leere Zeichenfolge setzen.

location / { proxy_set_header Host $host; proxy_set_header Accept-Encoding ""; proxy_pass http://localhost:3000; }

Wenn Sie die Konfigurationsdatei ändern, müssen Sie den Nginx-Dienst neu starten, damit die Änderungen wirksam werden.

Konfigurieren von Nginx als Reverse Proxy für einen Nicht-HTTP-Proxy-Server

Um Nginx als Reverse-Proxy für einen Nicht-HTTP-Proxy-Server zu konfigurieren, können Sie die folgenden Anweisungen verwenden:

  • fastcgi_pass - Reverse-Proxy zu einem FastCGI-Server. uwsgi_pass - Reverse-Proxy zu einem uwsgi-Server. scgi_pass - Reverse-Proxy zu einem SCGI-Server. memcached_pass - Reverse-Proxy zu einem Memcached-Server.

Eines der häufigsten Beispiele ist die Verwendung von Nginx als Reverse-Proxy für PHP-FPM:

server { #… other directives location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }

Allgemeine Nginx Reverse Proxy-Optionen

Die Bereitstellung von Inhalten über HTTPS ist heutzutage ein Standard. In diesem Abschnitt geben wir Ihnen ein Beispiel für die HTTPS-Nginx-Reverse-Proxy-Konfiguration, einschließlich der empfohlenen Nginx-Proxy-Parameter und -Header.

location/ { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_cache_bypass $http_upgrade; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; 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 $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; }

  • proxy_http_version 1.1 - Definiert die HTTP-Protokollversion für das Proxying. Standardmäßig ist sie auf 1.0 eingestellt. Für Websockets und keepalive Verbindungen müssen Sie die Version 1.1 verwenden. proxy_cache_bypass $http_upgrade - Legt die Bedingungen fest, unter denen die Antwort nicht aus einem Cache abgerufen wird. Upgrade $http_upgrade und Connection "upgrade" - Diese Headerfelder sind erforderlich, wenn Ihre Anwendung Websockets verwendet. Host $host - Die Variable $host in der folgenden Rangfolge enthält: Hostname aus der Anforderungszeile oder Hostname aus dem Host oder den Servernamen, der einer Anforderung entspricht. X-Real-IP $remote_addr - X-Real-IP $remote_addr die Remote-IP-Adresse des realen Besuchers an den Proxy-Server weiter. X-Forwarded-For $proxy_add_x_forwarded_for - Eine Liste mit den IP-Adressen aller Server, über die der Client weitergeleitet wurde. X-Forwarded-Proto $scheme - Bei Verwendung innerhalb eines HTTPS-Serverblocks wird jede HTTP-Antwort vom Proxy-Server in HTTPS umgeschrieben. X-Forwarded-Host $host - Definiert den vom Client angeforderten ursprünglichen Host. X-Forwarded-Port $server_port - Definiert den ursprünglich vom Client angeforderten Port.

Fazit

Sie haben gelernt, wie Sie Nginx als Reverse Proxy verwenden. Wir haben Ihnen auch gezeigt, wie Sie zusätzliche Parameter an den Server übergeben und verschiedene Header-Felder in Proxy-Anforderungen ändern und festlegen.

Nginx