如何配置nginx服务器将请求转发到具有空路径的节点服务器?

时间:2017-09-30 03:35:55

标签: node.js express nginx nginx-location proxypass

我有一个具有以下配置的Nginx服务器:

server
{
    listen 80;
    server_name example.ca www.example.ca;
    location / {

proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

并在节点服务器上使用node express监听端口3000,如下所示;

app.get('*', function (req, res) {
  console.log(' request received ', req.headers.host);
});

我有一个域名www.example.com,它指向Nginx服务器IP,我正在做的测试是:

  

http://www.example.com/test结果===>收到请求   www.example.com

     

http://www.example.com/test/abc结果===>收到请求   www.example.com

     

http://www.example.com结果===> (我得不到结果!!它就像   app.get没有触发)

在这个问题上,任何人都可以帮助我吗?当我在没有任何路径参数的情况下浏览域时没有得到任何结果,所以它就像Nginx没有将此请求转发给节点服务器!!

1 个答案:

答案 0 :(得分:0)

首先,当您使用浏览器或卷曲浏览abc.com时,它始终会将路径发送为/。无法发送空白路径

接下来你的nginx配置是一个socket.io实现。它应该低于

server
{
    listen 80;
    server_name example.ca www.example.ca;
    location / {
       proxy_pass http://127.0.0.1:3000;
       proxy_http_version 1.1;
       proxy_set_header Host $host;
    }
}

接下来,您没有结束您的请求,他们将会超时。将您的代码更改为

app.get('*', function (req, res) {
  console.log(' request received ', req.headers.host);
  res.status(200).send("all ok");
});

此外,如果您遇到问题,可以使用下面的curl进行测试

curl -v http://www.example.com