这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战
写在前面
关于Nginx你了解多少了呢?
今天我想分享一下负载均衡和镜像服务器。
Nginx负载均衡
nginx负载均衡介绍
负载均衡的意思是在服务器集群中,需要有一台服务器作为调度者,客户端所有的请求都由调度者接收,调度者再根据每台服务器的负载情况,将请求分配给对应的服务器去处理;
在这个过程中,调度者如何合理分配任务,保证所有服务器将性能充分发挥,从而保持服务器集群的整体性能最优,这就是负载均衡的问题了。
nginx负载均衡的方式
1、轮询
轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。
upstream dalaoyang-server{
server localhost:10001;
server localhost:10002;
}
复制代码
2、权重
指定每个服务的权重比例,weight和访问比率成正比,通常用于后端服务机器性能不统一,将性能好的分配权重高来发挥服务器最大性能,如下配置后10002服务的访问比率会是10001服务的二倍。
upstream dalaoyang-server{
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
复制代码
3、iphash
每个请求都根据访问ip的hash结果分配,经过这样的处理,每个访客固定访问一个后端服务,如下配置(ip_hash可以和weight配合使用)。
upstream dalaoyang-server{
ip_hash;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
复制代码
4、最少连接
将请求分配到连接数最少的服务上。
upstream dalaoyang-server{
least_conn;
server localhost:10001 weight=1;
server localhost:10002 weight=2;
}
复制代码
5、fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。需要插件来帮我们实现。
upstream dalaoyang-server{
server localhost:10001 weight=1;
server localhost:10002 weight=2;
fair;
}
复制代码
Nginx配置
以轮询为例,如下是nginx.conf完整代码。
worker_processes 1;
events{
worker_connections 1024;
}
http{
upstream dalaoyang-server{
server localhost:10001;
server localhost:10002;
}
server{
listen 10000;
server_name localhost;
location / {
proxy_pass http://dalaoyang-server;
proxy_redirect default;
}
}
}
复制代码
Nginx镜像服务器
Nginx的proxy_store作用是直接把静态文件在本地硬盘创建并读取,类似于七牛或者又拍这样的镜像CDN功能,首次访问会自动获取源站的静态图片等文件,之后的访问就是直接从CDN服务器读取,加快了速度。
需要配置一下参数:
#启用缓存到本地的功能
proxy_storeon;
#表示用户读写权限,如果在error中报路径不允许访问的话就用"chomod-Ra+rw"将下面配置的路径改为相应的权限
proxy_store_access user:rw group:rw all:rw;
#此处为文件的缓存路径,这个路径是和url中的文件路径一致的
proxy_temp_path 缓存目录;
#在上面的配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,还必须增加:
if(!-e $request_filename){
proxy_pass http://192.168.10.10;
}
注:"!-e$request_filename"正则表达式,匹配缓存目录中的文件与源文件是否存在。
"http://192.168.10.10"源服务器的地址,默认端口80,如监听其他端口,此处要指出,例如4000端口,http://192.168.10.10:4000
复制代码
整体配置如下(修改nginx的配置文件nginx.conf):
location / {
//这里的location是要换成自己经过精确匹配的location,
//比如要缓存图片要写成"location~*\.(gif|jpg|jepg|png|bmp)${"
expires 3d; //所有链接,浏览器缓存过期时间为3天
proxy_set_header Accept-Encoding '';
root /home/mpeg/nginx; //此目录为服务器的根目录,下面的if语句就是判断此目录下是否有响应的文件
proxy_store on; //表示开启缓存
proxy_store_access user:rw group:rw all:rw; //表示用户读写权限
proxy_temp_path /home/mpeg/nginx; //此处为文件的缓存路径,这个路径是和url中的文件路径一致的
if(!-e $request_filename){
proxy_pass http://192.168.0.1; //此处为要被代理的服务器的地址
}
}
复制代码
弦外之音
感谢你的阅读,如果你感觉学到了东西,您可以点赞,关注。也欢迎有问题我们下面评论交流
加油! 我们下期再见!
给大家分享几个我前面写的几篇骚操作