nginx主要功能可一个分为3个。
1、页面地址路由,跳转
2、反向代理,负载均衡
3、静态资源访问
location: 顾名思义-->地址。nginx服务器非常核心的配置,一般nginx运维人员在修改nginx配置时,大部分也是围绕着location这个配置进行修改
location路径匹配规则
匹配分为3种匹配方式 。
1、绝对匹配,完全相等 “=” 号 ,比如:
location = /login/demo.html {
*******
}
当访问地址端口后面的地址等于/login/demo.html时,就会直接走这个location地址。
2、正则匹配 ~ 或者 ~* 。前一个区分大小写,后一个不区分大小写
location ^~ /images/ {
# 匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
location ~* .(gif|jpg|jpeg)$ {
# 匹配任何已.gif、.jpg 或 .jpeg 结尾的请求
3、一般匹配 无符号 ,无符号匹配就算匹配中,也不会break,还会继续向下匹配下去,如果发现正则或者完全匹配的情况,则直接使用。
upstream负载均衡的算法
轮询算法(默认算法):每个请求会依次分配给后端不同的应用程序服务器,不理会后端服务器的实际压力。如下面代码,当用户访问www.myserver.com站点时,Nginx会负载平衡分配给后端的三个服务器。使用ab做压力测试可以看到在加了负载均衡后Time per request(每个请求平均消耗时间)降低、Request per second(每秒请求数)提升。如果没有配置upstream模块而只使用proxy_pass模块,可以实现反向代理的作用。
http { #upstream模块包含在http模块下 | ||
upstream myserver{ #定义upstream名字,下面会引用 |
server 192.168.2.100; #指定后端服务器地址 | |
server 192.168.2.110; #指定后端服务器地址 |
server 192.168.2.120; #指定后端服务器地址 | ||
} |
server { | ||
listen 80; |
server name www.myserver.com; | ||
location / { |
proxy_pass http://myserver; #引用upstream | ||
} |
} | ||
} |
加权负载均衡:权重越大的服务器,被分配到的次数就会越多,通常用于后端服务器性能不一致的情况。在下面代码中,每3个请求都分配给192.168.2.100,然后第4个请求会分配给192.168.2.110,如此循环下去
http { | ||
upstream myserver{ |
server 192.168.2.100 weight=3; #指定后端服务器地址,权重为3 | ||
server 192.168.2.110; |
} | ||
server { |
listen 80; | ||
server name www.myserver.com; |
location / { | ||
proxy_pass http://myserver; |
} | ||
} |
} |
IP HASH:当同IP进行重复访问时会被指定到上次访问到的服务器,可以解决动态网站SESSION共享问题。如果需要将客户与后端一台服务器“绑定”起来,可以使用ip-hash负载平衡。这样可以确保来自相同客户机的请求总是指向相同的服务器除非该服务器不可用。
upstream myserver { | ||
ip_hash; #采用IP HASH算法 |
server 192.168.2.100; | |
server 192.168.2.110; |
server 192.168.2.120; | ||
} |
基于URL的HASH:当客户端多次访问同一个地址时分配到固定的节点
upstream myserver { | ||
hash $request_uri; |
server 192.168.2.100; | |
server 192.168.2.110; |
server 192.168.2.120; | ||
} |
最少连接数轮询:哪个节点当前的连接数少就分配给哪个节点处理
least_conn; |