2017-01-05 2 views
1

Also, ich habe einen Proxy von Drittanbietern (wahrscheinlich unter squid), der nur Verbindungen von einer meiner IPs akzeptiert, aber ich muss in der Lage sein, von einer Vielzahl von IPs darauf zuzugreifen.nginx - Weiterleiten von Anfragen an einen anderen Proxy

Also versuche ich ein Nginx setzen, um Anfragen an diesen Proxy weiterzuleiten. Ich weiß, nginx Anfrage wie folgt weiterleiten:

location/{ 
    proxy_pass http://$http_host$uri$is_args$args; 
} 

Dies würde funktionieren, wenn ich nginx benötigt Anfragen direkt an die Zielstelle zu übermitteln, aber ich muss es zunächst zu Proxy-X zu übergeben. Ich habe das versucht:

upstream myproxy { 
    server X.X.X.X:8080; 
} 

location/{ 
    proxy_pass http://myproxy$uri$is_args$args; // also tried: http://myproxy$http_host$uri$is_args$args 
} 

Aber ich bekomme "(104) Connection Reset von Peer". Ich denke, da nginx wird wie folgt Proxying:

GET /index.html HTTP/1.1 
Host: www.targetdomain.com.br 

Aber ich muss es Proxy wie folgt aus:

GET http://www.targetdomain.com.br/index.html HTTP/1.1 

Antwort

2

Ich fand heraus, dass dies funktioniert:

http { 
    # resolver 8.8.8.8; # Needed if you use a hostname for the proxy 
    server_name ~(?<subdomain>.+)\.domain\.com$; 

    server { 
    listen 80; 

    location/{ 
     proxy_redirect off; 
     proxy_set_header Host $subdomain; 
     proxy_set_header X-Forwarded-Host $http_host; 
     proxy_pass "http://X.X.X.X:8080$request_uri"; 
    } 
    } 
} 

Sie müssen verwenden resolver wenn X.X.X.X ein Hostname und keine IP ist.

Überprüfen Sie https://github.com/kawanet/nginx-forward-proxy/blob/master/etc/nginx.conf für mehr Tricks.

EDIT: auch nginx server_name wildcard or catch-all und http://nginx.org/en/docs/http/ngx_http_core_module.html#var_server_name

+0

überprüfen verstehe ich, aber in diesem Fall, dass Sie „www.targetdomain.com.br“ manuell eingestellt werden, will ich es automatisch gelöst werden. Ich benutze Tintenfisch, um dies jetzt zu tun. – lucaswxp

+0

Ich habe meine Antwort bearbeitet, um zu zeigen, wie ich damit umgehe (mit 'server_name', der in Subdomain-Variable einfängt). – Silex

+0

Wenn Sie den Host basierend auf den Abfrageparametern festlegen müssen, können Sie Übereinstimmungen mit 'if' und' set' usw. durchführen (siehe den Link unten in meiner Antwort). – Silex

Verwandte Themen