it-swarm.com.de

Wie verwende ich NGINX als Forward-Proxy für einen beliebigen Standort?

Ich versuche, NGINX als Forward-Proxy zu konfigurieren, um Fiddler zu ersetzen, den wir als Forward-Proxy verwenden. Die Funktion von Fiddler, die wir verwenden, ermöglicht es uns, ALLE eingehenden Anfragen an einen 8888-Port weiterzuleiten. Wie mache ich das mit NGINX?

In allen Beispielen von NGINX als Reverse Proxy sehe ich proxy_pass immer für einen bestimmten Upstream/Proxy-Server definiert. Wie kann ich es so konfigurieren, dass es auf den angeforderten Server übertragen wird, unabhängig davon, auf welche Weise ich Fiddler als Forward-Proxy verwende?.

Beispiel:

In meinem Code:

WebProxy proxyObject = new WebProxy("http://mynginxproxyserver:8888/",true);
WebRequest req = WebRequest.Create("http://www.contoso.com");
req.Proxy = proxyObject;

In mynginxproxyserver/nginx.conf möchte ich den Proxy nicht an einen anderen Server delegieren (z. B. proxy_pass auf http://someotherproxyserver). Stattdessen soll es nur ein Proxyserver sein und Anforderungen von meinem Client (siehe oben) an den Anforderungshost umleiten. Das macht Fiddler, wenn Sie es als Proxy aktivieren: http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy

9
Arman Bimatov

Ihr Code scheint einen Forward-Proxy (oft nur "Proxy") zu verwenden, keinen Reverse-Proxy, und sie funktionieren ganz anders. Reverse-Proxy ist für Server-Ende und etwas Client nicht wirklich zu sehen oder darüber nachzudenken. Es geht darum, Inhalte von den Backend-Servern abzurufen und an den Client weiterzuleiten. Forward Proxy wird vom Client eingerichtet, um eine Verbindung zum restlichen Internet herzustellen. Möglicherweise weiß der Server wiederum nichts über Ihren Forward-Proxy.

fwd vs rev proxy

Nginx ist ursprünglich als Reverse-Proxy und nicht als Forward-Proxy konzipiert. Aber es kann immer noch als Forward verwendet werden. Das ist der Grund, warum Sie wahrscheinlich nicht viel Konfiguration dafür finden konnten.

Dies ist eher eine theoretische Antwort, da ich das noch nie selbst gemacht habe, aber eine Konfiguration wie die folgende sollte funktionieren.

server {
    listen       8888;

    location / {
        resolver 8.8.8.8; # may or may not be necessary.
        proxy_pass http://$http_Host$uri$is_args$args;
    }
}

Dies sind nur die wichtigen Punkte, den Rest müssen Sie konfigurieren.

Die Idee ist, dass der proxy_pass nicht an einen vordefinierten, sondern an einen variablen Host übergeben wird. Wenn Sie also http://example.com/foo?bar Anfordern, enthält Ihr http-Header Host of example.com. Dadurch ruft Ihr proxy_pass Daten von http://example.com/foo?bar Ab.

Das von Ihnen verknüpfte Dokument verwendet es als Reverse-Proxy. Es wäre äquivalent zu

        proxy_pass http://localhost:80;
25
Grumpy