我在同一台服务器上运行NodeJS和Nginx。 Nginx接受来自“www.example.com”的请求,我希望NodeJS接收来自“api.example.com”的请求。我几乎得到了它,我配置Nginx将请求从“api.example.com”转发到NodeJS(localhost:3000),当然它可以工作,除了请求到达NodeJS没有任何信息。
例如,我正在使用PassportJS来开发NodeJS背后的所有逻辑。我有这样的事情:
app.post('/room/create', function(req, res) { console.log(req); } );
和“req”,当我通过“api.ismuser.com”访问时,应该存储来自请求的所有信息的var是空的。但是,如果我使用公共IP:PORT来获取NodeJS,它就可以工作。
我只是猜测这是由于Nginx,他的工作就像NodeJS的反向代理。
我不知道将Nginx放在NodeJS前面是否做得很好,但这是我发现使用相同的公共IP工作www.ismuser.com和api.ismuser.com的唯一方法。
我该怎么办?
已更新
Nginx.conf:
http {
passenger_root /home/ubuntu/.rvm/gems/ruby-2.0.0-p195@ism_r3/gems/passenger-4.0.5;
passenger_ruby /home/ubuntu/.rvm/wrappers/ruby-2.0.0-p195@ism_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 :(得分:0)
您可能想尝试设置不带尾随URI部分的proxy_pass指令&#39; /&#39;,如下所示:
proxy_pass http://backend;
如果您指定了URI,则会在发送到您的后端node.js应用程序的请求中使用它。 node.js不会收到/room/create
的请求,而是会收到您的proxy_pass设置所定义的/
请求。
有关详细信息,请参阅nginx proxy_pass文档:http://wiki.nginx.org/HttpProxyModule#proxy_pass