负载均衡配置
nginx的upstream目前支持4种方式的分配
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4:down 暂时不参与负载 如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
首先给大家说下upstream这个配置的,这个配置是写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有2中写法。
upstream mysvr {
server 192.168.10.121:3333;
server 192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass http://mysvr; #请求转向mysvr 定义的服务器列表
}
upstream mysvr {
server http://192.168.10.121:3333;
server http://192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass mysvr; #请求转向mysvr 定义的服务器列表
}
1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
}
3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}
5、如果你对上面4种均衡算法不是很理解,那么麻烦您去看下我上一篇配的图片,可能会更加容易理解点。
到这里你是不是感觉nginx的负载均衡配置特别简单与强大,那么还没完,咱们继续哈,这里扯下蛋。
关于nginx负载均衡配置的几个状态参数讲解。
-
down,表示当前的server暂时不参与负载均衡。
-
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
-
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
-
fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
upstream mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
到这里应该可以说nginx的内置负载均衡算法已经没有货啦。如果你像跟多更深入的了解nginx的负载均衡算法,nginx官方提供一些插件大家可以了解下。
跨域配置
nginx在接收到ajax请求时,会查看origin值,即请求我的网址是谁?
此处使用正则来校验,即:只要是enjoy.com下的网址,都允许访问我
返回信息时,nginx追加header值:access-control-allow-origin = static.enjoy.com(回答浏览器,static域名网址可以访问我)

防盗链
目的:
1、让资源只能在我的页面内显示
2、不能单独来取或者下载
流程:
1、chrome以url1首次请求web服务器,得到html页面。
2、chrome再次发起url2资源请求,携带referers = url1。(注意,是url1,不是本次的url2)
3、nginx校验referers值,决定是否允许访问。
4、下面是nginx校验referers值的过程:
valid_referers:匹配域名白名单,如果不匹配,把内置变量$invalid_referers置为1,进入if块,返回404

缓存
expires命令:过期时间

压缩
带宽资源很贵
--- /html/js/css压缩,/images不压缩
过程:nginx压缩 ----》网络传输 ---》chrome解压(压缩和解压消耗cpu)
1、浏览器携带支持的解压方式
2、浏览器与nginx的交互
nginx配置

常用
$host:请求中的主机头(Host)字段,如果请求中的主机头不可用或者空,则为处理请求的server名称
$http_HEADER : HTTP请求头中的内容,HEADER为HTTP请求中的内容转为小写,
-变为_(破折号变为下划线),例如:$http_user_agent(Uaer-Agent的值)
$remote_addr 客户端的IP地址。
$remote_port 客户端的端口。
$request_method 这个变量是客户端请求的动作,通常为GET或POST。
$request_uri 这个变量等于包含一些客户端请求参数的原始URI
$scheme 所用的协议,比如http或者是https
$server_name 服务器名称。
$server_port 请求到达服务器的端口号。
$server_protocol 请求使用的协议,通常是HTTP/1.0或HTTP/1.1。
$uri 请求中的当前URI(不带请求参数,参数位于$args)
if语句,常用正则
| = ,!= | 比较的一个变量和字符串。 |
| ~, ~* | 与正则表达式匹配的变量,如果这个正则表达式中包含 |
| -f,!-f | 检查一个文件是否存在。 |
| -d, !-d | 检查一个目录是否存在。 |
| -e,!-e | 检查一个文件、目录、符号链接是否存在。 |
| -x, !-x | 检查一个文件是否可执行。 |
静态资源: location ~ /rex/.*\.(htm|js|css)$
域名校验:if ( $http_origin ~ http://(.*).enjoy.com)
浏览器校验:if ($http_user_agent ~ Firefox)
注意点:
1、nginx发明人,认为if语句是邪恶的,所以nginx的if语句比较简单。
2、return 404,是指http的状态码
3、valid_referers命令 :作用是校验referers值--来源
若校验通过,valid_referers=1,则invalid_referers = 0。后续if(invalid_referers){}
4、nginx的压缩和缓存是两个东西。此处缓存只是个通知,告诉浏览器你可以缓存。
5、防盗链,下图是请求资源时,携带的referer = static.enjoy.com。正是当前页面首次加载时的域名
本文详细介绍了nginx的集群配置,包括轮询、权重轮询、ip_hash等负载均衡策略,并讲解了如何配置跨域、防盗链以及缓存和压缩,帮助读者深入理解nginx的高级特性。
404

被折叠的 条评论
为什么被折叠?



