Wie verwende ich Nginx als HTTP / HTTPS-Proxy-Server? [geschlossen]

15

Ist es möglich, Nginx als HTTP / HTTPS-Proxy zu verwenden?

vlad
quelle

Antworten:

13

Nach einigen Tests habe ich festgestellt , dass die folgende Konfiguration für mich funktioniert .

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

Diese Konfiguration funktioniert nur für HTTP, nicht für HTTPS.

vlad
quelle
4
Gut gemacht! Einige Hinweise. 1: listen ... default_server. 2: server_name ""oder server_name _. 2: proxy_pass $scheme://$http_host. Die Einschränkungen: Poxen auf Upstreams nur mit Port 80; verarbeitet keine Weiterleitungen selbst.
Alexander Azarov
$ scheme ist nur nützlich, wenn der vhost auch https abhört - aber dann haben Sie ein mittleres Risiko für Menschen und müssen mit https-Zertifikatsfehlern
fertig werden
7

Ich denke, die kurze Antwort ist nein, sie wurde nicht für Forward Proxying geschrieben

AKTUALISIEREN

Um meine Aussage zu verdeutlichen:

NGINX wurde nie mit Blick auf Forward-Proxying geschrieben - obwohl es aus der Ferne möglich ist, die Konfiguration irgendwie zu manipulieren, um das zu tun, was Sie wollen, müssen Sie die folgenden Einschränkungen verstehen:

  • Cache-Unterstützung fast nicht vorhanden (einer der Hauptgründe für die Verwendung eines Proxys)
  • Kann nicht für etwas anderes als Port 80-Verkehr verwendet werden (dh keine Anmeldung in Cpanel-Boxen durch ihn)
  • Keine Unterstützung für SSL-basierten Datenverkehr
  • Keine Unterstützung für Standard-Proxy-Header und HTTP-Cache-Header (nach meinem Verständnis werden diese nur durchgereicht)
  • Keine Unterstützung für andere Protokolle, die Proxy - Server unterstützen - zB VPN etc

Mögliche andere Überlegungen, die derzeit nicht bekannt sind:

  • Möglich, Ihren Proxy als keine echte Fähigkeit zur differenzierten Zugriffskontrolle / -authentifizierung zu definieren (nginx unterstützt unterschiedliche Methoden der Zugriffskontrolle, es ist jedoch unklar, wie sich diese im Forward-Proxy-Kontext verhalten könnten).
  • Mögliche Sicherheitsrisiken für den Computer, auf dem nginx installiert ist, da möglicherweise Sicherheitslücken bestehen, die nicht berücksichtigt werden, weil er nicht für den Betrieb vorgesehen ist
Anthonysomerset
quelle
Gegenbeispiel: ef.gy/using-nginx-as-a-proxy-server
kkurian
vielleicht sollte meine Antwort klarer sein können es war nicht entworfen , nach vorn zu tun Proxying - Affe Patch Bemühungen nicht voll Proxy - Unterstützung wie Proxying Anfragen an Nicht - Standard (Port 80) Ports bieten
anthonysomerset
3

Wenn Sie einen HTTP / HTTPS-Proxy verwenden möchten, sollten Sie Squid verwenden. Es wurde geschrieben, um genau das zu tun. Nginx wurde als Reverse-Proxy und Load-Balancer entwickelt, jedoch nicht als Forward-Proxy.

MikeyB
quelle
Ich kenne mich mit Tintenfisch / oops / tinyproxy / etc aus. Ich stelle diese Frage nur aus Gründen des akademischen Interesses
vlad