Nginx之反向代理与负载均衡实现动静分离实战

负载均衡指的是对请求数据包的转发,从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器
的客户端的真实用户,而反向代理服务器指的是接收到用户的请求后,会代理用户重新发起请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,范文的节点服务器的客户端用的就是反向代理服务器了,而非真实的网站访问用户。

Nginx http功能模块

ngx_nginx upstream       负载均和模块,可以实现网站的负载均衡功能及节点的健康检查

ngx_http_proxy_module      Proxy模块,用于把请求后抛给服务器节点或upstream服务器池

Nginx的upstream支持5种分配方式。其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式:

1)rr轮询     
        轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端
服务器down掉后,能自动剔除。按照1:1轮询。
        upstream backend {
            server 192.168.1.101:88;
            server 192.168.1.102:88;
        }
2)wrr轮询       
        轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
        upstream backend {
            server 192.168.1.101 weight=1;
            server 192.168.1.102 weight=2;
            server 192.168.1.103 weight=3;
        }
3)ip_hash  (upstream_fair)      
        每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问
一个后端服务器,可以解决session一致问题。
        upstream backend {
            ip_hash;
            server 192.168.1.101:81;
            server 192.168.1.102:82;
            server 192.168.1.103:83;
        }
注:当使用ip_hash时,服务器状态不可使用weight和backup
4)fair    (第三方的hash模块)      
        fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优
先分配请求。
        upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            fair;
        }
5)url_hash
        与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应
用于后端服务器为缓存时的场景下。
        upstream backend {
            server 192.168.1.101;
            server 192.168.1.102;
            hash $request_uri;
            hash_method crc32;
        }

upstream支持的状态参数

down:               暂停对该服务器的调度
backup:             类似于LVS Sorry Server,当所有的非backup的服务器故障
max_fails:          请求失败的次数,默认为1
fail_timeout:       在经历max_fails次失败后,暂停服务的时间
              [vip: 10.0.0.11]

        [LB1 Nginx]         [LB2 Nginx]
        10.0.0.20           10.0.0.21

          web1     web2              phpserver1     phpserver2
    10.0.0.22      10.0.0.23           10.0.0.24       10.0.0.24

一、实施过程

后端服务器部署详细过程:
安装软件:
    # yum install nginx php php-fpm -y
    # vim /etc/nginx/nginx.conf   //添加php配置
    在server里面添加如下配置:
    location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
   
   修改php-fpm进程账户并开启php-fpm的进程: 端口是9000  
   #vim /etc/php-fpm.d/www.conf  //修改如下参数,默认值是apache
   user = nginx
   group = nginx
   
   为什么设置成nginx:
       因为nginx.conf配置的账户为nginx
   
   # systemctl start php-fpm
       

前端nginx反向代理服务器:
upstream web {
    server 10.0.0.22 weight=1 max_fails=2 fail_timeout=2;
        server 10.0.0.23 max_fails=2 fail_timeout=5 down;
        }
upstream phpserver {
    server 10.0.0.24 backup;
    server 10.0.0.25;
        }       #上面的配置写到http里面server外面
       
server {
    listen 80;
        server_name www.baidu.com;
location ~* \.html${            #html的配置
        proxy_pass http://web;
        }

location ~* \.php$ {         #php的配置
        proxy_pass http://phpserver;
    proxy_set_header Host   $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;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
        }
}

推荐阅读更多精彩内容