2012-10-13 22 views
7

Chcę, aby nginx najpierw przeszukał mój lokalny host, a na błędzie 404 powinien przeszukać serwer 1.1.1.1.Nginx proxy_next_upstream nie działa

Jestem w stanie pobrać plik, który znajduje się na hoście lokalnym, ale nie można uzyskać z serwera 1.1.1.1.

server { 
    listen 80; 
    server_name localhost; 

    access_log /var/log/nginx/access.log main; 

    location /products/ { 
     proxy_next_upstream http_404; 

     root /var/foo; 
    } 
} 

server { 
    listen 80; 
    server_name 1.1.1.1; 
    location /products/ { 
     ######### 
    } 
} 

Domyślam się, że proxy_next_upstream nie przełącza się na serwer.

Każda pomoc w tym zakresie byłaby doceniana.

Odpowiedz

27

Dyrektywa proxy_next_upstream jest dyrektywą konfiguracyjną do kontroli ponownego żądania z grupy upstream servers przez proxy_pass, jeśli żądanie jednego z nich nie powiedzie się. Nie ma sensu bez zdefiniowanego bloku proxy_pass i upstream. Można go używać jeśli proxy do wielu serwerów upstream tak:

upstream backends { 
    server 192.2.0.1; 
    server 192.2.0.2; 
    ... 
} 

server { 
    ... 

    location/{ 
     proxy_pass http://backends; 
     proxy_next_upstream error timeout http_404; 
    } 
} 

Jeśli chcesz nginx, aby wyszukać plik na dysku, a jeśli to nie znaleziono - proxy wniosek do innego serwera, należy skonfigurować ją na przykład stosując try_files fallback zamiast:

location/{ 
    root /path/to/root; 
    try_files $uri @fallback; 
} 

location @fallback { 
    proxy_pass http://... 
} 

Zobacz http://nginx.org/r/try_files uzyskać więcej informacji na temat dyrektywy try_files.

+0

Dziękuję bardzo Maxim Dounin..działać !!!! – sorabh

+0

Jeśli zadziałało, możesz go podpisać jako odpowiedź – gipi

+0

Przypadków http_403 i http_404 nigdy nie uważa się za nieudane próby. – Daniel

Powiązane problemy