返回顶部
首页 > 资讯 > 精选 >nginx实现负载CDN加速获取端真实ip的方法
  • 370
分享到

nginx实现负载CDN加速获取端真实ip的方法

2023-06-13 05:06:07 370人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Nginx实现负载CDN加速获取端真实ip的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。nginx做负载CDN加速获取端真实ip在不用cdn的情况下,nginx做负载获取

这篇文章将为大家详细讲解有关Nginx实现负载CDN加速获取端真实ip的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

nginx做负载CDN加速获取端真实ip
在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下:
Java代码 

proxy_set_header        Host            $host;  proxy_set_header        X-Real-IP       $remote_addr;  proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

然后后端服务器获取ip代码:
Java代码 

String address = request.getHeader("X-Forwarded-For");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;      }  address = request.getHeader("Proxy-Client-IP");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;  }  address = request.getHeader("WL-Proxy-Client-IP");  if (address != null && address.length() > 0          && !"unknown".equalsIgnoreCase(address)) {      return address;  }  return request.getRemoteAddr();


这样就能获取到真实的IP,服务器测试一下:
不加cdn,获取得IP:123.116.126.51(我当前客户端机器的真实IP)
然后加上加了cdn后,后去到的IP:123.116.126.51, 202.108.251.166(hosts指向cdn的ip)
即:client 真实IP,代理IP,Google之,
X-Forwarded-For:简称XFF头,它代表客户端,也就是Http的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项 。
标准格式如下:

X-Forwarded-For: client1, proxy1, proxy2

从标准格式可以看出,X-Forwarded-For头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡的ip地址,经过几个就会出现几个。
当Nginx设置X-Forwarded-For等于$proxy_add_x_forwarded_for后会有两种情况发生
1、如果从CDN过来的请求没有设置X-Forwarded-For头(通常这种事情不会发生),而到了我们这里Nginx设置将其设置为$proxy_add_x_forwarded_for的话,X-Forwarded-For的信息应该为CDN的IP,因为相对于Nginx负载均衡来说客户端即为CDN,这样的话,后端的WEB程序时死活也获得不了真实用户的IP的。
2、CDN设置了X-Forwarded-For,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for的话,那么X-Forwarded-For的内容变成 ”客户端IP,CDN的ip“如果是这种情况的话,那后端的程序通过X-Forwarded-For获得客户端IP,则取逗号分隔的第一项即可。
这个比较头疼,如果只想获取客户端真实ip,那么只能修改我们后端代码,如果有多个,那么取第一个。这不是我想要的,
那么怎么样才能不修改就能真实IP呢?
Nginx中还有一个$http_x_forwarded_for变量,这个变量中保存的内容就是请求中的X-Forwarded-For信息。如果后端获得X-Forwarded-For信息的程序兼容性不好的话(没有考虑到X-Forwarded-For含有多个IP的情况),最好就不要将X-Forwarded-For设置为 $proxy_add_x_forwarded_for。应该设置为$http_x_forwarded_for或者干脆不设置!
上面这段话的意思是我们不加 $proxy_add_x_forwarded_for, 但是这样不在cdn的情况下去会取不到真实IP,有没有一个两全齐美的方法呢?
经过几种配置之后,发现做如下配置:
Java代码     

proxy_set_header X-Forwarded-For  $http_x_forwarded_for;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

这样配置第一次获取 $http_x_forwarded_for,如果不存在,那么获取$proxy_add_x_forwarded_for。
这样不管是否在cdn环境,都可以获得一个客户端IP。
(注:多层代理未测试)

关于“nginx实现负载CDN加速获取端真实ip的方法”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: nginx实现负载CDN加速获取端真实ip的方法

