zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别(转)
    术语汇编 UML用例图简介
    jquery常用的插件1000收集 (转)
    mvc1,mvc2,mvc3有什么区别
    web框架技术 内容页调用 左边菜单页面 函数
    概要设计说明书(转)
    hover事件同时挂2个方法
    Microsoft Team Foundation Server 2010安装 与 序列号
    GridView 技巧(转)
    原核生物与真核生物
  • 原文地址:https://www.cnblogs.com/coolid/p/9023650.html
Copyright © 2011-2022 走看看