这里写自定义目录标题
一、正向代理和反向代理
1.1 正向代理
先搭建一个属于自己的代理服务器
1、用户发送请求到自己的代理服务器
2、自己的代理服务器发送请求到服务器
3、服务器将数据返回到自己的代理服务器
4、自己的代理服务器再将数据返回给用户
- 作用:正向代理隐藏了用户,用户的请求被代理服务器接收代替,到了服务器,服务器并不知道用户是谁。
- 用途:当你用浏览器访问国外的网站时,被block(拒绝)时,你可以在国外搭建一个代理服务器,这样就可以正常访问了
1.2 反向代理
1、用户发送请求到服务器(访问的其实是反向代理服务器,但用户不知道)
2、反向代理服务器发送请求到真正的服务器
3、真正的服务器将数据返回给反向代理服务器
4、反向代理服务器再将数据返回给用户
- 作用:用户请求过多,服务器会有一个处理的极限。所以使用反向代理服务器接受请求,再用均衡负载将请求分布给多个真实的服务器。既能提高效率还有一定的安全性。
- 用途:如果不采用代理,用户的IP、端口号直接暴露在Internet(尽管地址转换NAT),外部主机依然可以根据IP、端口号来开采主机安全漏洞,所以在企业网,一般都是采用代理服务器访问互联网。
正向代理与反向代理最简单的区别:
正向代理隐藏的是用户,反向代理隐藏的是服务器
二、什么是负载均衡
当用户访问量越大时,服务器压力就越大,超过承受能力范围时,服务器就会崩溃,为了避免服务器崩溃,让用户有更好的体验,可以通过负载均衡的方式分担服务器的压力。
用户首先访问代理服务器,通过代理服务器的配置规则访问具体的集群服务器中的一个,来达到分担服务器的压力,避免了服务器崩溃的情况。
负载均衡是通过反向代理的原理来实现的
三、负载均衡的几种常用方式
3.1 轮询方式(Nginx默认的)
3.1.1 普通轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
配置nginx.conf文件
http {
#负载均衡配置
upstream xiaohong{
#服务资源
#配置权重:server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name localhost;
#代理
location / {
root html;
index index.html index.htm;
proxy_pass http://xiaohong;
}
}
3.1.2 权重轮询
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的 情况。
upstream xiaohong{
#服务资源
#配置权重:server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=2;
}
权重越高,在被访问的概率越大,如上例,分别是1/3,2/3。
3.2 ip_hash方式
上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。
我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
upstream xiaohong{
#服务资源
#配置权重:server 127.0.0.1:8080 weight=1;
ip_hash;
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8082 weight=2;
}
3.3 fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream xiaohong{
server server1;
server server2;
fair;
}
3.4 url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream xiaohong{
server url1:8080;
server url2:8080;
hash $request_uri;
hash_method crc32;
}
四、每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
4.1 nginx.conf完整配置实例:
#user nobody;
worker_processes 4;
events {
# 最大并发数
worker_connections 1024;
}
http{
# 待选服务器列表
upstream myproject{
# ip_hash指令,将同一用户引入同一服务器。
ip_hash;
server 125.219.42.4 fail_timeout=60s;
server 172.31.2.183;
}
server{
# 监听端口
# 启动nginx.exe后浏览器要访问的地址端口,
# 如:localhost:80,就会访问到upstream myproject里的两个服务
listen 80;
# 根目录下
location / {
# 选择哪个服务器列表
proxy_pass http://myproject;
}
}
}