2013-04-22 17 views
21

私のWebサービスに/ apiへのすべての呼び出しを渡そうとしていますが、次の設定で404を取得し続けます。期待どおりにindex.htmlを呼び出す/返す。なぜ誰が知っていますか?nginx proxy_pass 404エラー、理由を理解できない

upstream backend{ 
    server localhost:8080; 
} 

server { 

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

    location/{ 
     root /html/dir; 
    } 
} 

詳細情報ここ

[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

バックエンドサーバーで使用できる場所はありますか? – Bart

+0

ええ、8080上のwebserviceに直接呼び出すと期待どおりに動作しています – Roge

+0

それはnginxまたは404で応答するWebサービスですか? – Bart

答えて

48

この

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

ニーズnginxの1.6.2カットヘッダー "ホスト" に何らかの理由proxy_passでは、この

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

問題を修正するようですが、これがどのような違いがあるかの説明がうまくいくでしょう。 – user1338062

+0

これは私の問題を解決しません。実際、それはそれを悪化させ、私に 'ERR_TOO_MANY_REDIRECTS'をクロムで与えます。 – 0xAffe

+1

0xAffe - とpathとproxy_pass urlの両方のスラッシュを気にしてください。あなたがスラッシュの1つを見逃した場合、リダイレクトが多すぎる – szydan

7

されるように上流に渡る前に、defauによってキャッチをリクエストするLTサーバー、さらにはproxy_header_passは助けていないので、私は明示的に設定しました:

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

私はそれを修正し、ポート80でリッスンするのを忘れました。

はnginxのコンフィグレーションの "HTTP" の部分は、時:/etc/nginx/nginx.conf、以下の通りです:
http://127.0.0.1:3000/path1/

にアクセスした結果を取得します
http://192.111.111.11/path1/
にアクセス今

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

注: 192.111.111.11を上記のIPアドレスに置き換えてください。
「ifconfig」コマンドを実行すると、「inet addr」の部分にIPアドレスが表示されます