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

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

419次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7995105
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统

从“纸堆”到“电子化”文档:用这个开源系统打造你的智能文档管理系统 大家好,我是星哥。公司的项目文档存了一堆 ...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...