作为代理服务器,一般都需要向上游服务器的集群转发请求,而集群需要将请求进行平均分配,将集群的负载能力运用到最大,这篇文章主要记录一下Nginx关于负载均衡的配置:
1.upstream
语法:upstream name{...}
配置块:http
该配置定义了一个上游服务器集群,便于请求反向代理(proxy_pass)使用:
1 upstream backend { 2 server backend1.example.com; 3 server backend2.example.com; 4 server backend3.example.com; 5 } 6 server { 7 location / { 8 proxy_pass http://backend; 9 } 10 }
2.server
语法:server name[parameters];
配置块:upstream
server配置指定一台上游服务器,可以使用域名、ip地址端口、unix句柄等,而且可以添加如下参数:
1)weight=number:转发权重,权重越大,分配到的请求数越大,可以根据上游服务器的具体资源情况分配
2)max_fails=number:该参数与fail_timeout配合使用,在fail_timeout时间段中,如果转发失败的次数超过了number,Nginx将会把这台上游服务器标记为不可用。
3)fail_time=time:一般与上一个参数配合使用,不再介绍。
4)down:表示上游服务器永久下线(只在使用ip_hash配置时有用)。
5)backup:在ip_hash配置时无效,表示上游服务器只是备份服务器,只有在所有非备份服务器无效才能向备份服务器转发请求。
如:
1 upstream backend { 2 server backend1.example.com weight=5; 3 server 127.0.0.1.8080 max_fails=3 fail_timeout=30s; 4 server unix:/tmp/backend3; 5 }
3.ip_hash
语法:ip_hash;
配置块:upstream
该配置表示根据用户请求的ip地址进行hash,来分配上游服务器,主要用于每一个用户请求需要转发给一台固定的上游服务器的情景。
注:ip_hash与weight配置不能一起使用,俩种策略完全不同,存在冲突。如果upstream集群中有一台上游服务器暂时不可以,我们需要将这台服务器置为down状态,而不是将其删除,这个可以保证转发策略的一贯性。
如:
1 upstream backend{ 2 ip_hash; 3 server backend1.example.com; 4 server backend2.example.com; 5 server backend3.example.com down; 6 server backend4.example.com; 7 }
4.日志记录
如果我们需要在日志中加入负载均衡的信息,可以在定义日志格式的时候使用负载均衡功能提供的变量:
1)$upstream_addr:处理请求的上游服务器地址
2)$upstream_cache_status:是否命中缓存
3)$upstream_status:上游服务器返回的HTTP状态码
4)$upstream_response_time:上游服务器的响应时间,单位-毫秒
5)$upstream_http_$HEADER:HTTP头部
如:
1 log_format timimg '$remote_addr - $remote_user [$time_local] $request' 2 'upstram_response $upstream_response_time' 3 'mses $msec request_time $request_time'; 4 log_format up_head '$remote_addr - $remote_user [$time_local] $request' 5 'upstream_http_content_type $upstream_http_content_type';