2013-06-24 27 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 –