nginx做负载均衡,backend分别是apache和nginx时取得client真实ip的方法:
1.apache做backend
将apache日志格式中%h替换为%{X-Forwarded-For}i 既可以或者%{x-real-ip}i
前提是都要在做负载均衡的nginx上配置好Forwarded-For x-real-ip的取值,有1个既可以。
网上还有一种方式是加载apache的一个模快如下
首先安装
# tar zxvf mod_rpaf-0.6.tar.gz
# cd mod_rpaf-0.6
# /usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
接 着在 httpd.conf中添加
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
# 填写Nginx的来访IP
RPAFheader X-Forwarded-For
### 但是我没有测试通过
2.nginx作为后端时
需要在做负载的nginx上配置
proxy_set_header X-Real-IP $remote_addr; # backend nginx对应日式格式 $http_x_real_ip
或proxy_set_header X-Forwarded-For $remote_addr; # 同上$http_x_forwarded_for
这样后端的nginx就取得了正确的client ip地址。