Nginx--反向代理&&负载均衡

一 代理  

 代理也称网络代理,它是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接,有利于保障网络终端的隐私或安全,防止攻击

  正向代理  内网的服务器通过代理服务器,能够访问外网的服务器

        内网用户将请求发给代理服务器,代理服务器根据用户需求,向真正的web服务器发出请求,然后获取到网页内容之后,在本地缓存然后发给用户

        需要用户对浏览器进行设置

  透明代理  目的和原理与正向代理服务器一致,但一般布署在网关上,用户不需要再对浏览器进行设置

        需要结合iptables

  反向代理  外网客户端通过代理服务器,能够访问内网服务器的资源

        外网客户端访问正常的域名或者IP,其实访问的是代理服务器,代理服务器帮助客户端请求页面,在代理服务器上缓存,然后再发送给客户端

 

二 反向代理

 1 该功能由ngx_http_proxy_module模块提供

location / {
        proxy_pass  http://192.168.198.131;
}

 2 在web服务器上获取客户端真实IP

location / {
        ​proxy_pass http://192.168.198.131;
        proxy_set_header X-Real-IP $remote_addr;    #将客户端IP写入到请求头部发送给web服务器
}

  后端为apache,修改配置文件中的日志格式

LogFormat "%{X-Real-ip}i  %l %u %t \"%r\" %>s %b \"%{Referer}i\"  \"%{User-Agent}i\"" combined

  后端为nginx,安装real-ip模块(系统自带)修改配置文件

location / {
    root html;
    index index.html index.htm;
    set_real_ip_from 192.168.198.131;        #代理服务器的IP
    real_ip_header X-Real-ip;                #从请求头部字段获取
}

 3 多个代理服务器获取客户端真实IP

  通过X-Forwarded-For字段获取

   第一个代理服务器 proxy_set_header X-Forwarded-For $remote_addr;

   2+ 代理服务器 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

   最终服务器报头的X-Forwarded-For字段的值的第一个IP就是客户端真实IP

   通过real-ip模块将客户端真实IP赋值给 $remote_addr

  通过X-Real-IP字段获取

   第一个代理服务器 proxy_set_header X-Real-IP $remote_addr;

   2+ 代理服务器 proxy_set_header X-Real-IP $http_x_real_ip;

   最终服务器修改日志格式中的变量为 $http_x_real_ip

 

三 负载均衡

 由ngx_http_upstream_module + ngx_http_proxy_module模块提供

 1 轮循:后端每台服务器的权重相同(静态)

upstream    webs {              #代理服务器上定义组,放在http模块
​    server  192.168.198.130;
    server  192.168.198.121;
}
    location / {
        proxy_pass http://webs;    #代理指向组
}

 2 加权轮循:在每台服务器上加入权值,权值越高的服务器分配到的请求越多(静态)

upstream  webs {
    server 192.168.198.130 weight=1;
    server 192.168.198.131 weight=2;
}

 3 ip_hash:让客户端在一定时间内访问到同一台服务器(IPv4地址的前三个字节或者IPv6的整个地址,会被用来作为一个散列key)

upstream  webs {
    ip_hash;
    server 192.168.198.130 weight=1;
    server 192.168.198.131 weight=2;
}

 4 least_conn:根据其权重值,将请求发送到活跃连接数最少的服务器上(动态)

upstream  webs {
    least_conn;
    server 192.168.198.130 weight=1;
    server 192.168.198.131 weight=2;
}

 5 max_fails:设定nginx与服务器通信尝试失败的次数,失败次数=n,认为服务器不可用

  fail_timeout=time:统计失败尝试次数的时间,在这段时间中,服务器失败次数=n,服务器不可用(服务器被认为不可用的时间段,默认情况下,超时时间为10秒

upstream  webs {
    server 192.168.198.130 max_fails=10 fail_timeout=60s;
    server 192.168.198.131 max_fails=10 fail_timeout=60s;
}

 6 backup:标记为备用服务器,当主服务器不可用时,请求会被传给备用服务器

  down:标记服务器永久不可用,可以跟ip_hash指令一起使用,一般想临时暂停某台服务器时使用

upstream  webs {
    server 192.168.198.130;
    server 192.168.198.131 backup;
}
upstream  webs {
    server 192.168.198.130;
    server 192.168.198.131 down;
}

 

posted @ 2020-12-11 23:05  心恩惠动  阅读(105)  评论(0编辑  收藏  举报