2013-06-24 29 views
1

我有一次在同一臺服務器上運行的NodeJS和Nginx。 Nginx接受來自「www.example.com」的請求,並且我希望NodeJS從「api.example.com」接收請求。我幾乎得到它,我配置Nginx將來自「api.example.com」的請求轉發到NodeJS(localhost:3000),當然它工作正常,除了請求到達NodeJS沒有任何信息。NodeJS在Nginx後面工作

例如,我使用PassportJS開發NodeJS背後的所有邏輯。我有這樣的事情:

app.post('/room/create', function(req, res) { console.log(req); }); 

和「請求」,誰應該來存儲所有來自請求的信息是空的,當我用「api.ismuser.com」訪問變種。但是,如果我使用公共IP:PORT來獲取NodeJS,它就可以工作。

我只是猜測這是由於Nginx,他是像NodeJS的反向代理工作。

我不知道將Nginx放在NodeJS前是否做得很好,但這是我發現使用相同公有IP工作www.ismuser.com和api.ismuser.com的唯一方法。

我該怎麼辦?


修訂

Nginx.conf:

http { 
    passenger_root /home/ubuntu/.rvm/gems/[email protected]_r3/gems/passenger-4.0.5; 
    passenger_ruby /home/ubuntu/.rvm/wrappers/[email protected]_r3/ruby; 

    include  mime.types; 
    default_type application/octet-stream; 
    sendfile  on; 
    keepalive_timeout 65; 

    upstream backend { 
     server 127.0.0.1:3000; 
    } 

    server { 
     listen 80; 
     server_name api.example.com; 

     location/{ 
       proxy_set_header X-Real-IP $remote_addr; 
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
       proxy_set_header Host $http_host; 
       proxy_set_header X-NginX-Proxy true; 
       proxy_pass http://backend/; 
       proxy_redirect off; 
     } 
    } 

    server { 
     listen 80; 
     server_name www.example.com; 
     root /home/ubuntu/ismapi/ism/public; # <--- be sure to point to 'public'! 
     passenger_enabled on; 
    } 
} 
+0

把你的nginx配置PLZ ... – jmingov

+0

已加入,謝謝。 –

回答

0

你可能想嘗試建立proxy_pass指令末尾沒有URI部分 '/',像這樣:

proxy_pass http://backend;

如果指定了URI,它將在發送的請求中使用t o您的後端node.js應用程序。 node.js將取代/的請求,而不是您的proxy_pass設置所定義的請求。

欲瞭解更多信息,請參閱nginx的proxy_pass文檔:http://wiki.nginx.org/HttpProxyModule#proxy_pass

+0

沒有。 Req一直空着。關閉尾部URI部分沒有任何變化。 –

+0

我在一個應用程序中的配置與您的配置完全相同:'location/api/{proxy_pass http://127.0.0.1:1234; }並且node.js代碼檢查POST內容的req.body []。工作正常,'console.log(「body:」+ JSON.stringify(req.body))'在API處理函數中打印出正文。 – oh7lzb

+0

尚未解決。事實上,我看到我不是唯一一個將Node放在Nginx下的問題。例如,http://stackoverflow.com/questions/16547182/response-code-502-using-socket-io-and-nginx-1-4-x-stable-with-proxy-pass –