反向代理
代理与反向代理

反向代理的示例图
正反代理
正向代理:客户端知道要访问的服务器地址,但服务器只知道请求来自某个代理,而不清楚具体的客户端。正向代理隐藏了真实客户端的信息。例如,当无法直接访问国外网站时,我们通过代理服务器访问特定网址

反向代理:多个客户端向反向代理服务器发送请求,Nginx 根据一定的规则将请求转发至不同的服务器。客户端不知道具体请求将被转发至哪台服务器,反向代理隐藏了后端服务器的信息

基于反向代理的负载均衡
nginx转发请求到某一个服务器的时候,如果服务器请求上限了,那么会转发到另一台功能一摸一样的服务器上,不至于让一台服务器去处理所有的内容
反向代理的配置
在location(http > server)配置内root和proxy_pass这两个选一个使用,代理使用proxy_pass
proxy_pass 后面跟的有两种,一个是要代理的地址,一个是一组服务器
server {
listen 80;
server_name bd.a.top;
location / {
proxy_pass http://www.baidu.com;
}
}
上例是一个代理网址的示例,注:代理https
会导致无法reload,可能是因为没有配置ssl证书
一组使用:使用upstream进行定义一组服务器
upstream 别名 {
server 地址:端口;
server 地址:端口;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://别名;
}
}
上面的是一组服务器,每次访问都会在upstream的服务器中每个服务器各一下
负载均衡策略
轮询:默认情况下使用轮询方式,逐一转发,这种方式适用于无状态请求,无法保持会话
权重(weight)
假设有三台服务器,每台服务器性能不一样,这时候雨露均沾的做法显现是不合理的,所以就是用权重去分配比例,权重高的多出力一点,权重晓得则少出力一点
upstream 别名 {
server 地址:端口 weight=8;
server 地址:端口 weight=5;
server 地址:端口 weight=1;
}
以上就是权重的配置
在权重后设置了down之后,服务器不在参与负载均衡,如:server 地址:端口 weight=1 down;
在权重后设置了backup之后,代表该服务器是备用服务器,就表示如果上面的所有服务器全部都挂了,在使用这个服务器,如:server 地址:端口 weight=1 backup;
过时策略
IP_hash:根据客户端的ip地址转发同一台服务器
least_conn:最少连接访问
url_hash:根据用户访问的url定向转发请求
fair:根据后端服务器响应时间转发请求
URLRewrite
作用:隐藏后端服务器的真实物理地址
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
proxy_pass http://localhost:8080;
}
在location中进行使用rewrite关键字
/([0-9]+).html$:这段是游览器请求的地址值,开头$结尾,匹配多个数字并捕获一个组($1)
使用
()
进行捕获组
/index.jsp?pageNum=$1:这个是请求的真实内容,后面的$1
就是使用前面捕获的参数数字
后面的break是一个flag标记说明,具体有:
- last:停止处理当前的rewrite指令集,并按重写后的URI重新启动处理过程。
- break:停止当前循环中的rewrite指令集,并将处理权交还给Nginx的location或location匹配项。
- redirect:返回临时重定向(HTTP状态码302)。
- permanent:返回永久重定向(HTTP状态码301)。
当访问/123.html
就相当于访问/index.jsp?pageNum=123
负载均衡+URLRewrite
upstream 别名 {
server 地址:端口;
server 地址:端口;
}
server {
listen 80;
server_name localhost;
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
proxy_pass http://别名;
}
}