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了。
相关推荐
如何取得 nginx 做反向代理时的真实 IP
nginx多网站反向代理
两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...
Nginx反向代理服务器配置基础教程
本资源是专门针对本博文的, nginx的反向代理的简单配置文件,给大家使用时做参考,拿走不谢,怎么一定要50字呢?
同一ip(都是80端口)可以绑定无数个域名 配置简单 里面包含一个配置文档:配置文档.doc 看一遍 大部分人都会设置了。 内容如下: NGNIX配置文档 1.解压文件到相应文件夹下(我解压到D:/下) (这里是图片) 目录...
然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给...
使用Nginx搭建反向代理,图文并茂,附配置文件。
Nginx构建反向代理缓存服务器电子书,电子书很详细的介绍了nginx构建反向代理的过程与知识
(1)使用Nginx反向代理,根据访问的路径跳转到不同端口的服务中,Nginx监听端口为8001。 访问 http://127.0.0.1:9001/deu/ 直接跳转到127.0.0.1:8016 访问 http://127.0.0.1:9001/vod/ 直接跳转到127.0.0
此文比较详细讲述了Nginx与proxy共同搭建反向代理服务的配置方法
https服务器nginx反向代理配置,SSL连接下的域名访问应用服务器配置
nginx1.6的安装 tomcat7的安装(包括jdk7) nginx+tomcat反向代理配置
获取客户端真实IP(支持代理服务器)
本文给大家分享的是nginx实现正向代理和反向代理的具体方法配置以及不同的实例情况,非常的详细,希望大家能够喜欢
尝试将 C2 隐匿于多级 nginx 反向代理关于利用多级 nginx 反代实现 beacon 上线的大致思路拓扑大致思路是这样,首先,我们会用一个 CS 的外
Nginx搭建反向代理服务器,在如今大数据应用比较广泛的过程中, Nginx的应用也是及其重要的,尤其是搭建负载均衡服务器,反向代理等。
nginx反向代理配置 动静分离不错的代理
作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last. fm 描述了成功并且美妙的使用经验。 Nginx 是一个安装非常的简单,配置文件非常...