Loading... ## 前言 最近开放使用的 RSSHub 总是爆炸,这台1G1H的小鸡承受了它不该承受的压力。考虑到还有挺多闲置的服务器,就来给它做个负载均衡吧,减轻它的压力。 ## 配置负载均衡 直接贴配置文件吧 ```bash http { # ... 省略其它配置 upstream rsshub { server 192.168.0.100:8080 weight=2 max_fails=3; server 192.168.0.101:8080 weight=2 max_fails=3; server example.com:8080 weight=2 max_fails=3; } server { listen 80; location / { proxy_pass http://rsshub; } } # ... 省略其它配置 } ``` - proxy_pass http://rsshub:表示将所有请求转发到rsshub 服务器组中配置的某一台服务器上。 - upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器。rsshub 是服务器组的名称。 - upstream模块下的server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。通过上面的配置,Nginx默认将请求依次分配给100,101,102来处理,可以通过修改下面这些参数来改变默认的分配策略: **weight** 默认为1,将请求平均分配给每台server ```bash upstream rsshub { server 192.168.0.100:8080 weight=2; # 2/6次 server 192.168.0.101:8080 weight=3; # 3/6次 server 192.168.0.102:8080 weight=1; # 1/6次 } ``` 上例配置,表示6次请求中,100分配2次,101分配3次,102分配1次 **max_fails** 默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令来处理这次错误的请求。 **fail_timeout** 默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它 ```bash upstream tomcats { server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15; server 192.168.0.101:8080 weight=3; server 192.168.0.102:8080 weight=1; } ``` 192.168.0.100这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。 **down** 标识某一台server不可用。 **max_conns** 限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置 ```bash upstream tomcats { server 192.168.0.100:8080 max_conns=1000; } ``` 表示最多给100这台Server分配1000个请求,如果这台Server正在处理1000个请求,nginx将不会分配新的请求给到它。假如有一个请求处理完了,还剩下999个请求在处理,这时nginx也会将新的请求分配给它。 **resolve** 将server指令配置的域名,指定域名解析服务器。需要在http模块下配置resolver指令,指定域名解析服务 ```bash http { resolver 10.0.0.1; upstream u { zone ...; ... server example.com resolve; } } ``` 表示example.com域名,由10.0.0.1服务器来负责解析。 upstream模块server指令的其它参数和详细配置说明,请参考[官方文档](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server "官方文档")。 ## 配置缓存 Nginx实现缓存是通过代理缓存pxory_cache, 这也是ngx_http_proxy_module模块提供的功能, 这里配置选项较多, 常用的选项有: proxy_cache_path、 proxy_cache和proxy_cache_valid。 **proxy_cache_path** proxy_cache_path定义一个完整的缓存空间,指定缓存数据的磁盘路径、索引存放的内存空间以及一些其他参数,如缓存删除策略。 注意:该选项只能定义在http块上下文中。 如: ```bash proxy_cache_path /data/cache levels=1:2 keys_zone=web:10m max_size=1G inactive=10; ``` 具体参数 ```bash levels:配置在该目录下再分两层目录,一层1个随机字符作为名称,二层2个随机字符作为名称,levels最多三层,每层最多两个字符,这是为了加快访问文件的速度;最后使用代理url的哈希值作为关键字与文件名,一个缓存数据如下: /data/nginx/cache/c/29/b7f54b2df7773722d382f4809d65029c; keys_zone:用来为这个缓存区起名,并设置大小。上面的例子就是指定名称为web,这个名称后面proxy_cache需要引用;而10m就是内存空间的大小; max_size:指定最大缓存数据磁盘空间的大小; inactive:在inactive指定的时间内,未被访问的缓存数据将从缓存中删除。 ``` **proxy_cache** proxy_cache用来引用上面proxy_cache_path定义的缓存空间, 现时打开缓存功能, 如下: ```bash proxy_cache web; //引用上面定义上的缓存空间, 同一缓存空间可以在几个地方使用 ``` **proxy_cache_valid** proxy_cache_valid设置不同响应代码的缓存时间, 如: ```bash proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; ``` **配置nginx缓存实例** 先配置proxy_cache_path,再配置proxy_cache引用、打开缓存空间,接着配置两个proxy_cache_valid;为方便调试测试,我们可以通过add_header给请求响应增加一个头部信息,表示从服务器上返回的cache状态怎么样(有没有命中),主要配置如下: 定义一个完整的缓存空间;缓存数据存储在/data/cache目录中;配置在该目录下再分两层目录;名称为web(proxy_cache引用);10m内存空间大小;最大缓存数据磁盘空间的大小;10分钟未被访问的缓存数据将从缓存中删除 ```bash http { proxy_cache_path /data/cache levels=1:2 keys_zone=web:10m max_size=1G inactive=10m; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; add_header linuxidc-Cache "$upstream_cache_status form $server_addr"; //给请求响应增加一个头部信息,表示从服务器上返回的cache状态怎么样(有没有命中) location / { proxy_pass http://rsshub; //引用上面定义的upstream负载均衡组 proxy_cache web; //引用上面定义上的缓存空间,同一缓存空间可以在几个地方使用 proxy_cache_valid 200 302 10m; proxy_cache_valid 404 1m; //对代码200和302的响应设置10分钟的缓存,对代码404的响应设置为1分钟; } } } ``` ## 相关 **参考文章 ** [Nginx负载均衡配置](https://blog.csdn.net/xyang81/article/details/51702900 "Nginx负载均衡配置") [nginx负载均衡之后设置缓存](https://blog.csdn.net/qq_39131177/article/details/79738795 "nginx负载均衡之后设置缓存") Last modification:June 15th, 2020 at 08:54 pm © 允许规范转载 Support If you think my article is useful to you, please feel free to appreciate ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat
Comment here is closed