2013-04-22 19 views
21

Próbuję przekazać wszystkie wywołania/api do mojego serwisu internetowego, ale nadal otrzymuję 404 z następującej konfiguracji. Wywołuje/zwraca index.html zgodnie z oczekiwaniami. Czy ktoś wie, dlaczego?nginx proxy_pass błąd 404, nie rozumiem, dlaczego

upstream backend{ 
    server localhost:8080; 
} 

server { 

    location /api { 
     proxy_pass http://backend; 
    } 

    location/{ 
     root /html/dir; 
    } 
} 

Więcej informacji tutaj

[email protected]:/etc/nginx/sites-available$ curl -i localhost/api/authentication/check/user/email 
HTTP/1.1 404 Not Found 
Server: nginx/1.2.1 
Date: Mon, 22 Apr 2013 22:49:03 GMT 
Content-Length: 0 
Connection: keep-alive 

[email protected]:/etc/nginx/sites-available$ curl -i localhost:8080/authentication/check/user/email 
HTTP/1.1 200 OK 
Content-Type: application/json 
Date: Mon, 22 Apr 2013 22:49:20 GMT 
Transfer-Encoding: chunked 

{"user":["false"],"emailAddress":["false"]} 
+0

Czy lokalizacja jest dostępna na serwerze zaplecza? – Bart

+0

tak, dzwoni bezpośrednio do serwisu na 8080 działa zgodnie z oczekiwaniami. – Roge

+0

czy jest to nginx lub usługa sieciowa, która odpowiada 404? – Bart

Odpowiedz

48

This

location /api { 
    proxy_pass http://backend; 
} 

musi być ten

location /api/ { 
    proxy_pass http://backend/; 
} 
+7

Wygląda na to, że problem został rozwiązany, ale wyjaśnienie, co to za różnica, byłoby miłe. – user1338062

+0

To nie rozwiązuje problemu dla mnie. W rzeczywistości to pogarsza i daje mi 'ERR_TOO_MANY_REDIRECTS' w chrome. – 0xAffe

+1

0xAffe - pamiętaj zarówno ukośniki na ścieżce, jak i adres URL proxy_pass. Zbyt wiele przekierowań zdarza się czasami, jeśli przegapiłeś jedną z ukośników. – szydan

7

z jakiegoś powodu proxy_pass w Nginx 1.6.2 tnie nagłówka "Host" przed przejściem na wyższy poziom i zażądać połowów przez defau Serwer lt, a nawet proxy_header_pass nie pomaga, więc już jawnie ustawić go:

location/{ 
    proxy_set_header Host $host; 
    proxy_pass http://backend; 
} 
1

zapomniałem nasłuchiwać na porcie 80, naprawić go.

"http" część nginx config, pod adresem: /etc/nginx/nginx.conf jest poniżej:

http { 
    server { 
     listen 192.111.111.11:80; 
     location /path1/ { 
      proxy_pass http://127.0.0.1:3000/path1/ 
     } 
    } 
} 

Teraz dostępu
http://192.111.111.11/path1/
dostanie wynik dostępu
http://127.0.0.1:3000/path1/

UWAGA:
Wymień 192.111.111.11 na swój adres IP w powyższym.
Uruchom polecenie "ifconfig", część "inet addr" poda Twój adres IP

Powiązane problemy