2016-05-12 5 views
2

Als Nginx-Neuling versuche ich, einen Reverse-Proxy zu einer externen Domäne arbeiten. Später muss ich auf eine interne Domain portieren. Beim Versuch, Proxy auf eine externe Domäne umzukehren, scheine ich eine Wand zu treffen und die Antwort ist eine 404 kann nicht gefunden werden.Nginx Reverse-Ordner auf externe Website

Das Ziel ist, wenn ich versuche, Zugriff auf http://localhost/example der Reverse-Proxy dient www.example.com.

Das ist meine config:

server { 
    listen  80; 
    server_name localhost; 

    location/{ 
     root /usr/share/nginx/html; 
     index index.html index.htm; 
    } 

    location /example/ { 
     proxy_set_header Host $host; 
     proxy_set_header X-Real-IP $remote_addr; 
     proxy_pass http://www.example.com/; 
    } 

    #error_page 404    /404.html; 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

Jeder Hinweis, was ich falsch mache?

Antwort

1

Wenn über HTTP gesprochen wird, erkennt der Webserver, welcher der konfigurierten Server angefordert wurde, indem er Host Header überprüft. In diesem Fall teilen Sie Nginx mit, dass Proxy-Anfragen an einen anderen Server gesendet werden sollen, aber weisen Sie sie an, den ursprünglichen Header Host an diesen Server zu übergeben. Offensichtlich gibt es auf dem Remote-Server keine Konfiguration, die eine Anfrage mit dieser Domäne annehmen könnte. So antwortet es Ihnen mit 404.

Um es funktionieren zu lassen, ändern Sie einfach den Header zu proxy_set_header Host www.example.com; wo anstelle von www.example.com sollten Sie den gleichen Host wie in proxy_pass Direktive verwenden. (oder gleiche Variable)

+0

Ist das der richtige Block? Standort/Beispiel/{ proxy_set_header Host www.example.com; proxy_set_header X-Real-IP $ remote_addr; proxy_pass h * ttp: //www.beispiel.com; } Wenn ich das versuche, bekomme ich tatsächlich einen anderen Fehler, aber jetzt ein 500 - Interner Server Fehler Marco

+0

@Marco proxy_pass sollte URL mit Protokoll und URI enthalten. Das war also in Ihrem ersten Beispiel 'proxy_pass http: //example.com/;' –

Verwandte Themen