设为首页 收藏本站
查看: 932|回复: 0

[经验分享] nginx获取客户端真实IP地址

[复制链接]

尚未签到

发表于 2016-12-24 09:32:53 | 显示全部楼层 |阅读模式
假设公司网站架构为 client ---->nginx 负载均衡--->varnish 缓存---->nginx( web)----->tomcat 请问如何从 nginx(web)这一层的访问日志日志中获取以下信息:请求发起的客户端 IP 以及经过的 nginx 负载均衡和 varnish 缓存的服务器 IP,看以下架构图:


DSC0000.jpg


在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


DSC0001.png


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


DSC0002.png


可以看到第一段就是 客户端的IP地址,而并不是varnish服务器的地址,而最后一段里面,就包含 varnish服务器的地址 10.10.10.122 和 nginx服务器的地址10.10.10.120

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318684-1-1.html 上篇帖子: Webpy + Nginx with FastCGI搭建Web.py 下篇帖子: Farseer
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表