1

我在同一台服务器上同时运行 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;
    }
}
4

1 回答 1

0

您可能想尝试设置没有尾随 URI 部分“/”的 proxy_pass 指令,如下所示:

proxy_pass http://backend;

如果您指定 URI,它将在发送到后端 node.js 应用程序的请求中使用。/room/createnode.js 将获得/由您的 proxy_pass 设置定义的请求,而不是对 的请求。

更多信息请查看 nginx proxy_pass 文档:http ://wiki.nginx.org/HttpProxyModule#proxy_pass

于 2013-06-24T12:00:48.400 回答