第三节:小白学nginx之nginx的代理和负载均衡

小白学nginx之nginx的代理和负载均衡

正向代理和反向代理的区别

正向代理,主要是内部上网
反向代理,主要用于公司集群架构中
区别在于形式上服务的"对象"不一样
正向代理代理的对象是客户端,为客户端服务 PC电脑
反向代理代理的对象是服务端,为服务端服务 服务器

反向代理的配置

1.配置后端的web

[root@web01 conf.d]# cat web.xxx.com.conf 
server {
    listen 80;
    server_name web.xxx.com;
    root /web;

    location / {
        index index.php index.html;
    }
}
[root@web01 conf.d]# mkdir /web
[root@web01 conf.d]# echo "Web01....." > /web/index.html
[root@web01 conf.d]# nginx -t
sysnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
t[root@web01 conf.d]# systemctl restart nginx

2.nginx代理配置

[root@lb01 conf.d]# cat proxy_web.conf
server {
    listen 80;
    server_name web.xxx.com;
    location / {
        proxy_pass http://10.0.0.7:80;
        proxy_set_header Host $http_host;
    }
}

[root@web01 conf.d]# systemctl restart nginx

3.抓包分析

4.代理相关的参数

proxy_pass http://10.0.0.7:80;
proxy_http_version 1.1;         #代理使用http1.1协议
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;

7.代理配置location时调用, 方便后续多个Location重复使用

location / {
    proxy_pass http://127.0.0.1:8080;
    include proxy_params;
}
nginx代理局限性

一个location仅能代理后端一台主机

因此,我们一般建议使用nginx的负载均衡

各大产商运品台介绍
    SLB     阿里云负载均衡
    QLB     青云负载均衡
    CLB     腾讯负载均衡
    ULB     ucloud的负载均衡
四层负载均衡与七层负载均衡区别

四层负载均衡数据包在底层就进行了分发,而七层负载均衡数据包则是在最顶层进行分发、由此可以看出,七层负载均衡效率没有四负载均衡高。
但七层负载均衡更贴近于服务,如:http协议就是七层协议,我们可以用Nginx可以作会话保持,URL路径规则匹配、head头改写等等,这些是四层负载均衡无法实现的。

配置7层负载均衡实例

1.Web01服务器上配置nginx, 并创建对应html文件

[root@web01 ~]# cd /etc/nginx/conf.d/
[root@web01 conf.d]# cat node.conf 
server {
    listen 80;
    server_name node.xxx.com;
    location / {
        root /node;
        index index.html;
    }
}
[root@web01 conf.d]# mkdir /node
[root@web01 conf.d]# echo "Web01..." > /node/index.html
[root@web01 conf.d]# systemctl restart nginx

2.Web02服务器上配置nginx, 并创建对应html文件

[root@web02 ~]# cd /etc/nginx/conf.d/
[root@web02 conf.d]# cat node.conf 
server {
    listen 80;
    server_name node.oldboy.com;
    location / {
        root /node;
        index index.html;
    }
}
[root@web02 conf.d]# mkdir /node
[root@web02 conf.d]# echo "Web02..." > /node/index.html
[root@web02 conf.d]# systemctl restart nginx

3.配置Nginx负载均衡

[root@lb01 ~]# cd /etc/nginx/conf.d/
[root@lb01 conf.d]# cat node_proxy.conf 
upstream node {
    server 172.16.1.7:80;
    server 172.16.1.8:80;
}
server {
    listen 80;
    server_name node.xxx.com;

    location / {
        proxy_pass http://node;
        include proxy_params;
    }
}
[root@lb01 conf.d]# systemctl restart nginx

4.准备Nginx负载均衡调度使用的proxy_params

[root@Nginx ~]# 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;

5.负载均衡配置:

[root@lb01 conf.d]# vim proxy_xxx.com.conf
upstream node {
        server 172.16.1.7:80;
        server 172.16.1.8:80;
}
server {
        listen 80;
        server_name blog.xxx.com;
        location / {
                proxy_pass http://node;
                include proxy_params;
        }
}

server {
        listen 80;
        server_name zh.xxx.com;
        location / {
                proxy_pass http://node;
                include proxy_params;
        }
}
反向代理各个参数介绍
proxy_pass
携带头部信息  proxy_set_header

proxy_http_version 1.1;                 #代理向后请求使用的版本
proxy_set_header Host $http_host;   #代理向后端主机请求时携带的host域名
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    #获取客户端真实IP以及全链路IP

proxy_connect_timeout 30;           #代理连接后端超时时间
proxy_send_timeout 60;              #后端传递数据至代理超时时间
proxy_read_timeout 60;              #后端响应代理的超时时间

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;

最后我们思考一个问题:

使用nginx负载均衡时,如何将后端请求超时的服务器流量平滑的切换到另一台上?

Nginx是本身是有机制的,如果出现一个节点down掉的时候,Nginx会更据你具体负载均衡的设置,将请求转移到其他的节点上,但是,如果后台服务连接没有down掉,但是返回错误异常码了如:504、502、500

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术