nginx获取客户端真实IP地址

假设公司网站架构为 client ---->nginx 负载均衡--->varnish 缓存---->nginx( web)----->tomcat 请问如何从 nginx(web)这一层的访问日志日志中获取以下信息:请求发起的客户端 IP 以及经过的 nginx 负载均衡和 varnish 缓存的服务器 IP,看以下架构图:


[img]http://dl2.iteye.com/upload/attachment/0110/6899/82291637-d8d8-364e-9208-c09211b45ebe.jpg[/img]


在nginx-web服务器安装nginx的时候需要把 --with-http_realip_module 该模块编译进去,该模块是用来从前端服务器发来的头部信息中,获取到客户端的真实IP地址

nginx负载均衡器上的nginx.conf配置如下(针对本次实验的配置):

upstream varnish {
server 10.10.10.122;
}
server {
listen 80;
server_name localhost;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://varnish;
}
}
varnish-缓存服务器上 test.vcl的配置如下:

backend web1 {
.host = "10.10.10.123";
.port = "80";
}
sub vcl_recv {
set req.http.X-Forwarded-For = req.http.X-Forwarded-For + server.ip;
}
sub vcl_fetch {
if(req.request == "GET" && req.url ~ "/"){
set beresp.ttl = 5s;
}
}
sub vcl_deliver {
if (obj.hits >0){
set resp.http.X-cache = "HIT";
} else {
set resp.http.X-cache = "MISS";
}
return(deliver);
}
nginx-web上nginx.conf的配置如下:

日志格式 nginx自带的日志格式,并未修改

http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
set_real_ip_from 10.10.10.122;
real_ip_header X-Real-IP;
}
增加这2行配置
set_real_ip_from 10.10.10.122; 告诉nginx从那边获取RealIP的值
real_ip_header X-Real-IP; 存储RealIP值的变量名称

从用户端 10.10.10.46 访问 http://10.10.10.120


[img]http://dl2.iteye.com/upload/attachment/0110/6901/9489650b-a684-3837-b7d1-ac0df6776a02.png[/img]


然后在nginx-web上看日志输出


[img]http://dl2.iteye.com/upload/attachment/0110/6903/edce84b0-d876-35f5-bbbb-8c3b5fd79767.png[/img]


可以看到第一段就是 客户端的IP地址,而并不是varnish服务器的地址,而最后一段里面,就包含 varnish服务器的地址 10.10.10.122 和 nginx服务器的地址10.10.10.120
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值