1、轮询(weight)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。默认当weight不指定时,各服务器weight相同,每个请求按时间顺序逐一分配到不同的后端服务器。如果后端服务器down掉,能自动剔除。
1 | upstream bakend { |
2、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session不能跨服务器的问题。如果后端服务器down掉,要手工down掉。
1 | upstream resinserver{ |
3、fair(第三方插件)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1 | upstream resinserver{ |
4、url_hash(第三方插件)
按访问url
的hash
结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存服务器时比较有效。在upstream中加入hash语句,hash_method指定使用的hash算法。
1 | upstream resinserver{ |
5、负载均衡实例
1 | upstream tel_img_stream { |
说明:
down
:表示当前的server暂时不参与负载 。weight
:权重,默认为1,weight越大,负载的权重就越大。max_fails
:失败次数,默认为1。当超过max_fails
时,返回proxy_next_upstream
模块定义的错误。fail_timeout
:如果在fail_timeout
期间后端失败了max_fails
次,那么就将这个后端标识为不可用,在接下来的fail_timeout
期间, NGINX 不会再将请求分配到这个后端。backup
:备用服务器,所有非backup机器
宕机或者不可用的时候,请求backup机器。
注:
- Nginx默认判断失败节点状态以
connect refuse
和timeout
状态为准,不以HTTP错误状态进行判断失败,除非添加了proxy_next_upstream
指令设置对404、502、503、504、500和time out
等错误转到备机处理。
6、proxy_next_upstream
proxy_next_upstream
指令,指定了应将请求传递到下一个服务器的情况:
1 | Syntax: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...; |
1 | error:在与服务器建立连接,向其传递请求或读取响应标头时发生错误 |