【问题标题】:nginx to node.js - pass paramsnginx 到 node.js - 传递参数
【发布时间】:2013-07-06 04:32:48
【问题描述】:

我想通过 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 中传递的值?

【问题讨论】:

    标签: node.js parameters nginx proxypass


    【解决方案1】:

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

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

    并在您的快速路由处理函数中读取它,

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

    但是,如果您解释了您要解决的较大问题以及您认为需要通过的具体值,我们可以提供具体帮助。您很可能在解决已解决的问题时表现不佳。我还没有看到任何需要这种设置的实际用例。

    【讨论】:

    • 我认为这会很有帮助。场景是,我将不同的配置文件路径传递给服务器,因为配置文件没有存储在 /var/www/ 中,而是存储在 /etc/ 中。 NGINX 配置本身会处理这个问题,因此我可以拥有不同的开发配置(dev、staging 等) - 并直接通过 NGINX conf 引导它们。
    • 该死,我只是想用节点,它没有太多意义。在 PHP 中确实如此,因为每次调用都是整个过程 - 但对于节点,我应该使用参数启动它。
    • 是的,在节点中,约定是只使用一个简单的配置文件(.js 或 .json)或环境变量。
    • 当然,我有 - 但我想在 NGINX 之外定义配置路径(配置文件的路径),以便能够在需要时将其更改为不同的设置。我现在设法做到了,我正在处理一个新的命令行参数 --config=/path/ now
    【解决方案2】:

    默认情况下将传递任何参数,您只需在节点中自行处理路由。

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

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

    然后测试一下,url:http://example.com/user/23?foo=bar&hello=world
    它将输出:

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

    【讨论】:

    • 你的意思是 GET 参数,对吧?我实际上并不是在谈论 GET 参数,而是在谈论“内部”参数——如果我使用了错误的措辞,我不知道。我指的是 NGINX 配置文件条目。 (例如某条路径等)
    • GET参数为query
    猜你喜欢
    • 2022-01-21
    • 2018-04-29
    • 2019-06-05
    • 1970-01-01
    • 2020-07-10
    • 2020-10-20
    • 1970-01-01
    • 2021-07-22
    • 2011-10-26
    相关资源
    最近更新 更多