`

Nginx作为反向代理时传递客户端IP的设置方法

 
阅读更多

nginx默认配置文件里面是没有进行日志转发配置的,这个需要我们自己手动来操作了,当然后端的real server不同时操作方法是不一样的,这里我们分别例举几种情况来说明一下。

nginx做前端,转发日志到后端nginx服务器:

因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。
同样适用于前端是 Squid 或者其他反向代理的情况。

首先前端的 Nginx 要做转发客户端 IP 的配置:

 
location / {
  
# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}

后端的 Nginx 需要安装一个 Module: NginxHttpRealIpModule,编译的时候默认不包含此 Module,需要重新编译安装 Nginx,configure 的时候加上 –with-http_realip_module,Nginx 升级或者添加/删除 Module 时支持热切换,可以避免中断服务。

升级后配置 NginxHttpRealIpModule,set_real_ip_from 就是指前端 Nginx 或者 Squid 的 IP:

 
 
location / {
  
# Forward the user's IP address to Rails
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
# proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
# NginxHttpRealIpModule
set_real_ip_from 192.168.1.0/24;
set_real_ip_from 192.168.2.1;
real_ip_header X-Real-IP;
}

最后记得 reload Nginx config

nginx做前端,转发日志到后端apache服务器:

apache日志中默认有%h来指定来访客户端你的ip地址,但是使用了nginx代理上网则%h获得的ip地址会不准。
这就需要对nginx 和apache的配置文件设定 X-Forwarded-For 参数来获取客户端真实的ip地址。对于使用了反向代理的客户端,跟踪真实的ip地址。
/usr/nginx/conf/nginx.conf 添加以下参数:

1
2
3
4
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;

同时修改:

 
server {
   listen 80;
   server_name 域名 ;
   proxy_redirect off;
    location / {
     proxy_set_header  X-Forwarded-For $remote_addr;
     proxy_set_header  X-Forwarded-Host $server_name;
     proxy_set_header Host $host;
     proxy_pass http://域名;
   }
   access_log off;
 }

重启nginx使配置生效。
 
apache端需要安装一个第三方模块"mod_rpaf"了, 官方网站: http://stderr.net/apache/rpaf/

 
tar zxvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
/opt/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

修改apache配置 /usr/apache2/conf/httpd.conf

 
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips ip地址  #Nginx所在服务器的IP
RPAFheader X-Forwarded-For

重启apache 查看日志就可以看见日志中已经获得到真实ip了。

nginx做前端,转发日志到后端IIS服务器:

  iis 如果放在反向代理后面,日志里的ip是反向代理服务器的ip,不是真正用户的ip,想要记录用户的ip要做两件事。

1.在反向代理设置X-Forwarded-For段,以下为nginx下的配置示例:

 
server
  location
  {
  ……
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  ……
  }

2.在iis站点上安装下面这个isapi filter,这东西是在f5的开发论坛上找到的,按开发者的话说,是为了解决iis放在f5后记录不到用户ip的问题,-_-# 管他前端是f5还是nginx还是squid还是haproxy。都可以用。应该不错。装完之后重启下iis就搞定了。
   http://devcentral.f5.com/weblogs/Joe/archive/2009/08/19/x_forwarded_for_log_filter_for_windows_servers.aspx
   回头看下iis的日志,里面的ip已经是用户的真实ip了。

 

分享到:
评论

相关推荐

    nginx做反向代理时的真实IP_nginx反向代理_

    2. **X-Real-IP 头部**:为了解决这个问题,Nginx支持通过HTTP头部传递客户端IP。后端服务器可以检查`X-Real-IP`头部来获取真实IP。当Nginx接收到客户端请求时,我们可以配置Nginx将客户端IP添加到`X-Real-IP`头部,...

    windows下配置nginx反向代理tomcat

    - **`proxy_set_header X-Real-IP $remote_addr`**:设置 `X-Real-IP` 头部字段,用于传递客户端的真实 IP 地址。 - **`proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for`**:设置 `X-Forwarded-For` ...

    nginx反向代理服务

    【Nginx反向代理服务】是网络服务器配置中的一个重要概念,主要应用于负载均衡和安全性增强。Nginx是一款高性能的HTTP和反向代理服务器,以其高效、稳定和低内存占用而闻名。在Linux系统中部署Nginx,可以极大地提升...

    Nginx1.2.7 for windows反向代理配置

    `proxy_set_header`这两行设置了两个重要的HTTP头,`X-Real-IP`用于传递客户端的真实IP,`X-Forwarded-For`记录经过代理服务器的完整请求链路。 在完成配置修改后,记得启用Nginx的日志功能。找到配置文件中`error_...

    Nginx反向代理工作原理简介与配置详解-李雄

    本文将深入介绍Nginx反向代理的工作原理,并提供详细的配置步骤。 首先,理解反向代理的概念至关重要。在传统的正向代理中,用户通过代理服务器访问目标网站,代理服务器隐藏了真实用户的IP地址。而在反向代理中,...

    nginx四层代理测试 及SLB负载均衡功能配置测试

    这是因为nginx 四层代理不会将客户端的IP地址设置到x-forwarded-for头中,而是将自己的IP地址设置到x-forwarded-for头中。 二、SLB负载均衡功能测试 SLB(Server Load Balancer)是指一种负载均衡技术,可以将...

    Nginx 反向代理工作原理简介与配置详解 - 李雄

    本文将深入探讨Nginx反向代理的工作原理,并提供详细的配置教程。 一、Nginx反向代理工作原理 1. 基本概念:反向代理是指客户端请求到达Nginx服务器后,Nginx不直接处理请求,而是将其转发到后端的真实服务器上。...

    squid和nginx配置正向代理访问API接口.rar

    5. 安全性:同样可以使用 Nginx 的访问控制模块限制允许的客户端IP。 6. 重启 Nginx:保存配置并重启服务以应用更改。 在实际应用中,你可能还需要考虑其他因素,如缓存策略(对于提高性能)、SSL/TLS 加密(确保...

    nginx反向代理相关文件.rar

    "nginx反向代理相关文件.rar"这个压缩包很可能包含了一些配置文件、文档或者示例,用于帮助我们理解和设置Nginx的反向代理功能。下面将详细阐述Nginx反向代理的相关知识点。 首先,了解什么是反向代理。在Web服务...

    nginx-1.10.2_海康;javascript_nginx/1.10.2_nginx转发海康_

    在描述中提到的"海康摄像头实时预览通过nginx反向代理",意味着我们需要设置Nginx服务器作为反向代理,将来自客户端的请求转发到海康摄像头的流媒体服务器,以便用户可以通过Web浏览器实时查看摄像头的视频流。...

    Redis+nginx集群部署

    **描述:**在本实践中,我们将结合Tomcat应用服务器、Nginx反向代理服务器以及Redis作为会话存储来建立一个高可用、负载均衡的Web集群。Nginx负责将用户请求分发到各个Tomcat实例,而Redis则用来解决跨服务器的...

    Nginx反向代理服务器配置基础教程[定义].pdf

    这将把所有对`/`的请求转发到`http://backend_server`,同时传递客户端的主机名和真实IP地址给后端服务器。 总之,Nginx反向代理服务器的配置涉及到系统环境的准备、依赖包的安装、用户和目录的创建,以及Nginx的...

    nginx负载均衡和反向代理部署.docx

    **Nginx反向代理** 反向代理是Nginx的另一重要特性,它工作在应用服务器与用户之间。用户访问时,请求首先到达Nginx服务器,Nginx根据配置决定将请求转发到哪个真实的后端服务器。这样做的好处包括: 1. **隐藏...

    反向代理服务器Nginx.7z

    在配置Nginx反向代理时,主要涉及以下几个关键概念和配置指令: 1. **server**:这是Nginx配置的基本单位,代表一个监听特定端口的服务器。例如: ``` server { listen 80; server_name example.com; } ``` ...

    Linux系统nginx部署及反代理(内含安装包)

    在本教程中,我们将重点讨论Nginx在Linux系统上的部署和反向代理设置。 **二、Linux系统环境准备** 在开始部署前,确保你的Linux系统是最新的,并且安装了必要的开发工具和依赖库,例如GCC编译器、pcre库、openssl...

    基于Nginx 反向代理获取真实IP的问题详解

    解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中。同时,也要修改获取IP地址的方法。 但是需要注意的是,通过Nginx反向代理后,如果访问IP通过了几层代理,...

    Nginx端口映射配置方法

    Nginx作为高性能的反向代理服务器,常用于实现这一功能。以下是关于Nginx端口映射配置的详细解释和实践步骤。 首先,理解端口映射的背景。传统的Web服务器如Nginx或Apache会直接处理HTTP请求,并根据配置解析到相应...

    nginx配置fidller代理

    `proxy_set_header`指令用来传递客户端的原始信息到后端服务器,以确保通信的正常进行。 接着,我们关注Fiddler的代理设置。Fiddler默认会捕获本机的所有HTTP(S)通信,但若要让其他机器通过Nginx代理到Fiddler,...

Global site tag (gtag.js) - Google Analytics