nginx默认配置文件里面是没有进行日志转发配置的,这个需要我们自己手动来操作了,当然后端的real server不同时操作方法是不一样的,这里我们分别例举几种情况来说明一下。
nginx做前端,转发日志到后端nginx服务器:
因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。
同样适用于前端是 Squid 或者其他反向代理的情况。
首先前端的 Nginx 要做转发客户端 IP 的配置:
location / { proxy_pass http://localhost:8000; # 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 / { proxy_pass http://localhost:8000; # 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了。
相关推荐
2. **X-Real-IP 头部**:为了解决这个问题,Nginx支持通过HTTP头部传递客户端IP。后端服务器可以检查`X-Real-IP`头部来获取真实IP。当Nginx接收到客户端请求时,我们可以配置Nginx将客户端IP添加到`X-Real-IP`头部,...
- **`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是一款高性能的HTTP和反向代理服务器,以其高效、稳定和低内存占用而闻名。在Linux系统中部署Nginx,可以极大地提升...
`proxy_set_header`这两行设置了两个重要的HTTP头,`X-Real-IP`用于传递客户端的真实IP,`X-Forwarded-For`记录经过代理服务器的完整请求链路。 在完成配置修改后,记得启用Nginx的日志功能。找到配置文件中`error_...
本文将深入介绍Nginx反向代理的工作原理,并提供详细的配置步骤。 首先,理解反向代理的概念至关重要。在传统的正向代理中,用户通过代理服务器访问目标网站,代理服务器隐藏了真实用户的IP地址。而在反向代理中,...
这是因为nginx 四层代理不会将客户端的IP地址设置到x-forwarded-for头中,而是将自己的IP地址设置到x-forwarded-for头中。 二、SLB负载均衡功能测试 SLB(Server Load Balancer)是指一种负载均衡技术,可以将...
本文将深入探讨Nginx反向代理的工作原理,并提供详细的配置教程。 一、Nginx反向代理工作原理 1. 基本概念:反向代理是指客户端请求到达Nginx服务器后,Nginx不直接处理请求,而是将其转发到后端的真实服务器上。...
5. 安全性:同样可以使用 Nginx 的访问控制模块限制允许的客户端IP。 6. 重启 Nginx:保存配置并重启服务以应用更改。 在实际应用中,你可能还需要考虑其他因素,如缓存策略(对于提高性能)、SSL/TLS 加密(确保...
"nginx反向代理相关文件.rar"这个压缩包很可能包含了一些配置文件、文档或者示例,用于帮助我们理解和设置Nginx的反向代理功能。下面将详细阐述Nginx反向代理的相关知识点。 首先,了解什么是反向代理。在Web服务...
在描述中提到的"海康摄像头实时预览通过nginx反向代理",意味着我们需要设置Nginx服务器作为反向代理,将来自客户端的请求转发到海康摄像头的流媒体服务器,以便用户可以通过Web浏览器实时查看摄像头的视频流。...
**描述:**在本实践中,我们将结合Tomcat应用服务器、Nginx反向代理服务器以及Redis作为会话存储来建立一个高可用、负载均衡的Web集群。Nginx负责将用户请求分发到各个Tomcat实例,而Redis则用来解决跨服务器的...
这将把所有对`/`的请求转发到`http://backend_server`,同时传递客户端的主机名和真实IP地址给后端服务器。 总之,Nginx反向代理服务器的配置涉及到系统环境的准备、依赖包的安装、用户和目录的创建,以及Nginx的...
**Nginx反向代理** 反向代理是Nginx的另一重要特性,它工作在应用服务器与用户之间。用户访问时,请求首先到达Nginx服务器,Nginx根据配置决定将请求转发到哪个真实的后端服务器。这样做的好处包括: 1. **隐藏...
在配置Nginx反向代理时,主要涉及以下几个关键概念和配置指令: 1. **server**:这是Nginx配置的基本单位,代表一个监听特定端口的服务器。例如: ``` server { listen 80; server_name example.com; } ``` ...
在本教程中,我们将重点讨论Nginx在Linux系统上的部署和反向代理设置。 **二、Linux系统环境准备** 在开始部署前,确保你的Linux系统是最新的,并且安装了必要的开发工具和依赖库,例如GCC编译器、pcre库、openssl...
解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中。同时,也要修改获取IP地址的方法。 但是需要注意的是,通过Nginx反向代理后,如果访问IP通过了几层代理,...
Nginx作为高性能的反向代理服务器,常用于实现这一功能。以下是关于Nginx端口映射配置的详细解释和实践步骤。 首先,理解端口映射的背景。传统的Web服务器如Nginx或Apache会直接处理HTTP请求,并根据配置解析到相应...
`proxy_set_header`指令用来传递客户端的原始信息到后端服务器,以确保通信的正常进行。 接着,我们关注Fiddler的代理设置。Fiddler默认会捕获本机的所有HTTP(S)通信,但若要让其他机器通过Nginx代理到Fiddler,...