Nginx向ExpressJS转发真实IP地址

2020-04-02 21:38:15

其他的配置都可以,但是我用req.ip并没有获得用户的真实ip。

用的其他方法,在文章最后。

由于服务器配置了Nginx的反向代理,在ExpressJS中无法获取到真实的IP地址。本文就介绍了如何配置Nginx以及ExpressJS使其可以显示用户的真实地址。

Nginx中的配置

修改你的配置文件

server {    listen       80;    server_name  XXX.YYY.ZZZ;    location / {        proxy_set_header  Host $host;        proxy_set_header  X-Real-IP $remote_addr;        proxy_set_header  X-Forwarded-Proto https;        proxy_set_header  X-Forwarded-For $remote_addr;        proxy_set_header  X-Forwarded-Host $remote_addr;        proxy_pass    http://127.0.0.1:3003/;

    }
}

重要的部分就是proxy_set_header部分。

ExpressJS中的设置

app.js中的靠前位置,添加:

app.set('trust proxy', 'loopback');

搞定

通过上述的设置,现在你使用req.ipreq.ips就可以获取到用户真实的IP地址了。

资料

获取用户真实ip

let getClientIp = function (req) {
    return req.headers['x-forwarded-for'] ||
        req.connection.remoteAddress ||
        req.socket.remoteAddress ||
        req.connection.socket.remoteAddress || '';
};
 
console.log(getClientIp(req));
let ip = getClientIp(req).match(/\d+.\d+.\d+.\d+/);
console.log(ip);
ip = ip ? ip.join('.') : null;
console.log(ip);


  • 2019-08-28 22:45:02

    彻底搞懂Gradle、Gradle Wrapper与Android Plugin for Gradle的区别和联系

    Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。

  • 2019-08-30 21:53:51

    OpenSSL实践-Android下的编译和使用

    openssl可以编译成ARM下面的二进制代码(动态库或者静态库),方便APP使用,APP在使用的时候,需要使用JNI来进行调用。

  • 2019-08-31 14:05:00

    JNI Crash:异常定位与捕获处理

    在Android JNI开发中,经常会遇到JNI崩溃的问题,尤其带代码量大,或者嵌入了第三方代码的情况下,很难进行问题定位和处理。本文将介绍两种常见的JNI崩溃处理方法,包括: 每个JNI调用后进行异常检测处理(适用于JNI代码量很小的情况) 捕获系统崩溃的Signal,并进行异常处理(适用于JNI代码量大,难以每句话后面都进行异常检测的情况)