被代理后的express

如果express或者你的其它的程序的服务被nginx这样的代理服务器代理过后,在程序里拿hostname这样的信息的时候通常会得到一个ip地址,比如这样

req.get('hostname')		//127.0.0.1

这肯定不是我们想要的结果,那么怎么才能得到真实的地址呢。 首先需要再nginx转发的时候把这些信息带过来。

proxy_set_header   X-Forwarded-Proto $scheme;
proxy_set_header   Host              $http_host;
proxy_set_header   X-Real-IP         $remote_addr;

hostname也可以通过设置X-Forwarded-Host来获取

proxy_set_header   X-Forwarded-Host $scheme;

不过这时候就需要在express中设置信任的代理服务器ip地址

app.set('trust proxy', '123.123.123.123')

也可以通过一个回调返回boolean值来设置

app.set('trust proxy', function (ip) {
    if (ip === '127.0.0.1') return true; // trusted IPs
    else return false;
});

参考地址: <a href="http://expressjs.com/en/guide/behind-proxies.html" target="_blank">http://expressjs.com/en/guide/behind-proxies.html</a>