`
dong1289
  • 浏览: 3627 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

nginx获取客户端真实IP地址

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





在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





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





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

  • 大小: 39.1 KB
  • 大小: 29 KB
  • 大小: 13.2 KB
分享到:
评论

相关推荐

    获取客户端真实IP(支持代理服务器)

    通过上述方法,我们可以有效地解决在使用反向代理服务器时获取客户端真实IP地址的问题。需要注意的是,在处理`X-Forwarded-For`字段时,我们应该优先考虑获取第一个非`unknown`的IP地址,以确保获取到的IP地址尽可能...

    java非常强的获取客户端真实IP的两种方法

    ### Java获取客户端真实IP的两种方法详解 #### 一、问题背景 在Web开发中,经常需要获取客户端的真实IP地址来进行一系列的操作,比如统计访问来源、进行地理定位、安全防护等。然而,在实际应用场景中,客户端请求...

    获取客户端IP地址所需Jar包

    "获取客户端IP地址所需Jar包"这个主题,主要涉及的是在使用Apache Axis框架发布Web服务时,如何正确地获取客户端的网络地址。Apache Axis是一个开放源代码的SOAP栈,它提供了用于创建Web服务和客户端应用程序的工具...

    IP工具类,通过传入的request获取ip地址(JAVA)

    在IT行业中,尤其是在Web开发领域,获取客户端的IP地址是一项常见的任务。这有助于跟踪用户行为、提供地域针对性的服务,甚至进行安全防护。本篇文章将详细解释如何在Java环境下,通过Servlet和Reactive编程模型来...

    Java面试之如何获取客户端真实IP

    Java获取客户端真实IP ...在Java中获取客户端真实IP需要使用X-Real-IP和X-Forwarded-For请求头,并在nginx配置文件中添加相应的配置。这样,我们就可以获取客户端的真实IP,并实现分享功能的地区辨识功能。

    java socket 用户真实IP测试

    当涉及到通过代理服务器或者负载均衡器(如Nginx)进行TCP转发时,获取用户的真实IP地址可能会变得复杂。在标题“java socket nginx tcp转发 用户真实IP测试”中,主要探讨的是如何在Java的Socket连接中,通过Nginx...

    Java获取客户端IP

    但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。  原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给...

    CDN获取真实IP

    通过以上几种方法,可以有效地解决CDN环境下获取客户端真实IP的问题。对于网站管理员来说,了解并掌握这些技术对于优化用户体验、加强安全防护等方面都具有重要意义。同时,随着技术的发展,未来还可能出现更多高效...

    java获取用户真实ip

    为解决这一问题,可以通过检查`x-forwarded-for`字段获取到一个IP地址列表,并从中选取最后一个作为客户端真实IP地址。 ```java if (ip != null && ip.indexOf(",") > 0) { ip = ip.substring(ip.lastIndexOf(",")...

    nginx做反向代理时的真实IP_nginx反向代理_

    在反向代理模式下,Nginx接收到的请求头部信息可能包含多个IP地址,而我们通常需要的是原始客户端(用户)的IP地址,即真实IP。 要获取Nginx反向代理下的真实IP,主要涉及以下两个关键配置: 1. **$remote_addr ...

    PHP不同环境下获取真实的IP.txt

    在Web开发过程中,获取客户端的真实IP地址是一项非常重要的功能,尤其是在需要根据用户地理位置进行服务定制、防止恶意...以上就是关于如何在不同的PHP环境中准确获取客户端真实IP地址的方法介绍。希望对您有所帮助!

    Java中使用HttpRequest获取用户真实IP地址

    主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下

    PHP 获取客户端 IP 地址的方法实例代码

    $_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip() { $ip = $_SERVER['REMOTE_ADDR']; if (isset($_SERVER['HTTP_X_FORWARDE

    PHP通过$_SERVER['REMOTE_ADDR']得到的是内网IP?如何才能获得客户的公网IP(真实IP地址).zip

    在PHP开发中,获取用户公网IP(真实IP地址)是一个常见的需求,这通常涉及到网络通信和服务器配置。当我们使用PHP内置的全局数组`$_SERVER`中的`'REMOTE_ADDR'`来获取用户IP时,有时会发现它返回的是内网IP而非公网...

    idea,java获取ip地址

    当我们构建一个基于Servlet的Web应用程序时,有时需要获取访问用户的真实IP地址,这在处理用户请求、日志记录或者实现地理位置相关的功能时尤为关键。 Servlet是Java服务器端的一种组件,它扩展了Web服务器的功能,...

    Python使用django获取用户IP地址的方法

    这样,Nginx将会把客户端的IP地址传递给FastCGI进程,从而确保Django能够正确获取到用户的IP。这个设置使得`request.META`中的`REMOTE_ADDR`头包含了正确的用户IP,即使在使用反向代理的情况下也能正常工作。 总结...

    基于Nginx 反向代理获取真实IP的问题详解

    解决该问题,需要在Nginx反向代理配置中添加一些配置信息,目的将客户端的真实IP和域名传递到应用程序中。同时,也要修改获取IP地址的方法。 但是需要注意的是,通过Nginx反向代理后,如果访问IP通过了几层代理,...

    LNAMP架构中后端Apache获取用户真实IP地址的2种方法

    通过上述两种方法,可以在LNAMP架构中让Apache成功获取客户端的真实IP地址。第一种方法是通过Nginx直接将真实IP信息传递给Apache,第二种方法是在Apache侧通过特定模块解析客户端的真实IP。两种方法各有优势,具体...

    nginx配置tcp转发(nginx通过白名单访问)

    例如,`proxy_protocol`可以启用Nginx与上游服务器之间的代理协议,以便获取客户端的真实IP;`proxy_set_header`可以设置传递给后端服务器的头部信息。 总之,Nginx的TCP代理转发功能使得我们可以利用其强大的性能...

Global site tag (gtag.js) - Google Analytics