`
happyqing
  • 浏览: 3187724 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nginx ip_hash获取真实源IP ngx_http_realip_module模块

阅读更多

原文:http://leo108.com/pid-2132.asp

 

 

realip模块的作用是:当本机的nginx处于一个反向代理的后端时获取到真实的用户IP。

如果没有realip模块,nginx的access_log里记录的IP会是反向代理服务器的IP,PHP中$_SERVER['REMOTE_ADDR']的值也是反向代理的IP

而安装了realip模块,并且配置正确,就可以让nginx日志和php的REMOTE_ADDR都变成真实的用户IP。

举一个最简单的例子,网络架构如图:



 

如果不做任何配置,后端web服务器nginx日志里记录的IP将会是10.10.10.10,这个时候我们增加如下nginx配置:

 

set_real_ip_from  10.10.10.10;

real_ip_header    X-Forwarded-For;

set_real_ip_from指令是告诉nginx,10.10.10.10是我们的反代服务器(信任服务器,记住这个名词,下面会提到),不是真实的用户IP,real_ip_header则是告诉nginx真正的用户IP是存在X-Forwarded-For请求头中(对X-Forwarded-For不了解的同学请自行百度)。

 

重新加载nginx配置之后,就可以看到nginx日志里记录的IP就是123.123.123.123了,php里的REMOTE_ADDR也是123.123.123.123。

 

realip模块还提供了另外一个指令real_ip_recursive,可以用来处理更加复杂的情况,架构如图:



 

这个时候如果还用上面的配置,后端nginx的日志里显示的IP就变成了192.168.1.10了,这个时候就需要real_ip_recursive这个指令了。

 

set_real_ip_from  10.10.10.10;

set_real_ip_from  192.168.1.10;

real_ip_header    X-Forwarded-For;

real_ip_recursive on;

官网文档对于real_ip_recursive指令的解释十分拗口,看了老半天才明白

 

首先要明确一点,realip模块生效的前提是:直接连接nginx的ip是在set_real_ip_from中指定的。

 

当real_ip_recursive为off时,nginx会把real_ip_header指定的HTTP头中的最后一个IP当成真实IP

 

当real_ip_recursive为on时,nginx会把real_ip_header指定的HTTP头中的最后一个不是信任服务器的IP当成真实IP

 

在这个例子中,当请求到达后端web服务器时,X-Forwarded-For应该是123.123.123.123, 10.10.10.10。如果real_ip_recursive为off,nginx取X-Forwarded-For的最后一个IP也就是10.10.10.10作为真实IP。如果real_ip_recursive为on,由于10.10.10.10是信任服务器IP,所以nginx会继续往前查找,发现123.123.123.123不是信任服务器IP,就认为是真实IP了。

 

Module ngx_http_realip_module

http://nginx.org/en/docs/http/ngx_http_realip_module.html

 

nginx平滑升级添加模块

http://happyqing.iteye.com/blog/2357239

 

如果获取的源IP总变,有个时候是上级代理服务器的IP,有的时候是客户端真实IP,建议添加

real_ip_recursive on;

 

  • 大小: 15.2 KB
  • 大小: 16.7 KB
分享到:
评论

相关推荐

    Nginx安装url_hash插件.doc

    进入Nginx源码目录,配置并编译Nginx,确保指定`--with-http_realip_module`选项,以及包含url_hash模块的路径。 ``` cd nginx-0.7.57 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module -...

    Nginx安装+nginx_upstream_check_module后端健康检查

    - **--with-http_realip_module**: 启用真实IP地址模块。 - **--with-http_image_filter_module**: 启用图像处理模块。 - **--add-module**: 添加第三方模块。 #### 三、配置Nginx.conf **3.1 编辑配置文件** ...

    linux下nginx+tomcat使用redis进行session共享所需jar包

    ip_hash; # 使用IP哈希实现Session粘滞 } server { listen 80; server_name example.com; location / { proxy_pass http://tomcat_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $...

    nginx全套插件包.rar

    2. **ngx_http_realip_module**:这个模块用于获取客户端真实IP,当Nginx作为反向代理时,能识别经过多级代理后的原始客户端IP。 3. **ngx_http_gzip_static_module**:支持直接从硬盘返回预压缩的GZIP文件,提高对...

    nginx-1.13.2.zip的安装包

    - ngx_http_upstream_hash_module:基于哈希的负载均衡策略。 **六、Nginx 与 PHP 的整合** 通过安装 PHP-FPM(FastCGI 进程管理器),Nginx 可以与 PHP 配合工作,处理动态PHP请求。配置如下: ```nginx location ...

    Nginx深入详解之upstream分配方式.docx

    注意,公平算法通常需要安装第三方模块(如 `ngx_http_upstream_fair_module`)才能使用。 5. **URL哈希(url_hash)**:也由第三方模块提供,根据请求的 URL 的哈希值决定将请求分配给哪个服务器,常用于缓存服务...

    nginx负载均衡部署

    例如,可以使用第三方模块如`ngx_http_upstream_hash_module`实现基于请求URI或客户端IP的哈希负载均衡,确保同一用户请求总是被定向到同一台服务器,适用于会话持久化的需求。 此外,Nginx还支持健康检查,通过...

    linux/centos 安装配置nginx 详细文档

    # See http://nginx.org/en/docs/ngx_core_module.html#include for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; server_name...

    负载均衡ngnix下载

    5. **其他策略**:还可以自定义负载均衡算法,或者使用第三方模块如`ngx_http_upstream_hash_module`实现基于URL哈希的负载均衡等。 **Nginx-1.9.12版本** Nginx的1.9.12版本发布于2016年,这个版本包含了多项改进...

    Nginx 实现灰度发布的三种方法总结

    在这个配置中,`ip_hash` 指令确保相同客户端IP的请求总是被发送到同一台后端服务器,这有助于保持会话状态。权重越高,服务器接收的请求越多,反之则越少。 ### 方法二:使用 Nginx + Lua 实现灰度发布 通过在 ...

    运维142问不看一定后悔

    22. **nginx负载均衡模块**:如`ngx_http_upstream_module`,处理上游服务器的连接。 23. **负载均衡实现方式**:硬件负载均衡器、软件负载均衡器(如LVS、HAProxy、Nginx等)。 24. **nginx四层负载**:通过修改...

Global site tag (gtag.js) - Google Analytics