一、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down机,能自动剔除。
二、weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
代码如下:
upstream bakend {
server 192.168.0.12 weight=10;
server 192.168.0.13 weight=10;
}
三、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器。
代码如下:
upstream bakend {
ip_hash;
server 192.168.0.12:88;
server 192.168.0.13:80;
}
四、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
代码如下:
upstream backend {
server server1;
server server2;
fair;
}
五、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
代码如下:
upstream backend {
server squid1:3118;
server squid2:3118;
hash $request_uri;
hash_method crc32;
}
配置实例:
#定义Nginx运行的用户和用户组
user www www;
#nginx进程数,建议设置为等于CPU总核心数。
worker_processes 4;
#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log logs/error.log info;
#进程文件
pid logs/nginx.pid;
events {
#事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型.
use epoll;
#最大并发数
worker_connections 1024;
}
http{
#待选服务器列表
upstream myproject{
# ip_hash指令,将同一用户引入同一服务器。
ip_hash;
server 192..168.10.14 fail_timeout=60s;
server 192..168.10.15;
}
server{
# 监听端口
listen 80;
# 根目录下
location / {
# 选择哪个服务器列表
proxy_pass http://myproject;
}
}
}