阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Nginx 负载均衡以及缓存服务器配置

208次阅读
没有评论

共计 6822 个字符,预计需要花费 18 分钟才能阅读完成。

一、Nginx 负载均衡
Nginx 负载均衡配置很简单,可以实现 7 层的负载,对一些轻量级访问量的站点还是很实用的。

1、架构
系统版本:CentOS 6.6 x86_64
nginx 版本:1.10.2  #当前最新版本
服务器:
负载均衡 server  10.0.18.146 端口 80
后端 web server  10.0.18.144 端口 80  10.0.18.145 端口 80

2、配置过程
在三台服务器上配置 nginx 的 yum 源
#cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
然后使用 yum 安装 nginx
#yum install nginx -y

在三台服务器上配置打开文件数
#tail -5 /etc/security/limits.conf 
# End of file
* soft nofile 65535
* hard nofile 65535
* soft    nproc    10240         
* hard    nproc    10240

配置后端两台 server:10.0.18.144,如下:
#cat /etc/nginx/nginx.conf          #修改如下两项,其他不变
events {
    use epoll;                      #使用 epoll
    worker_connections  10240;      #增加连接数
}
#cat /etc/nginx/conf.d/default.conf #修改 server_name 其他不变
server {
    listen      80;
    server_name  nginx1.test.com;
………………
}
修改默认页面如下:
#cat /usr/share/nginx/html/index.html  #增加 18.144,其他不变
…………
<h1>Welcome to nginx 18.144!</h1>
…………
启动 nginx
#service nginx start

在物理机添加域名解析如下:
添加在 hosts 中 —>C:\Windows\System32\drivers\etc\hosts
10.0.18.144 nginx1.test.com
10.0.18.145 nginx2.test.com
10.0.18.146 balance.test.com

在浏览器访问,如下:

Nginx 负载均衡以及缓存服务器配置

配置后端两台 server:10.0.18.145, 方法和 18.144 一样,不再赘述,在浏览器访问如下:

Nginx 负载均衡以及缓存服务器配置

3、配置负载均衡 server
先查看配置文件:

#cat nginx.conf
events {
    use epoll;
    worker_connections  10240;
}
 
http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                      ‘”$http_user_agent” “$http_x_forwarded_for”‘;
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush    on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    #include /etc/nginx/conf.d/*.conf;
    upstream backend {#添加的后端 server,权重为 1
          server 10.0.18.144 weight=1;
          server 10.0.18.145 weight=1;
  }
  server {
        listen 80;
        server_name balance.test.com;
        location / {
            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_buffering on;          #开启缓存
            proxy_pass    #方向代理地址
        } 
}
}
然后启动 nginx
#service nginx start

在浏览器访问 http://balance.test.com 进行测试:

Nginx 负载均衡以及缓存服务器配置

不断刷新浏览器,是可以看到 18.144 和 18.145 轮流相应的,如下:

Nginx 负载均衡以及缓存服务器配置

这样就实现了 nginx 的负载均衡机制,很简单!

二、nginx upstream 的几种方式:
1、轮询
轮询是 upstream 的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器 down 掉后,能自动剔除,如下:
upstream backend {
            server 192.168.1.101:80;
            server 192.168.1.102:8080;    #后端的端口可以不一样,在这里配置上就 OK
        }

2、weight
 轮询的加强版,即可以指定轮询比率,weight 和访问几率成正比,主要应用于后端服务器配置不同的场景下,如下:
upstream backend {
            server 192.168.1.101 weight=1;
            server 192.168.1.102 weight=2;  #权重越大,相应 web 端的几率越大
        }
也可以这样:
upstream backend {
            server 192.168.1.101:80 weight=1;
            server 192.168.1.102:8080 weight=2; 
        }

3、ip_hash
每个请求按照访问 ip(即 Nginx 的前置服务器或者客户端 IP)的 hash 结果分配,这样每个访客会固定访问一个后端服务器,可以解决 session 一致问题, 如下:
 upstream backend {
            ip_hash;
            server 192.168.1.101;
            server 192.168.1.102; 
        }

4、fair
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;
}
其中,hash_method 为使用的 hash 算法,需要注意的是此时,server 语句中不能加 weight 等参数。

注意:max_fails 和 fail_timeout 一般会关联使用,如果某台 server 在 fail_timeout 时间内出现了 max_fails 次连接失败,那么 Nginx 会认为其已经挂掉了,从而在 fail_timeout 时间内不再去请求它,fail_timeout 默认是 10s,max_fails 默认是 1,即默认情况是只要发生错误就认为服务器挂掉了,如果将 max_fails 设置为 0,则表示取消这项检查,如下:
upstream backend {
      server    backend1.example.com  weight=5;
      server    127.0.0.1:8080  max_fails=3 fail_timeout=30s;
      server    unix:/tmp/backend3;           
}

