node.js-如何在nginx中获取server_name用作节点中的服务器变量

我有多个域名使用nginx指向同一节点服务器.节点服务器需要知道它正在为当前请求运行的域.我如何传递这些信息.

每个域的Nginx设置:

server {

    listen 443;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/mydomain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain/privkey.pem;


    server_name mydomain;

    location / {
        proxy_pass http://localhost:3010;
        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;
    }
}

节点在新贵中运行,但这可能无关紧要.我如何在命令行上运行节点,以便可以将mydomain用作环境变量.我目前以:

NODE_PATH=./src NODE_ENV=production PORT=3010 APIPORT=3012 /node/path/node bin/server.js >> /log/path/mydomain.log 2>&1
最佳答案
如果要传递环境变量,则必须以以下方式运行节点应用程序:

NODE_PATH=./src NODE_ENV=production SERVER_NAME=servername PORT=3010 APIPORT=3012 /node/path/node bin/server.js >> /log/path/mydomain.log 2>&1

它将以process.env.SERVER_NAME的形式提供,但那样您就必须对服务器名称进行硬编码.它必须在Node应用程序启动期间进行设置,并且不能由nginx定义,因为它不是nginx在启动Node应用程序.

但是,除了将其作为环境变量传递之外,您还可以将其从nginx作为HTTP头传递.您可以使用:

proxy_pass_header Server;

或者,如果这还不够,您可以使用类似以下内容的方法:

proxy_set_header ServerName $server_name;

将自定义标头传递给Node并进行访问-例如在Express中:

var serverName = req.header('ServerName');

转载注明原文:node.js-如何在nginx中获取server_name用作节点中的服务器变量 - 代码日志