• nginx使用用户真实IP做hash(解决经过CND后ip_hash失效问题)


    在nginx中常用的有以下四种负载均衡的算法,分别是:round-robin、ip-hash、least-connected和weighted。当然在实际生产中或许使用最多的就是ip-hash了,一般会这样使用:

    upstream h5 {
       ip_hash;
       server 192.168.100.104:9080;
       server 192.168.100.105:9080;
     }
    

      

    如果用户是直连的话那还好,nginx可以根据用户的IP均匀地向多个服务器节点分配负载请求。但是如果我们的域名使用了CDN加速的话,那么用户在请求js、CSS、图片等静态资源时并没有直接请求到我们的服务器,而是请求的少量的CDN加速节点服务器,从而造成有少量IP(PS:CDN节点服务器IP)频繁大量访问nginx。同时又因为ip_hash策略的原因,导致出现部分服务器的负载非常大,其他服务器却没有多少请求的现象

    因此,为了解决这个问题,我们可以通过在nginx中获取用户请求时的真实IP,然后根据这些真实IP做hash策略,也就是自定义nginx的hash策略。实现步骤如下:

    (1)修改nginx配置文件nginx.conf:

    http {
    include mime.types; #设定mime类型,类型由mime.type文件定义
    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”‘;
    access_log logs/access.log main;

    #获取用户真实IP,并赋值给变量$clientRealIP

    map $http_x_forwarded_for $clientRealIp {
    "" $remote_addr;
    ~^(?P<firstAddr>[0-9.]+),?.*$ $firstAddr;
    }
    

      

    ……..

    include gzip.conf; #压缩配置文件
    include proxy.conf; #proxy_cache参数配置文件
    include vhost/*.conf; #nginx虚拟主机包含文件目录
    include mysvrhost.conf; #后端WEB服务器列表文件
    }

    (2)修改nginx的配置文件mysvrhost.conf:

    upstream h5 {
    hash $clientRealIp;
    server 192.168.100.104:9080;
    server 192.168.100.105:9080;
    }

    注:这种方式也并不是万无一失了,因为请求的Header中的HTTP_X_FORWARDED_FOR参数是可以在请求时被修改的,因此就存在一定的安全隐患。不过现在的CDN一般都有加速防黑的功能,所有实际上问题也不是很大。如果实在不放心的话不是还可以使用SSL证书整站加密嘛

    转自:https://www.zifangsky.cn/659.html

  • 相关阅读:
    Java中编写代码出现异常,如何抛出异常,如何捕获异常
    用Java制作斗地主
    Java—Map接口中的常用方法
    Java—增强for循环与for循环的区别/泛型通配符/LinkedList集合
    Java—包装类/System类/Math类/Arrays类/大数据运算/Collection接口/Iterator迭代器
    Java—时间的原点 计算时间所使用的 Date类/DateFormat类/Calendar类
    Java—匿名对象/内部类/访问修饰符/代码块
    Java—构造方法及this/super/final/static关键字
    Java—接口
    URL Protocol打开应用程序并传递程序启动参数(Windows、Mac)
  • 原文地址:https://www.cnblogs.com/coolid/p/9023650.html
Copyright © 2020-2023  润新知