关于Nginx你了解多少了呢

这是我参与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;  //此处为要被代理的服务器的地址
    }
}
复制代码

弦外之音

感谢你的阅读,如果你感觉学到了东西,您可以点赞,关注。也欢迎有问题我们下面评论交流

加油! 我们下期再见!

给大家分享几个我前面写的几篇骚操作

copy对象,这个操作有点骚!

干货!SpringBoot利用监听事件,实现异步操作

猜你喜欢

转载自juejin.im/post/7035985259439063047