nginx 代理和负载均衡 一 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;
    }
}

nginx 代理和负载均衡
一 nginx的代理
二nginx常用模块
三 七层负载均衡
四 四层负载均衡
nginx 代理和负载均衡
一 nginx的代理
二nginx常用模块
三 七层负载均衡
四 四层负载均衡

四 四层负载均衡

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

nginx 代理和负载均衡
一 nginx的代理
二nginx常用模块
三 七层负载均衡
四 四层负载均衡