原文: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;
相关推荐
进入Nginx源码目录,配置并编译Nginx,确保指定`--with-http_realip_module`选项,以及包含url_hash模块的路径。 ``` cd nginx-0.7.57 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module -...
- **--with-http_realip_module**: 启用真实IP地址模块。 - **--with-http_image_filter_module**: 启用图像处理模块。 - **--add-module**: 添加第三方模块。 #### 三、配置Nginx.conf **3.1 编辑配置文件** ...
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 $...
2. **ngx_http_realip_module**:这个模块用于获取客户端真实IP,当Nginx作为反向代理时,能识别经过多级代理后的原始客户端IP。 3. **ngx_http_gzip_static_module**:支持直接从硬盘返回预压缩的GZIP文件,提高对...
- ngx_http_upstream_hash_module:基于哈希的负载均衡策略。 **六、Nginx 与 PHP 的整合** 通过安装 PHP-FPM(FastCGI 进程管理器),Nginx 可以与 PHP 配合工作,处理动态PHP请求。配置如下: ```nginx location ...
注意,公平算法通常需要安装第三方模块(如 `ngx_http_upstream_fair_module`)才能使用。 5. **URL哈希(url_hash)**:也由第三方模块提供,根据请求的 URL 的哈希值决定将请求分配给哪个服务器,常用于缓存服务...
例如,可以使用第三方模块如`ngx_http_upstream_hash_module`实现基于请求URI或客户端IP的哈希负载均衡,确保同一用户请求总是被定向到同一台服务器,适用于会话持久化的需求。 此外,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...
5. **其他策略**:还可以自定义负载均衡算法,或者使用第三方模块如`ngx_http_upstream_hash_module`实现基于URL哈希的负载均衡等。 **Nginx-1.9.12版本** Nginx的1.9.12版本发布于2016年,这个版本包含了多项改进...
在这个配置中,`ip_hash` 指令确保相同客户端IP的请求总是被发送到同一台后端服务器,这有助于保持会话状态。权重越高,服务器接收的请求越多,反之则越少。 ### 方法二:使用 Nginx + Lua 实现灰度发布 通过在 ...
22. **nginx负载均衡模块**:如`ngx_http_upstream_module`,处理上游服务器的连接。 23. **负载均衡实现方式**:硬件负载均衡器、软件负载均衡器(如LVS、HAProxy、Nginx等)。 24. **nginx四层负载**:通过修改...