nginx到node.js - 传递params

时间:2013-07-05 07:43:34

标签: node.js parameters nginx proxypass

我想通过nginx将某些参数传递给nodejs。

虽然我仍然使用fastcgi,但我可以这样做:

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_script_name;

现在我基本上都在为node.js

搜索完全相同的功能

这将是我目前的配置:

server {
    # ... other stuff ...

    location / {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        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://node;
        proxy_redirect off;

        # pass any parameter here
    }

}

upstream node {
        server  127.0.0.1:8080;
}

我怎样才能做到这一点? - 而且,我如何读取node.js中传递的值?

2 个答案:

答案 0 :(得分:4)

直接解决您的问题的简短答案,在您的nginx配置中,添加如下行:

proxy_set_header X-My-Custom-Param-1 $whatever_variable_you_want_to_pass;

并在您的快速路线处理函数中读取

req.get('X-My-Custom-Param-1');

但是,如果您解释了您尝试解决的较大问题以及您认为需要通过的具体价值,我们可以提供具体的帮助。你可能很难解决一个解决问题的方法。我还没有看到任何真实世界的用例需要这样的设置。

答案 1 :(得分:0)

默认情况下会传递任何参数,您只需要自己处理节点中的路由。

请查看express.js,因为它允许使用regexp(如果需要)定义非常灵活的路线。
请记住,express中的paramsquery数据(PHP中的$ _GET)不同。由于query数据位于网址中的问号之后,但params在路线中定义 例如:

app.get('/user/:id', function(req, res, next) {
  res.send({
    params: req.params
    query: req.query
  }); // will respond with json object with 'id'
});

然后使用网址http://example.com/user/23?foo=bar&hello=world来测试它 它将输出:

{
  params: {
    id: 23
  },
  query: {
    foo: 'bar',
    hello: 'world'
  }
}