获取用户的真实IP

Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离。

目前互联网公司基本上都采用这种架构方式:

用户的请求并不是直接和Nginx交互,而是通过了CDN加速平台。默认情况下,Nginx看到的$remote_addr是CDN的IP,这对日志的记录和分析,还有后端的业务逻辑都可能产生不良的影响,如果需要获取到用户的真实IP呢,这个时候realip模块就起到了作用。

此模块需要编译时开启:

--with-http_realip_module

在Nginx的HTTP块里面配置:

set_real_ip_from CDN_IP;

real_ip_header X-Forwarded-For;

real_ip_recursive on;

   

     set_real_ip_from

设置哪些IP是可信任的,从这些IP进行获取请求头信息,这些IP就配置为CDN的IP白名单。

    real_ip_header

定义从哪个请求头获取IP信息,其值将用于替换客户端地址。一般都使用X-Forwarded-For。

    real_ip_recursive

如果启用递归搜索,将会对可信任的IP匹配,原始客户端地址将替换为在请求头域中发送的最后一个不可信地址。如果禁用递归搜索,则从白名单中由real_ip_header指令定义的请求头中的最后一个地址替换。

通过此方式就可以获取到CDN传递给Nginx的用户的IP。那么问题来了,$remote_addr被替换成了用户的IP,有些时候我们也希望获取到CDN 的节点IP,这对于排查一些和CDN有关的问题是由帮助的。可以使用$realip_remote_addr,它可以保留原始客户端地址。 (1.9.7版本新增的变量)

深入nginx之《获取用户的真实IP》的更多相关文章

  1. 深入Nginx之《常用参数配置技巧》

    常见参配置实战技巧 下面会讲解实战中应该怎么配置更为合理. 1.user 默认是nobody,如果使用nobody,Nginx在运行过程中会出现很多操作没有权限,比如写硬盘.一般都是用低于root级别 ...

  2. Production环境中iptables常用参数配置

    production环境中iptables常用参数配置 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我相信在实际生产环境中有很多运维的兄弟跟我一样,很少用到iptables的这个 ...

  3. Nginx代理常用参数

    目录 一:Nginx代理常用参数 1.添加发往后端服务器的请求头信息 二:参数案例 1.lb01配置文件 2.web01 web02 web服务器 3.测试 4.重启 5.DNS域名解析 6.网址测试 ...

  4. [效果不错] nginx 高并发参数配置及linux内核参数优化,完整的内核优化设置。PHP-FPM高负载解决办法。

    背景:对vps小资源的实践中对,https://justwinit.cn/post/7536/ 的再优化,再实践,再优化,特别是Nginx,PHP,内核: 零)Nginx: error_log /da ...

  5. Weblogic内存溢出及常用参数配置

        http://www.360doc.com/content/14/0306/14/16134804_358216319.shtml 一.WebLogic内存溢出 最近访问量门户访问量突然增大, ...

  6. Nginx之常用基本配置(三)

    前面我们聊了下了Nginx作为WEB服务器对客户端请求相关配置,文件操作优化.Nginx访问控制.basic验证,.状态模块状态页.gzip压缩配置:回顾请参考https://www.cnblogs. ...

  7. Nginx基础 - 常用模块配置

    1.Nginx状态监控http_stub_status_module记录Nginx客户端基本访问状态信息 location /mystatus { stub_status on; access_log ...

  8. [Hive_add_8] Hive 常用参数配置

    0. 说明 记录 Hive 常用参数的配置 1. 设置本地模式 让 Hive 自动使用 Hadoop 的本地模式运行作业,提升处理性能 适合小文件,一般用于测试 set hive.exec.mode. ...

  9. logback 常用参数配置详解

    logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写 ...

  10. Nginx之常用基本配置

    上一篇博客我们大概介绍了一下nginx,nginx的架构,nginx编译安装和nginx命令的用法,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/1236680 ...

随机推荐

  1. 配置/更改vue项目中的资源路径

    打开 build/webpack.base.conf.js  ,在module.exports .resolve.alias下自定义: alias: { 'vue$': 'vue/dist/vue.e ...

  2. redux的知名ppt

    https://slides.com/jenyaterpil/redux-from-twitter-hype-to-production#/20

  3. 第3章 Spring AOP

    3.1 Spring AOP简介 3.11什么是AOP? AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程).它是面向对象编程(OOP)的一种补充 ...

  4. python-随机生成验证码实例

    需求:随机生成验证码, 思路: 1.生成一个随机数,65-90 2.数字转化为字母:chr(数字) #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...

  5. presto-gateway 试用以及docker 镜像制作

    presto-gateway 是 lyft 团队开源 的prestodb 的工具.以下是一个简单的试用,以及碰到问题的解决 还有就是docker 镜像的制作 Dockerfile 很简单,本地构建然后 ...

  6. PHP常用的魔术方法及规则

    1. __construct 具有构造函数的类会在每次创建新对象时先调用此方法;初始化工作执行.2. __desstruct 对象的所有引用都被删除或者当对象被显式销毁时执行.3.__call()在对 ...

  7. vscode中配置C#环境

    安装.Net Core SDK 如果已经安装了SDK的话则可以跳过这一步,不然需要安装SDK在进行环境配置:下载链接.NET CORE SDK下载: SDK安装完之后,软件执行界面如下所示 在vsco ...

  8. 【UVA1057】Routing

    [UVA1057]Routing 题面 洛谷 题解 有一个比较好想的dp就是\(f_{i,j}\)表示第一个点在\(i\),第二个点在\(j\)的最小点数,但是直接搞不好转移. 考虑建出反图,那么\( ...

  9. 小程序支持原生async方法

    下载最新版本的微信开发工具,社区链接https://developers.weixin.qq.com/community/develop/doc/00066877c54eb0ff5488b54885b ...

  10. 使用electron开发桌面级小程序自动部署系统

    那一天我二十一岁,在我一生的黄金时代,我有好多奢望.我想爱,想吃,还想在一瞬间变成天上半明半暗的云,后来我才知道,生活就是个缓慢受锤的过程,人一天天老下去,奢望也一天天消逝,最后变得像挨了锤的牛一样. ...