三、配置 nginx 反向代理实现 web 缓存服务器
nginx 支持类似 squid 的 web 缓存功能,就是把 web 页面根据 url 编码哈希后保存到硬盘上,有很多资料显示,nginx 的稳定性和速度不逊于 Squid,而且在性能上 nginx 对多核 cpu 的利用也超过 Squid。而且 nginx 也同时支持负载均衡,这对于在短期内突然顶不住访问量的网站来说十分的便利,配置如下:
在负载均衡服务器配置:10.0.18.146
#cat nginx.conf
user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    use epoll;
    worker_connections  10240;
}
 
 
http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                      ‘”$http_user_agent” “$http_x_forwarded_for”‘;
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush    on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    #include /etc/nginx/conf.d/*.conf;
    proxy_temp_path /usr/local/nginx/proxy_temp_dir; #注:proxy_temp_path 和 proxy_cache_path 指定的路径必须在同一分区
    proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=30g;
    #设置 Web 缓存区名称为 cache_one,内存缓存空间大小为 100MB,1 天没有被访问的内容自动清除,硬盘缓存空间大小为 20GB
    upstream backend {
          server 10.0.18.144:80 weight=1;
          server 10.0.18.145:8080 weight=1;
    }
    server {
        listen 80;
        server_name balance.test.com;
        location / {
            #如果后端的服务器返回 502、504、执行超时等错误,自动将请求转发到 upstream 负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache cache_one;
            proxy_cache_valid 200 304 12h;  #对不同的 HTTP 状态码设置不同的缓存时间
            proxy_cache_key $host$uri$is_args$args; #以域名、URI、参数组合成 Web 缓存的 Key 值,Nginx 根据 Key 值哈希,存储缓存内容到二级缓存目录内
            #设置主机头和客户端真实地址
            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_buffering on; #禁用缓存
            proxy_pass  #后端 server 
            expires 1d;  #缓存,相当于 cookies,1d 表示 1 天,1m 表示 1 分钟(不确定)
        }
        #location ~ /purge(/.*) {#使用 purge,用于清除缓存,需要编译 ngx_cache_purge
        #  allow 127.0.0.1;
        #  deny all;
        #  proxy_cache_purge cache_one $host$1$is_args$args;
        #}
 
}
}
创建目录:
#mkdir -pv /usr/local/nginx/{proxy_cache_dir,proxy_temp_dir}
重启 nginx,确保成功!
#service nginx restart

然后到 18.144 和 18.145 的网页存放路径分别创建 test.html,内容如下:
18.144
#cat /usr/share/nginx/html/test.html 
<h1>This is a test page 18.144</h1>
18.145
#cat /usr/share/nginx/html/test.html 
<h1>This is a test page 18.145</h1>

然后通过负载均衡域名来访问,http://balance.test.com/test.html 显示页面如下:

Nginx 负载均衡以及缓存服务器配置

然后不停刷新或者更换不同的浏览器,一直都是 18.145 这台 server 响应,因为设置了缓存,第一次访问之后,就会将数据缓存起来,直到设置的缓存过期时间生效为止,然后这个时候到负载均衡服务器查看缓存信息:
#cd /usr/local/nginx/
#ll proxy_cache_dir/9/41/
total 4
-rw——- 1 nginx nginx 444 Nov  4 16:53 b5e4d782cfd84da92097d8ed956fb419
可以看到缓存文件已经生成了!

查看缓存内容,如下图:

Nginx 负载均衡以及缓存服务器配置

可以看到缓存的是 18.145 这个页面!
现在将缓存手动删除,那么更换浏览器访问 http://balance.test.com/test.html 会出现 18.144 响应的页面,如下:
#cd /usr/local/nginx
#rm -rf proxy_cache_dir/*
访问页面如下:

Nginx 负载均衡以及缓存服务器配置

查看缓存内容, 如下图:

Nginx 负载均衡以及缓存服务器配置

到这里就结束了!不足之处,请多多指教!

Nginx、Apache 工作原理及 Nginx 为何比 Apache 高效  http://www.linuxidc.com/Linux/2017-03/141896.htm

CentOS 7 下 Nginx 服务器的安装配置  http://www.linuxidc.com/Linux/2017-04/142986.htm

CentOS 上安装 Nginx 服务器实现虚拟主机和域名重定向  http://www.linuxidc.com/Linux/2017-04/142642.htm

CentOS 6.8 安装 LNMP 环境(Linux+Nginx+MySQL+PHP)http://www.linuxidc.com/Linux/2017-04/142880.htm

Nginx 服务的 SSL 认证和 htpasswd 认证  http://www.linuxidc.com/Linux/2017-04/142478.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

CentOS 7.2 下 Nginx+PHP+MySQL+Memcache 缓存服务器安装配置  http://www.linuxidc.com/Linux/2017-03/142168.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-05/143427.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6822字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中