跨域配置
#允许跨域请求的域,* 代表所有
add_header 'Access-Control-Allow-Origin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如 GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' *;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
upstream负载均衡配置
upstream tomcats {
server 196.16.1.51:8081;
server 196.16.1.53:8082;
server 196.16.1.54:8083;
server 196.16.1.55:8084;
}
server {
listen 6666;
proxy_pass tomcats;
}
轮训加权重(weight)
upstream tomcats {
server 196.16.1.51:8081 weight=2;
server 196.16.1.53:8082 weight=2;
server 196.16.1.54:8083 weight=3;
server 196.16.1.55:8084 weight=5;
}
注:默认是1,权重越高,被转发的流量越多
upstream指令参数
1、max_conns
限制每台server的连接数,用于保护避免过载,可起到限流作用。
upstream tomcats {
server 196.16.1.51:8081 max_conns=2;
server 196.16.1.53:8082 max_conns=2;
server 196.16.1.54:8083 max_conns=3;
server 196.16.1.55:8084 max_conns=5;
}
2、down
用于标记服务节点不可用
upstream tomcats {
server 196.16.1.51:8081 down;
server 196.16.1.53:8082 weight=2;
server 196.16.1.54:8083 weight=3;
server 196.16.1.55:8084 weight=5;
}
3、backup
表示当前服务器节点是备用机,只有在其他的服务器都宕机以后,自己才会加入到集群中,被用户访问到
upstream tomcats {
server 196.16.1.51:8081 backup;
server 196.16.1.53:8082 weight=2;
server 196.16.1.54:8083 weight=3;
server 196.16.1.55:8084 weight=5;
}
注:backup
参数不能使用在 hash 和 random load balancing 中。
4、max_fails、fail_timeout
max_fails :表示失败几次,则标记server已宕机,剔出上游服务。
fail_timeout :表示失败的重试时间。
设置如下:
max_fails = 2 fail_timeout = 15s
解释:代表在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后再过15秒,这15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复。
keepalive
设置长连接数量
注:长连接数量 不是越大越好,一般设置cpu数量
upstream tomcats {
server 196.16.1.51:8081 backup;
server 196.16.1.53:8082 weight=2;
server 196.16.1.54:8083 weight=3;
server 196.16.1.55:8084 weight=5;
keepalive 16;
}
负载均衡配置方式
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
注:如果出现服务挂掉了,需要重新去计算hash值,避免重新计算的问题,需要使用一致性hash
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
6、一致性hash
ngx_http_upstream_consistent_hash模块是一个又第三方提供的nginx负载均衡模块
下载地址:https://github.com/replay/ngx_http_consistent_hash
将下载好的模块上传到服务器上,并解压该模块
在此目录下分别执行一下命令
./configure --add-module=/root/ngx_http_consistent_hash-master
make
make install
这里需要注意是–add不是-add,我之前一直以为是-add一直不成功,后来才发现原来是–add。–add-module=解压路径/ngx_http_consistent_hash-master
upstream backend {
consistent_hash $remote_addr;
server server1;
server server2;
}
该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,
consistent_hash $remote_addr:可以根据客户端ip映射
consistent_hash $request_uri:根据客户端请求的uri映射
consistent_hash $args:根据客户端携带的参数进行映射
注:
1、哈希算法:hash(ip)%node_counts ,余数为几,就选择第几台服务器
hash(ip):会已逗号获取ip的前三位
node_counts:服务器部署的节点数量