提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
代理
1、正向代理:
是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
2、向代理:
客户端发送请求给反向代理服务器,但是代理服务器上没有客户端需要的资源,代理服务器会判断转发到原始服务器获得资源,并把资源返回给客户端;在整个过程,客户端不知道自己访问的是一个代理服务器,而是一个原始服务器
总结:正向代理代理的是客户端;反向代理代理的是服务器
3、反向代理的实现
在nginx.conf中修改
upstream tomcatserver1 {
server 192.168.72.49:8081;
}
upstream tomcatserver2 {
server 192.168.72.49:8082;
}
server {
listen 80;
server_name 8081.max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver1;
index index.html index.htm;
}
}
server {
listen 80;
server_name 8082.max.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://tomcatserver2;
index index.html index.htm;
}
}
server_name 配置的域名
server_name 配置的是真实地址
1)浏览器访问8081.max.com,通过本地host文件域名解析,找到192.168.72.49服务器(安装nginx)
2)nginx反向代理接受客户机请求,找到server_name为8081.max.com的server节点,根据proxy_pass对应的http路径,将请求转发到upstream tomcatserver1上,即端口号为8081的tomcat服务器。
3)请求8082.max.com,tomcat2接收返回首页
Nginx实现负载均衡
企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案就是使用nginx实现负载均衡。
标题一、负载均衡的作用
1、转发功能
按照一定的算法【权重、轮询、iphash】,将客户端的请求转发到不同服务器上,减轻单个服务器的压力,提升系统的并发量
2、故障移除
通过心跳监测的方式,判断服务器是否正常运作,如果服务器宕机,自动将请求转发到其他服务器
3、恢复添加
如果检测到发生故障的服务器恢复工作,自动将他添加到处理请求的队伍中去
标题二、Nginx实现负载均衡
Nginx的负载分发策略
Nginx 的 upstream目前支持的分配算法:
1)、轮询 ——1:1 轮流处理请求(默认)
- 每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
2)、权重 ——you can you up
- 通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
3)、ip_哈希算法
- 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
Nginx负载均衡器配置:
在默认安装的Nginx配置文件Nginx.conf中。
我们使用 nginx 中的 upstream模块 来实现nginx将跨越单机的限制,完成网络数据的接收、处理和转发。我们主要使用提到的转发功能进行调度分发。
upstream myServer {
server 192.168.72.49:9090 down;
server 192.168.72.49:8080 weight=2;
server 192.168.72.49:6060;
server 192.168.72.49:7070 backup;
//什么都不加,默认轮询
//down 表示单前的server临时不參与负载.
//weight 默觉得1.weight越大,负载的权重就越大
//backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻
}
源地址哈希法
- 对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream myServer {
ip_hash;
server **.***.***.***:8080;
server **.***.***.***:9090;
}