【问题标题】:NGINX as proxy of Node.jsNGINX 作为 Node.js 的代理
【发布时间】:2012-12-10 19:47:40
【问题描述】:

我在 NGINX 服务器后面使用 NODE.js,这是我的 Nginx 配置:

upstream example.it {
        server 127.0.0.1:8000;
}

server {
        server_name www.example.it;

        location / {
                proxy_pass      http://example.it;
                proxy_redirect  off;
                proxy_set_header   Host             $host;
                proxy_set_header   X-Real-IP        $remote_addr;
                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
}

一切正常,请求从 nginx 正确发送到节点但我在 Express.js 生成的日志文件中看到了问题。

问题是所有的请求从 127.0.0.1 保存为完成,为什么?

我没有看到任何删除主机(提出请求的真实 IP)。

谢谢

【问题讨论】:

    标签: node.js nginx express


    【解决方案1】:

    假设您使用的是 Express 3.0,更好的方法是通过 trust proxy 设置。

    来自Express documentation

    trust proxy启用反向代理支持,默认禁用

    为了使用它:

    app.set('trust proxy', true);
    app.use(express.logger('default'));
    

    这具有额外的优势,即当您使用代理时(例如在开发环境中)也能正常工作。

    【讨论】:

    • 您也可以有不同的登录设置,一个用于开发,一个用于生产,如下所示: // 开发设置 app.configure('development', function(){ app.use(express .logger('dev')); }); // 生产环境的设置 app.configure('production', function(){ app.set('trust proxy', true); app.use(express.logger('default')); });然后像这样更改您的环境变量(Linux/Unix)NODE_ENV=production PORT=3000 node app.js Windows:SET NODE_ENV=production && SET PORT=3000 && node app.js
    【解决方案2】:

    没错,因为 nginx 将是远程主机。您需要指定自定义日志格式来记录X-Forwarded-For 标头,请参阅connect logger documentation

    app.use(express.logger(':req[X-Forwarded-For] - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'));
    

    【讨论】:

    • 非常感谢您发布此信息。我通过谷歌搜索找到了它,以解决我刚才遇到的同样问题。
    猜你喜欢
    • 2021-07-09
    • 2018-10-24
    • 2014-03-31
    • 1970-01-01
    • 2021-09-15
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多