本文链接: https://lsjlt.com/news/265587.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • nginx实现负载CDN加速获取端真实ip的方法
    这篇文章将为大家详细讲解有关nginx实现负载CDN加速获取端真实ip的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。nginx做负载CDN加速获取端真实ip在不用cdn的情况下,nginx做负载获取...
    99+
    2023-06-13
  • 如何获取cdn加速后的真实ip
    获取cdn加速后真实ip的方法ping二级域名很多网站不会给二级域名做CDN服务,因此可以通过ping网站的二级域名,实现获取真实ip。反向查找通过让服务器向主动向你推送消息,如邮件等;从而得到真实ip。...
    99+
    2024-04-02
  • nginx如何获取真实客户端ip
    nginx作为反向代理服务器,即代理我们的服务端,下面介绍下如何配置nginx获取真实的客户端ip 配置nginx.con server { listen 80; server_name l...
    99+
    2023-10-20
    nginx tcp/ip java
  • Nginx代理后获取客户端真实IP地址
    1、场景 在项目实际应用中,我们可能会需要获取到用户也就是客户端的真实IP地址,比如记录系统操作日志等情况。 2、使用 通常情况下我们可以使用以下方式来获取IP地址 request.getRemoteAddr() 但是当我们使用Nginx反...
    99+
    2023-09-06
    java获取用户真实IP地址 nginx获取用户真实IP地址
  • Nginx反向代理后无法获取客户端真实IP地址
    目录1、原始配置文件如下2、配置转发后当我们使用 Nginx 代理转发服务后,会发现我们无法获取客户端的真实IP地址,从而无法获取客户端的地理位置等信息。 1、原始配置文件如下 wo...
    99+
    2023-03-06
    Nginx反向代理获取IP地址 Nginx代理IP地址
  • springboot获取真实ip地址的方法实例
    需求是用户在登录时,密码输错了5次以上要将这个ip禁用,所以如题,我需要在登录接口代码中获得这次请求的原始ip地址。禁用ip的逻辑已经写好了,目前痛点是获取ip地址,也正是这块代码让...
    99+
    2024-04-02
  • Discuz论坛使用CDN后无法获取用户真实IP的解决方法
    该问题存在于任何CDN产品,如果您使用了CDN产品,该Discuz方法都适用。 该问题导致的结果:1.Discuz论坛可能无法获得用户的真实IP,导致某些用户IP显示的是加速乐节点的IP2.论坛访问量过大的话,可能会导致...
    99+
    2022-06-12
    Discuz CDN 真实IP
  • 基于nginx获取代理服务ip以及客户端真实ip详解
    目录一、问题背景二、proxy_set_header 语法三、X-Real-IP四、X-Forwarded-For总结 一、问题背景 在实际应用中,我们可能需要获取用户的i...
    99+
    2024-04-02
  • Nginx反向代理后无法获取客户端真实IP地址怎么解决
    这篇文章主要介绍“Nginx反向代理后无法获取客户端真实IP地址怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Nginx反向代理后无法获取客户端真实IP地址怎么解决”文章能帮助大家解决问题。...
    99+
    2023-07-05
  • Android 获取IP地址的实现方法
    Android 获取IP地址 最近做项目,有一个需求是Android设备获取当前IP的功能,经过一番查询资料解决了,记录下实现方法。 1.使用WIFI 首先设置用户权限 &l...
    99+
    2022-06-06
    获取ip地址 ip 方法 Android
  • 项目中Nginx多级代理是如何获取客户端的真实IP地址
    目录多级代理中获取客户端真实IP日志的格式获取客户端真实IP总结:多级代理中获取客户端真实IP 日志的格式 nginx中常用日志格式配置如下: log_format main '...
    99+
    2024-04-02
  • Python实现获取域名所用服务器的真实IP
    本来是要写个程序用的,没写完不写了,这一部分就贴出来吧 验证域名和IP class JianKong(): '''查询IDC信息,封ip和过白名单''' def __init__(self): ...
    99+
    2022-06-04
    真实 服务器 域名
  • nginx实现负载均衡的方式有哪些
    nginx实现负载均衡的方式有三种:1. 基于IP Hash的负载均衡:nginx根据客户端的IP地址进行哈希计算,将同一个IP的请...
    99+
    2023-10-09
    nginx
  • 实现高性能的Nginx负载均衡方案
    随着互联网的不断发展,对于系统的性能要求也越来越高。在处理大量的并发请求时,负载均衡是一种非常重要的解决方案,能够有效地分配请求的负载,提高系统的性能和可用性。而Nginx,作为一款高性能的Web服务器和反向代理服务器,被广泛应用于负载均衡...
    99+
    2023-10-21
    nginx 高性能 负载均衡
  • SpringCloud 客户端Ribbon负载均衡的实现方法
    目录Ribbon 介绍开启客户端负载均衡,简化 RestTemplate 调用负载均衡策略饥饿加载Ribbon 介绍 Ribbon 是 Netflix 提供的一个基于 Http 和 ...
    99+
    2024-04-02
  • 负载均衡的实现方法
    这篇文章主要讲解了“负载均衡的实现方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“负载均衡的实现方法”吧!    客户端发送多个请求到服务器,服务器...
    99+
    2023-06-20
  • cdn加速原理及实现方法是什么
    CDN加速原理是通过在全球分布的节点服务器上缓存静态资源,将用户请求转发至最近的缓存节点,从而提高用户访问速度和稳定性。CDN实现方...
    99+
    2023-05-30
    cdn加速原理 cdn
  • android实现Uri获取真实路径转换成File的方法
    本文实例讲述了android实现Uri获取真实路径转换成File的方法。分享给大家供大家参考。具体实现方法如下: Uri uri = data.getData(); Stri...
    99+
    2022-06-06
    file 方法 uri Android
  • nginx实现负载均衡的方式有哪几种
    nginx实现负载均衡的方式有以下几种: 轮询(Round Robin):将请求依次分发给后端服务器,每个请求按照顺序分配给不同...
    99+
    2024-04-22
    nginx
  • Centos实现负载均衡的方法
    这篇文章主要讲解了“Centos实现负载均衡的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Centos实现负载均衡的方法”吧!为了提高系统的高可用性,我们可以将两个或多个网卡进行绑定,...
    99+
    2023-06-10
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作