nginx反向代理的日志IP问题
目前两台服务器,一台是apache+nginx(tengine),nginx做负载均衡,另一台就apache。
本地apache日志记录的是用户ip,另一台服务器apache日志却是显示代理服务器的IP。
nginx配置如下
upstream backend{ server 127.0.0.1:88 weight=2; server 10.200.18.200:88 weight=1; ip_hash; } server { listen 80; server_name xxxxx; root /xxxxx; index index.html index.php index.htm; location ~ .php$ { proxy_pass http://backend; include naproxy.conf; } location / { try_files $uri @apache; } location @apache { proxy_pass http://backend; include naproxy.conf; } }其中naproxy.conf内容如下
proxy_connect_timeout 30s; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 32k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_redirect off; proxy_hide_header Vary; proxy_set_header Accept-Encoding ''; proxy_set_header Host $host; proxy_set_header Referer $http_referer; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_intercept_errors on;
而两台服务器上的apache的配置是一样的。
不知道这问题出在哪里?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
正解,在驱动层才能做到。
如nginx连真正的服务器时,能提供真正客户端的ip,就全模拟了
可惜tcp的连接者ip不容易改。。。。
取IP方法的代码要修改,java是这么干的
String ip = request.getHeader("X-Real-IP");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
return request.getRemoteAddr();
}
取IP方法的代码要修改,java是这么干的
String ip = request.getHeader("X-Real-IP");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
return request.getRemoteAddr();
}
好吧解决了。用的是apache的mod_rpaf模块,第二台apache其实也有这个模块,但是没配正确。
默认配置是RPAFproxy_ips 127.0.0.1,ip改成nginx所在服务器就可以了