nginx-负载均衡相关配置 第五章

一、负载均衡:

通过反向代理客户端的请求到一个服务器群组,通过某种算法,将客户端的请求按照自定义的有规律的一种调度调度给后端服务器。

Nginx的负载均衡使用upstream定义服务器组,后面跟着组名,组名后面是大括号包起来的服务器列表,每个服务器使用server开头,后面跟定义的服务器名字、服务器IP:Port、参数;

1:upstream要写在Server块的外面,可以有多个,名称不同即可,如下:

  upstream webserver {                            #配置后端服务器组
        server 10.2.61.23:8080;
        server 10.2.61.21:8021;


        }
    server {
        listen 8008;
        server_name localhost;
        location / {                  #指定访问  / 负载到webserver 组中
            proxy_pass http://webserver ;      
            proxy_set_header X_Forworded_For $remote_addr;    #将客户端地址插入数据报头

        }
        location ~* ^/aab/ {            #正则表达式匹配 /aab 路径 ,后端服务器必须要有这个路径
            add_header webserver $upstream_addr;    #将后端服务器地址插入到响应报头中,网上很多人说需要安装ngx_http_headers_module 模块。我测试默认支持这个模块,只有 add_header ,add_trailer ,expires.
            proxy_pass http://webserver;
            proxy_set_header X_Forworded_For $remote_addr;
        }
        }

访问结果:

1.2:nginx支持的三种负载方式:

round-robin:轮训调度,默认
ip_hash:会话绑定
least_conn:最少会话链接

1.3 backup 服务器

   upstream webserver {
        server 10.2.61.23:8080 weight=1 max_fails=3 fail_timeout=5;
        server 10.2.61.21:8021 backup;


        }
    server {
        listen 8008;
        server_name localhost;
        location / {
            proxy_pass http://webserver ;
            proxy_set_header X_Forworded_For $remote_addr;

        }
        location ~* ^/aab/ {
            add_header webserver $upstream_addr;
            proxy_pass http://webserver;
            proxy_set_header X_Forworded_For $remote_addr;
        }
        }

1.4  实现动静分离:

复制代码
upstream web {
    server  192.168.0.1 weight=1 max_fails=2  fail_timeout=2;
    server  192.168.0.2 weight=1 max_fails=2  fail_timeout=2;
} 

upstream image  {
    server  192.168.0.3 weight=1 max_fails=2  fail_timeout=2;
    server  192.168.0.4 weight=1 max_fails=2  fail_timeout=2;
} 

upstream php {
    server  192.168.0.5 weight=1 max_fails=2  fail_timeout=2;
    server  192.168.0.6 weight=1 max_fails=2  fail_timeout=2;
} 

location  /{
    root html/web;
    index  index.php index.html;
}

location ~* .php$ {
    fastcgi_proxy  http://php;
}

location ~* ".(.jpg|png|jpeg|gif)" {
    proxy_pass http://image;
}

1.5  实现数据缓存:

缓存是缓存nginx服务器接收请求过的数据,数据超时时间不能太长,因为数据可能会发生变化,但是nginx服务器内部的缓存的数据还没有更细,会导致客户端请求的数据不是最新数据的问题,数据缓存目录不能定义在server快内,要定义在http块中。

proxy_cache_path  /usr/local/nginx/cache/first levels=1:2  keys_zone=first:20m max_size=1g; #定义缓存路径与参数
    upstream webserver {
        server 10.2.61.23:8080 weight=1 max_fails=3 fail_timeout=5;
        #server 10.2.61.21:8021 backup;
        #server 10.2.61.23:8000 weight=1 max_fails=3 fail_timeout=5;

        }
    server {
        listen 8008;
        server_name localhost;
        location / {
            proxy_pass http://webserver;
            proxy_set_header Host $host;
            #add_header Host $upstream_addr ;
            add_header X_Via $server_addr;  #添加服务器地址到报文头部
            add_header X-Cache $upstream_cache_status;  #添加缓存状态到报文头部
            proxy_cache first;                #调用缓存
            proxy_cache_valid 200 10m;   #为状态码 为200 的缓存设置缓存时间为 10 分钟,不定义缓存不生效
            proxy_set_header X_Forworded_For $remote_addr;

        }
        location ~* ^/aab/ {
            add_header webserver $upstream_addr;
            proxy_pass http://webserver;
            proxy_set_header X_Forworded_For $remote_addr;
        }
        }


#/usr/local/nginx/cache/first定义缓存目录参数
#evels=1:2  定义两层目录,第一层一个字符名称,第二个两个字符名称
#keys_zone=first:20m 每个缓存都是一个共享内存空间。这就是用户定义共享内存空间地址的名称
#max_size=1g 定义目录最大空间为1g,因为缓存空间越大搜索数据越慢,因此不宜太大。
 

 

 1.6  另外常用的三种缓存:

open_log_cache:日志缓存,降低磁盘IO
open_file_cache:打开文件句柄缓存,将文件缓存至 Nginx管理的内存当中加速响应
fastcgi_cache:缓存后端php服务器的内容,当时如果php内容发生更改则会导致客户端访问的页面不是最新的,因此要慎用。

另外Nginx的limit限制也是基于内存共享来实现的

1.7 sticky 会话保持,基于自定义cookie 进行会话保持的方式

安装包下载地址:https://github.com/bymaximus/nginx-sticky-module-ng

 ./configure  --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre=/usr/local/src/pcre-8.42 --with-zlib=/usr/local/src/zlib-1.2.11 --with-stream --add-module=/usr/local/src/nginx-1.14.2/echo-nginx-module-master --add-module=/usr/local/src/headers-more-nginx-module-master --add-module=/usr/local/src/nginx-sticky-module-ng-master
    upstream webserver {
    server 10.2.61.23:8080 weight=1 max_fails=3 fail_timeout=5;
    #server 10.2.61.21:8021 backup;
    server 10.2.61.23:8000 weight=1 max_fails=3 fail_timeout=5;
    sticky   expires=1h  path=/;
    
    }

  upstream webserver {
    server 10.2.61.23:8080 weight=1 max_fails=3 fail_timeout=5;
    #server 10.2.61.21:8021 backup;
    server 10.2.61.23:8000 weight=1 max_fails=3 fail_timeout=5;
    sticky name=srv_id  expires=1h  path=/;
    
    }

原文地址:https://www.cnblogs.com/zy09/p/10334906.html