`
GhostWolf
  • 浏览: 312379 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】如何nginx代理中获取用户ip

阅读更多

转载:http://gong1208.iteye.com/blog/1559835

 

问题背景:

通常情况下我们使用request.getRemoteAddr()就可以获取到客户端ip,但是当我们使用了nginx作为反向代理后,使用request.getRemoteAddr()获取到的就一直是nginx服务器的ip的地址

 

在《实战nginx》的书,作者张晏,这本书上有这么一段话“经过反向代理后,由于在客户端和web服务器之间增加了中间层,因此web服务器无法直接拿到客户端的ip,通过$remote_addr变量拿到的将是反向代理服务器的ip地址”。这句话的意思是说,当你使用了nginx反向服务器后,在web端使用request.getRemoteAddr()(本质上就是获取$remote_addr),取得的是nginx的地址,即$remote_addr变量中封装的是nginx的地址,当然是没法获得用户的真实ip的,但是,nginx是可以获得用户的真实ip的,也就是说nginx使用$remote_addr变量时获得的是用户的真实ip,如果我们想要在web端获得用户的真实ip,就必须在nginx这里作一个赋值操作,如下:

proxy_set_header            X-real-ip $remote_addr;

其中这个X-real-ip是一个自定义的变量名,名字可以随意取,这样做完之后,用户的真实ip就被放在X-real-ip这个变量里了,然后,在web端可以这样获取:

request.getAttribute("X-real-ip")

 

大概的配置

server {

        listen       88;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /{

            root   html;

            index  index.html index.htm;

           proxy_pass                  http://backend; 

           proxy_redirect              off;

           proxy_set_header            Host $host;

           proxy_set_header            X-real-ip $remote_addr;

           proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

            # proxy_set_header            X-Forwarded-For $http_x_forwarded_for;

        }

 

分享到:
评论

相关推荐

    Nginx作为反向代理时传递客户端IP的设置方法

    因为架构的需要采用多级 Nginx 反向代理,但是后端的程序获取到的客户端 IP 都是前端 Nginx 的 IP,问题的根源在于后端的 Nginx 在 HTTP Header 中取客户端 IP 时没有取对正确的值。 同样适用于前端是 Squid 或者...

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

    然而,在实际应用中,很多情况下用户的请求会经过反向代理服务器(如Nginx、Squid等),这使得直接使用`request.getRemoteAddr()`方法获取到的IP地址往往并不是客户端的真实IP地址。 #### 二、问题分析 当客户端...

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

    以下是配置Nginx反向代理获取真实IP的步骤: 1. 打开Nginx配置文件(通常是 `/etc/nginx/nginx.conf` 或者 `/etc/nginx/sites-available/default`),找到或创建一个server块。 2. 在该server块中,添加以下配置:...

    nginx正向代理与反向代理详解

    在Nginx中配置正向代理,首先需要编辑Nginx配置文件。在配置文件中,我们需要定义一个虚拟主机,设置`default_server`标志,以便所有到达该服务器的请求都会被此虚拟主机处理。同时,需要配置`resolver`以指定DNS...

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

    此时,如果直接使用`request.getRemoteAddr()`获取IP,则得到的是127.0.0.1或192.168.1.110这样的内部地址,而非客户端的真实IP。 #### 二、获取真实IP的第一种方法 为了获取客户端的真实IP地址,可以利用HTTP头部...

    nginx经过多层代理后获取真实来源ip过程详解

    nginx取 $remote_addr 当做真实ip,而事实上,$http_X_Forwarded_For 才是用户真实ip,$remote_addr只是代理上一层的地址 解决方案: 在 http 模块 加 set_real_ip_from 172.17.10.125; #上一层代理IP地址 real_ip_...

    nginx反向代理导致session失效的问题解决

    两边通过同一个nginx进行反向代理,nginx配置大致如下, location /health/ { proxy_pass http://192.168.40.159:8081/health/; #无问题的配置 } location /health-dev/ { proxy_pass ...

    https通信nginx反向代理443端口

    在IT行业中,HTTPS通信是确保网站数据安全传输的重要手段,而Nginx作为一款高性能的HTTP和反向代理服务器,常被用来实现这种安全通信。本文将深入探讨如何通过Nginx配置HTTPS服务器,实现443端口的反向代理,以及与...

    Nginx服务器作反向代理实现内部局域网的url转发配置

    然后k兄就提议可以在内网搭建个nginx反向代理服务器,将nginx反向代理服务器的80映射到外网IP的80,这样指向到公司外网IP的域名的HTTP请求就会发送到nginx反向代理服务器,利用nginx反向代理将不同域名的请求转发给...

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

    一、前言 前文Nginx 解决WebApi跨域二次请求以及Vue单页面问题 当中...同时,也要修改获取IP地址的方法。 但是需要注意的是,通过Nginx反向代理后,如果访问IP通过了几层代理,可能取得的IP地址是这种格式:clientIP,

    nginx+tomcat反向代理安装配置

    1. 下载最新稳定版的`nginx`安装包,对于`nginx1.6`,可以从官方历史版本库获取。 2. 解压下载的包,例如:`tar -zxvf nginx-1.6.x.tar.gz` 3. 进入解压后的目录,如:`cd nginx-1.6.x` 4. 配置编译选项,根据需求...

    nginx-1.10.2_海康;javascript_nginx/1.10.2_nginx转发海康_

    在描述中提到的"海康摄像头实时预览通过nginx反向代理",意味着我们需要设置Nginx服务器作为反向代理,将来自客户端的请求转发到海康摄像头的流媒体服务器,以便用户可以通过Web浏览器实时查看摄像头的视频流。...

    Nginx如何封禁IP和IP段的实现

    Nginx不仅在处理静态内容和反向代理方面表现出色,它还具有强大的配置功能,比如可以用来封禁指定的IP地址或IP地址段。本文将详细介绍如何在Nginx中封禁特定的IP地址和IP段,以及如何自定义403错误页面。 首先,...

    java获取用户真实ip

    需要注意的是,当客户端通过Nginx等反向代理服务器连接到应用服务器时,此方法获取的将是反向代理服务器的IP地址而非客户端真实IP。 ### 处理多层代理的情况 在实际部署中,客户端的请求可能经过多层代理服务器...

    解析ip,用户给一个请求,获取用户的ip,浏览器,操作系统等信息

    然而,如果应用部署在反向代理服务器如Nginx或Apache后面,`getRemoteAddr()`可能会返回代理服务器的IP而非用户的真实IP。为解决这个问题,我们可以检查`X-Forwarded-For`头,它通常会包含用户的原始IP地址: ```...

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

    然而,如果应用部署在反向代理服务器(如Nginx)后,这个方法可能返回的是代理服务器的IP,而非实际用户的IP。这时,我们可以检查`X-Forwarded-For`头,它包含了经过代理服务器的原始IP地址: ```java String ...

    nginx-1.0.5 代理软件 windows下

    配置Nginx代理 - **配置文件**:Nginx的配置文件通常位于`conf`目录下的`nginx.conf`。在这个文件中,你可以定义服务器块(server blocks)来处理不同的域名或端口。 - **代理设置**:要配置代理,你需要在`...

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

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

    Nginx1.2.7 for windows反向代理配置

    在Windows环境下配置Nginx1.2.7进行反向代理,可以实现将用户的请求转发到其他服务器,从而隐藏真实服务器的IP和结构,提高系统的安全性和负载均衡能力。 首先,我们需要修改Nginx的配置文件。这个文件通常位于...

Global site tag (gtag.js) - Google Analytics