一、location的写法
语法:
location[=|~|~*|^~] uri地址 {
........
........
}
1、= 精确匹配
2、~ 通过正则表达式匹配请求,区分大小写
3、~* 通过正则表达式请求,不区分大小写
4、^~ 不以正则表达式匹配请求
非常关键:
优先级:从高到低
=,^~,~,~*
案例:配置错误页面
二、http的反向代理
location {
proxy_pass 后端服务器:
}
1、定义location如果明确的写了uri地址,反向代理时也要写具体的uri地址
2、定义location如果使用正则表达式,反向代理时只能写到后端服务器地址结束
案例1:配置nginx将所有请求转交给后端服务器
做反向代理,后端必须有真实的网站服务器存在,将一台机器装上httpd作为网站服务器使用
删除默认的欢迎页面,重新写页面
确保httpd本身可以访问
在shell的虚拟主机做配置
案例2:将/test1请求转交给后端服务器
现在httpd(后端服务器)上做一个网页,进行访问测试
配置后端服务器记录真实客户端地址
1)在请求中添加真实客户端地址的字段
有反向代理的位置一般都需要添加,这里只演示最下方的一个
还需要修改httpd配置文件,来获取windows的访问IP
2)修改httpd访问日志格式
获取的IP就变为了客户端IP
三、upstream模块
作用:
1、将多台web服务器定义为一个upstream组,实现web服务的负载均衡
2、提供对后端服务器健康状态检查
1、调度算法
1、rr 轮询 默认算法
优势:后端的每个服务处理的请求最大数相同,负载均衡效果好
支持为后端服务器设置不同的权重值,避免资源浪费
解决会话session保持/持久的方案:
1)使用noSQL数据库作为会话的共享存储
2)换调度算法
2、ip_hash
一段时间内,可以将同一个客户端的请求转发到后端的同一个服务器上
2、定义upstream组
upstream 组名称 {
[调度算法];
server IP:port [weight=number] [max_fails=number] [fail_timeout=number]
server IP:port [weight=number] [max_fails=number] [fail_timeout=number]
server IP:port [weight=number] [max_fails=number] [fail_timeout=number]
server IP:port [weight=number] [max_fails=number] [fail_timeout=number] backup
}
backup作用是其他的服务器全部故障,客户端会显示backup服务器,如若web服务器正常,则backup服务器不会显示
不要写在server{ }
location{
proxy_pass http://upstream组名称;
}
案例:基于upstream模块实现web服务器的负载均衡
演示此案例后端至少需要有两个网站服务器
配置shell虚拟主机配置文件
进行访问点击刷新后端服务器会轮流响应
停止一个web服务器,不会影响客户端的正常访问,web01正常访问
全部停止会出现502错误
添加backup服务器
backup服务器没有使用虚拟主机直接在主配置文件中配置的,可以使用虚拟主机