简介
nginx 通过 upstream 实现负载均衡, upstream 目前支持5种方式。
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver { |
指定权重
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver { |
IP 绑定 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream backserver { |
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver { |
url_hash(第三方)
按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver { |
其他
upstream
还可以为每个设备设置状态值,这些状态值的含义分别如下:
状态值 | 含义 |
---|---|
down | 表示单前的 server 暂时不参与负载 |
weight | 默认为1, weight 越大负载的权重就越大 |
max_fails | 允许请求失败的次数默认为1,当超过最大次数时返回 proxy_next_upstream 模块定义的错误 |
fail_timeout | max_fails 次失败后,暂停的时间 |
backup | 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器,所以这台机器压力会最轻 |
例如:
upstream bakend{ |
超时时间设置
django + uwsgi + nginx 部署的 web 站点运行时报504 , 可能是超时时间设置有问题。
nginx 和 uwsgi 整合时有三个参数可以用于设置超时时间,在 nginx 配置文件 http -> server -> location 中设置。
uwsgi_connect_timeout :默认60秒,与 uwsgi-server 连接的超时时间,该值不能超过75秒.若在超时时间内未能成功连接则断开连接尝试。 |
注:这里还需要排除其他原因,根据具体环境而定,如使用 aws 的 LB 就会有空闲时间的限制
响应状态码
504 网关超时 Gateway timeout(例如nginx正在处理但是程序执行过程太长,nginx配置的等待时间较短,于是时间到了超时返回504,排查超时时间等因素) |