nginx反向代理的日志IP问题

发布于 2021-11-17 18:15:27 字数 1512 浏览 945 评论 5

目前两台服务器,一台是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

感情旳空白 2021-11-22 09:51:48

正解,在驱动层才能做到。

清晨说ぺ晚安 2021-11-22 07:20:16

如nginx连真正的服务器时,能提供真正客户端的ip,就全模拟了

可惜tcp的连接者ip不容易改。。。。

坐在坟头思考人生 2021-11-22 02:24:04

取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();
}

为你鎻心 2021-11-21 23:36:23

取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();
}

眼眸 2021-11-21 22:54:21

好吧解决了。用的是apache的mod_rpaf模块,第二台apache其实也有这个模块,但是没配正确。

默认配置是RPAFproxy_ips 127.0.0.1,ip改成nginx所在服务器就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文