Nginx知识总结
1.openresty 通过 Lua 扩展 NGINX 实现的可伸缩的 Web 平台。
1.Nginx变量
我是用set命令自定义了一个变量
1 | set $flag "1"; |
但是使用if进行判断的时候,总是提示:unknown directive “if($flag”,导致nginx无法启动。
最后的解决方案:
(1) 竟然是因为if和括号之间要有一个空格,否则就会报错
(2) 还有就是if中的等号,是一个=,不是==。
1.nginx配置自定义变量实现日志动态分发 (这里有很多的nginx变量的说明)
2.nginx自定义变量与内置预定义变量 (这里也有很多的内置变量的说明)
3.Nginx中if语句中的判断条件 (nginx中的if语句,这里有个错误就是等会他写成了双等号,而不是单等号)
4.Nginx: if 逻辑运算(&&,||)实现 (这里实现了nginx的逻辑and,也进行了if和括号空格的说明)
2.负载均衡
(1) 定义服务路径
在http节点中定义upstream对象,其中的负载均衡算法主要有轮询、加权轮询、IP_hash、URL_hash、最小连接数
1 | ## 1、down 表示单前的server暂时不参与负载 |
(2) 定义转发
在server节点的内部,定义proxy_pass实现转发
1 | location / { |
1.Nginx负载均衡配置
2.Nginx+upstream针对后端服务器容错的配置说明 (各种负载均衡的方法都说了如何去做)
3.五分钟看懂 Nginx 负载均衡 (讲解了什么是正向代理,以及反响代理,负载均衡算法:轮询、加权轮询、IP哈希、URL哈希、最小🔗数,并且用一个Node + Express的站点进行了轮询的测试)
4.Nginx反向代理,负载均衡,redis session共享,keepalived高可用 (nginx负载均衡、redis数据复制、keepalived高可用性)
5.从入门到精通-Nginx,图文并茂、负载均衡、动静分离、虚拟主机 附案例源码 入门、配置,到负载均衡,各项内容都有涉及,非常的详细
6.nginx upstream的五种分配方式 五种负载方式的说明
3.负载容错
配置了负载均衡之后,如何进行负载均衡的重试呢?就是如果其中一台服务器返回了503状态码,就进行下一个服务器请求。
【解决方法】
主要就是增加 proxy_next_upstream 配置,当出现503错误的时候,直接进行下一次尝试。语法:
proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | non_idempotent | off …;
默认: proxy_next_upstream error timeout;
上下文: http, server, location
指定请求应传递到下一个服务器的情况:
error:在与服务器建立连接,向其传递请求或读取响应标头时发生错误;
timeout:在与服务器建立连接,向其传递请求或读取响应头时发生超时;
invalid_header:服务器返回空响应或无效响应;
http_500:服务器返回了带有代码500的响应;
http_502:服务器返回具有代码502的响应;
HTTP_503:服务器返回具有代码503的响应;
http_504:服务器返回具有代码504的响应;
http_403:服务器返回带有代码403的响应;
http_404:服务器返回具有代码404的响应;
non_idempotent:通常,如果请求已经被发送到上游服务器(1.9.13),则具有非幂等方法的请求(POST,LOCK,PATCH)不被传递到下一个服务器;启用此选项明确允许重试此类请求;
off:禁用将请求传递到下一个服务器。
1 | upstream example_upstream{ |
注意事项
刚开始我配置了proxy_next_upstream之后,配置了max_fails,还是不生效,服务器返回503之后,总是还是会请求这个服务器,最后通过参考文章7,才最终解决了问题。我到请求是post请求,所以需要添加non_idempotent参数。
1.Nginx+upstream针对后端服务器容错的配置说明
2.Nginx 失败重试机制
3.nginx 通过proxy_next_upstream实现容灾和重复处理问题 两种不同的运用场景,当其中一台返回错误码404,500…等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,设置proxy_next_upstream;当访问A时,A返回error timeout时,访问会继续分配到下一台服务器处理,就等于一个请求分发到多台服务器,就可能出现多次处理的情况,如果涉及到充值,就有可能充值多次的情况,这种情况下就要把proxy_next_upstream关掉
4.nginx backup 功能 backup参数 ,backup 不能和ip_hash一起使用,backup 参数是指当所有非备机都宕机或者不可用的情况下,就只能使用带backup标准的备机。除此之外,还有防盗链配置、下载限速、创建IP黑名单
5.Nginx负载均衡及算法分析 upstream容错机制介绍、典型的负载均衡策略配置、proxy_next_upstream机制、 Nginx对Round-Robin算法的优化、nginx平滑的基于权重轮询算法;Nginx对gRPC负载均衡的支持
6.nginx重试机制proxy_next_upstream
7.proxy_next_upstream 对POST无效 经过排查原来是只针对GET生效,针对POST等请求,需要增加 non_idempotent ,并且要放在最前面才行
8.nginx中的proxy_next_upstream容错处理 语法和运用场景,都有说明。
9.Nginx容灾 proxy_next_upstream 配置无效 没啥用的。
10.Nginx+upstream针对后端服务器容错的运维笔记 Nginx upstream负载均衡获取后端服务器的流程,GET_RR_PEER: 通过RR算法获取后端流程,绘制了流程图
11.proxy_next_upstream和nginx upstream的排错逻辑可能导致的问题 502 bad gateway,循环
4.root与alias主要区别
(1) root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
(2) 示例:
1 | ## 如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。 |
(3) 注意
alias后面必须要用“/”结束,否则会找不到文件的。。。而root则可有可无~~。
alias只能位于location块中,root可以不放在location中。