反向代理与负载均衡

什么是正向代理?

局域网中的用户想要直接访问网络是不可行的,只能通过代理服务器来访问,这种代理

服务就被称为正向代理。

 

 

什么是反向代理?

客户端无法感知代理,因为客户端访问网络不需要配置,只要把请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据,然后再返回到客户端。

此时,反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实的服务器IP地址。

 

负载均衡(LB)目的:为了解决单个节点的压力过大,造成web服务响应过慢,严重的情况下导致服务瘫痪,无法正常提供服务。

均衡:实现控制用户访问调度处理  均衡分配用户访问资源给后端服务器

负载:监控网站单台服务压力

 

代理配置过程:

    用户访问      代理服务器    web01  nginx服务 静态页面信息

    代理服务器配置信息

    ① 确认网站集群服务地址

    ② 确认网站集群服务端口

    ③ 编辑代理服务配置文件   配置代理服务器之前先安装好nginx服务

       server {

         listen 80;

         server_name localhost;

       location / {

       proxy_pass http://172.16.1.7:8080;

       }

       }

    ④ 配置解析信息,进行测试

   

    负载均衡过程:

    ① 准备集群节点服务器

       web01环境准备:echo web01 10.0.0.7 >/html/www/index.html

       web02环境准备:echo web02 10.0.0.8 >/html/www/index.html

    ② 编写负载均衡配置

       定义集群节点 uptream    实现分配资源给节点 proxy_pass

       upstream myserver {

          server 172.16.1.7:80;

          server 172.16.1.8:80;

         }

         

       server {

        listen 80;

        server_name localhost;

        include proxy_conf;

        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503  http_504 http_403 http_404 http_429;

       location / {

          proxy_pass http://myserver;

       }

}

      

    ③ 实现负载均衡测试

 

    代理配置参数信息:

    Syntax: proxy_pass URL;

    Default:    —

    Context:    location, if in location, limit_except

    作用说明:实现四层代理功能

    用法一:

    proxy_pass  http://172.16.1.7:8080

   

    用法二:本地架构中需要有DNS服务/本地解析

    proxy_pass  http://www.oldboy.com:8080

   

    用法三:实现集群负载

    proxy_pass  http://集群名称

   

    用法四:实现向后端HTTPs协议发送请求

    proxy_pass  https://后端节点信息

   

    Syntax: proxy_set_header field value;

    Default:    proxy_set_header Host $proxy_host;

            proxy_set_header Connection close;

    Context:    http, server, location

    作用说明: 可以修改调整请求头部信息的内容

 

    用法一: 简单修改请求头信息

    proxy_set_header  oldboy  $proxy_host;

   

    用法二: 显示真正指定网站信息

    proxy_set_header  host  $http_host;

   

    用法三: 可以收集访问网站用户信息(真实IP地址)

    proxy_set_header  X-Forwarderd-For $proxy_add_x_forwarded_for;

    特点说明:

    所有代理信息都会记录在X-Forwarderd-For 出现请求头

    proxy_set_header  X-Real-IP $remote_addr;

    特点说明:

    将客户端代理信息都会记录在X-Real-IP出现请求头

       

    结合:

    proxy_set_header  X-Forwarderd-For $remote_addr;

   

    扩展提升代理性能指令:优化

    Syntax: proxy_connect_timeout time;  

    Default:    proxy_connect_timeout 60s;     推荐20s;

    Context:    http, server, location

    作用说明: 代理与客户端连接超时指令

   

    Syntax: proxy_send_timeout time;

    Default:    proxy_send_timeout 60s;        推荐10s;60s

    Context:    http, server, location

    作用说明: 用户端请求间隔超时时间

   

    Syntax: proxy_read_timeout time;

    Default:    proxy_read_timeout 60s;        推荐10s;60s

    Context:    http, server, location

    作用说明: 代理端响应间隔超时时间

   

    Syntax: proxy_buffering on | off;     

    Default:    proxy_buffering on;

    Context:    http, server, location

    作用说明: 开启代理服务缓冲功能

   

    Syntax: proxy_buffer_size size;

    Default:    proxy_buffer_size 4k|8k;       内存 页--- 磁盘 block 4k

    Context:    http, server, location

    作用说明: 缓冲区默认页大小指定

   

    Syntax: proxy_buffers number size;

    Default:    proxy_buffers 8 4k|8k;       

    Context:    http, server, location

    作用说明: 缓冲区默认总大小指定

   

    Syntax: proxy_http_version 1.0 | 1.1;

    Default:    proxy_http_version 1.0;

    Context:    http, server, location

    作用:修改HTTP协议版本信息

   

    PS:查看系统内存页默认大小:getconf PAGE_SIZE

   

    cat /etc/nginx/proxy_conf (将代理模块的各个功能通过添加内置文件的方式添加)

    proxy_connect_timeout 30s;

    proxy_send_timeout 60s;

    proxy_read_timeout 60s;

    proxy_buffering on;

    proxy_buffer_size 4k;

    proxy_buffers 10 4k;

   

    proxy_set_header Host $http_host;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_http_version 1.1;

 

    负载均衡配置参数:   

    Syntax:  upstream name { ... }

    Default:    —

    Context:    http

    作用说明:创建网站web集群信息

   

    Syntax:  server address [parameters];

    Default:    —

    Context:    upstream

    作用说明:指定集群节点信息

   

    用法一:地址加端口进行指定

    server  172.16.1.7:80

   

    用法二:域名加端口进行指定

    server  web01:80

   

    算法配置指令:分配流量算法

    ① 平均分配  rr  轮询调度

    ② 权重分配  wrr 权重轮询

       upstream myserver {

        server 10.0.0.7:80 weight=3;

        server 10.0.0.8:80 weight=2;

        server 10.0.0.9:80 weight=1;

       }

    ③ 按照连接数分配:

       Syntax:  least_conn;

       Default: —

       Context: upstream 

    ④ 热备分配原则:

       upstream myserver {

        server 10.0.0.7:80;

        server 10.0.0.8:80;

        server 10.0.0.9:80 backup; 

       }

    ⑤ 哈希算法分配方式:会话混乱情况可以避免

       upstream myserver {

        ip_hash;

        server 10.0.0.7:80;

        server 10.0.0.8:80;

        server 10.0.0.9:80;

       }

 

    健康检查指令:后端网络状态监控检查功能 LVS---与此区别就是不带健康检查功能

①  健康检查最大失败次数  max_fails

       upstream myserver {

        server 10.0.0.7:80 max_fails=10;

        server 10.0.0.8:80;

        server 10.0.0.9:80;

       }

    ② 健康检查失败之后间隔时间  fail_timeout   (如果代码出错则显现出来)

       upstream  myserver{

        server 10.0.0.7:80 max_fails=10 fail_timeout=10s;

        server 10.0.0.8:80;

        server 10.0.0.9:80;

       }

    ③ 将后端正常消息进行反馈 错误消息不要进行相应

     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503  http_504 http_403 http_404 http_429;

       当出现以上错误状态码信息时,都忽略此节点响应信息

     

posted on 2021-04-13 15:32  弓长三寿  阅读(111)  评论(0)    收藏  举报