• nginx 代理和负载均衡


    一 nginx的代理

    1常见模式

    1.正向代理
    2.反向代理
    
    #区别
    1.区别在于形式上服务的“对象”不一样
    2.正向代理代理的对象是客户端,为客户端服务
    3.反向代理代理的对象是服务端,为服务端服务
    

    2Nginx代理服务支持协议

    反向代理模式 Nginx配置模块
    http、websocket、https、tomcat、Java程序 ngx_http_proxy_module
    fastcgi(php程序) ngx_http_fastcgi_module
    uwsgi(python程序) ngx_http_uwsgi_module
    grpc(golang程序) ngx_http_v2_module

    3简单配置(示例)

    [root@web01 conf.d]# vim proxy.conf
    server {
        listen 80;
        server_name linux.proxy.com;
        location / {
            root /code/proxy;
            index index.html;
        }
    }
    

    二nginx常用模块

    Syntax:    proxy_set_header field value;
    Default:    proxy_set_header Host $proxy_host;
                proxy_set_header Connection close;
    Context:    http, server, location
     
    # 用户请求的时候HOST的值是www.oldboy.com, 那么代理服务会像后端传递请求的还是www.oldboy.com
    proxy_set_header Host $http_host;
    # 将$remote_addr的值放进变量X-Real-IP中,$remote_addr的值为客户端的ip
    proxy_set_header X-Real-IP $remote_addr;
    # 客户端通过代理服务访问后端服务, 后端服务通过该变量会记录真实客户端地址
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    #nginx代理与后端服务器连接超时时间(代理连接超时)
    Syntax:  proxy_connect_timeout time;
    Default: proxy_connect_timeout 60s;
    Context: http, server, location
    
    #nginx代理等待后端服务器的响应时间
    Syntax:     proxy_read_timeout time;
    Default:    proxy_read_timeout 60s;
    Context:    http, server, location
    
    #后端服务器数据回传给nginx代理超时时间
    Syntax:  proxy_send_timeout time;
    Default: proxy_send_timeout 60s;
    Context: http, server, location
    
    #nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
    Syntax:  proxy_buffering on | off;
    Default: proxy_buffering on;
    Context: http, server, location
    
    #设置nginx代理保存用户头信息的缓冲区大小
    Syntax:  proxy_buffer_size size;
    Default: proxy_buffer_size 4k|8k;
    Context: http, server, location
    
    #proxy_buffers 缓冲区
    Syntax:  proxy_buffers number size;
    Default: proxy_buffers 8 4k|8k;
    Context: http, server, location
    
    
    #配置文件优化
    [root@lb01 ~]# vim /etc/nginx/proxy_params 
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    
    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 4 128k;
    
    

    三 七层负载均衡

    1.负载均衡的作用

    1.web服务器压力过大 把请求平均的分配到后端服务器上
    

    2 公用云产品

    1.SLB		阿里云产品
    2.LB		青云产品
    3.CLB		腾讯云产品
    4.ULB		ucloud产品
    

    3 常见的负载均衡软件

    1.nginx			支持四层负载均衡和七层负载均衡
    2.LVS			只支持四层负载均衡
    3.haproxy		支持四层负载均衡和七层负载均衡
    #LVS是最快的负载均衡软件
    

    4.负载均衡调度算法

    调度算法 说明
    调度算法 说明
    轮询 逐一的将请求平均的分配到后端
    加权轮询 根据设置的权重值,将请求按比例分配至后端服务器
    ip_hash 根据访问来源的IP将请求始终分配到一台机器
    url_hash 根据访问的url,将请求始终分配到一台机器
    least_conn 哪一台机器接收的请求少,就将新的请求分配到哪一台机器

    5负载均衡后端状态

    状态 概述
    down 当前的server暂时不参与负载均衡
    backup 预留的备份服务器
    max_fails 允许请求失败的次数
    fail_timeout 经过max_fails失败后, 服务暂停时间
    max_conns 限制最大的接收连接数

    6示例

    [root@lb01 ~]# vim /etc/nginx/conf.d/blog.conf 
    upstream blog {
        server 172.16.1.7:80;
        server 172.16.1.9:80;
    }
    
    server {
        listen 80;
        server_name linux.blog.com;
    
        location / {
            proxy_pass http://blog;
            include /etc/nginx/proxy_params;
        }
    }
    


    四 四层负载均衡

    1什么是四层负载均衡

    四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI
    

    2.应用场景

    1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
    2.tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
    3.数据库读写分离负载
    4.跳板机端口映射
    

    3.四层负载均衡特点

    1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
    2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
    3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用)
    4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
    5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。
    

    4四层负载均衡语法

    Syntax:	stream { ... }
    Default:	—
    Context:	main
    
    #示例:四层负载均衡stream模块跟http模块时同一级别,不能配置在http层里面
    stream {
        upstream backend {
            server backend1.example.com:12345 weight=5;
            server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        }
    
        server {
            listen 12345;
            proxy_connect_timeout 1s;
            proxy_timeout 3s;
            proxy_pass backend;
        }
    }
    

    5配置四层负载均衡

    [root@lb03 ~]# vim /etc/nginx/conf.c/4lb.conf
    stream {
        upstream lbserver {
            server 10.0.0.4:80;
            server 10.0.0.5:80;
        }
    
        server {
            listen 80;
            proxy_connect_timeout 1s;
            proxy_timeout 3s;
            proxy_pass lbserver;
        }
    }
    
    #检查配置并启动
    [root@lb03 ~]# nginx -t
    [root@lb03 ~]# systemctl restart nginx
    

  • 相关阅读:
    1348:【例4-9】城市公交网建设问题
    1392:繁忙的都市(city)
    1381:城市路(Dijkstra)
    初识微积分
    进阶数论(1)逆元
    [题解] Codeforces Round #549 (Div. 2) B. Nirvana
    简单数论之整除&质因数分解&唯一分解定理
    [题解]ybt1365:FBI树(fbi)
    [题解]一本通1240:查找最接近的元素
    [题解]NOIP2018(普及组)T1标题统计(title)
  • 原文地址:https://www.cnblogs.com/GAO321/p/15239265.html
Copyright © 2020-2023  润新知