2013-04-22 14 views
21

मैं अपने webservice पर सभी कॉल/api को पास करने का प्रयास कर रहा हूं लेकिन मुझे निम्न कॉन्फ़िगरेशन के साथ 404s मिलते रहेंगे। अपेक्षित के रूप में 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 या webservice है जो 404 के साथ प्रतिक्रिया करता है? – Bart

उत्तर

48

यह

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

आवश्यकताओं इस

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

पर अधिक जानकारी के लिए प्रश्न में संपादन किए हैं, इस मुद्दे को ठीक करने के लिए लगता है, लेकिन इससे कोई फर्क पड़ता है कि यह क्या अच्छा होगा। – user1338062

+0

यह मेरे लिए समस्या का समाधान नहीं करता है। असल में यह खराब हो जाता है और मुझे क्रोम में 'ERR_TOO_MANY_REDIRECTS' देता है। – 0xAffe

+1

0xAffe - पथ और proxy_pass url पर दोनों स्लेश को याद रखें। कभी-कभी बहुत सारे रीडायरेक्ट होते हैं यदि आप स्लेश – szydan

7

होने की Nginx 1.6.2 में किसी कारण proxy_pass तक कटौती हैडर "होस्ट" अपस्ट्रीम में जाने से पहले, और defau द्वारा कैच अनुरोध lt सर्वर, और यहां तक ​​कि proxy_header_pass में मदद करता है नहीं करता है, तो मैं स्पष्ट रूप से इसे स्थापित करने के लिए है:

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

मैं, पोर्ट 80 पर सुनने के लिए भूल गया यह तय की।

"http" nginx config का हिस्सा है, पर: /etc/nginx/nginx.conf, नीचे है:

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

,
http://192.111.111.11/path1/
तक पहुँचने
http://127.0.0.1:3000/path1/

तक पहुँचने का परिणाम मिल जाएगा

नोट:
1 9 2.111.111.11 को उपरोक्त में अपने आईपी पते के साथ बदलें।
"ifconfig" कमांड चलाएं, "inet addr" भाग आपके आईपी पते को देगा

संबंधित मुद्दे