目录
步骤1 代理技术介绍
代理技术常见的类型
正向代理的用途
反向代理的作用
步骤2 反向代理配置
步骤3 负载均衡
1、路由模式(推荐)
2、桥接模式
3、服务直接返回模式
4、负载均衡算法介绍
1、轮询法
2、随机法
3、最小连接法
步骤4 nginx负载均衡配置
修改配置文件
负载均衡配置说明
其他负载均衡配置策略
1、ip_hash
2、weight
3、fair(第三方)
4、url_hash
步骤1 代理技术介绍
代理技术,又称为代理服务器技术,是一种网络通信的中间设备。代理服务器作为客户端和目标服务器之间的中转站,可以接收客户端的请求并将其转发给目标服务器,然后将目标服务器的响应返回给客户端。代理服务器常常被用于提高网络访问速度、保护网络安全和隐藏客户端的真实IP地址。
代理技术常见的类型
-
正向代理:客户端通过正向代理服务器访问目标服务器。正向代理可以帮助客户端绕过网络限制,例如访问被封锁的网站。同时,正向代理也可以缓存客户端请求的内容,提高访问速度。
-
反向代理:客户端不直接与目标服务器通信,而是通过反向代理服务器来访问目标服务器。反向代理可以根据负载均衡算法将客户端请求分发到多个目标服务器上,实现请求的分流和负载均衡。此外,反向代理还可以提供安全性和高可用性,隐藏了真实的服务器IP地址,有效保护了服务器的安全。
-
透明代理:透明代理是指在不需要客户端进行任何特殊设置的情况下,将客户端的请求转发给目标服务器。透明代理可以在不影响网络体验的情况下为客户端提供网络优化和安全服务。
-
缓存代理:缓存代理可以在代理服务器上缓存目标服务器返回的数据,当客户端再次请求同样的数据时,可以直接从缓存中获取,提高访问速度。
-
SSL代理:SSL代理是一种特殊类型的代理服务器,用于处理SSL/TLS加密的网络连接。SSL代理可以在客户端和目标服务器之间建立安全的加密通信,保护敏感信息的传输安全。
代理技术在网络通信中有着广泛的应用,既可以提高网络性能和安全性,也可以实现负载均衡和访问控制等功能。
正向代理 类似一个跳板机,代理访问外部资源。
举个例子:
我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
例如之前使用过这类软件例如CCproxy,[http://www.ccproxy.com](http://www.ccproxy.com/)/ 需要在浏览器中配置代理的地址。
总结来说:正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
正向代理的用途
(1)访问原来无法访问的资源,如google
(2) 可以做缓存,加速访问资源
(3)对客户端访问授权,上网进行认证
(4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
反向代理的作用
反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
(1)保证内网的安全,可以使用反向代理提供WAF功能,阻止web攻击
大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。
(2)负载均衡,通过反向代理服务器来优化网站的负载
二者区别
借用知乎两张图来表达:https://www.zhihu.com/question/24723688
步骤2 反向代理配置
cd /usr/local/nginx/conf/
mkdir vhost
编辑nginx.conf,在中间加入以下语句
include /usr/local/nginx/conf/vhost/*.conf;
这语句的意思是把vhost文件夹下的所有.conf文件加载过来(注意是.conf后缀名的文件),这么做的原因是方便以后维护,把每个域名做成一个.conf文件,通过主配置include进来,这样以后想维护某个域名,就只需直接对那个对应的.conf进行操作,而不会影响到其它的域名。
添加域名进行测试
编辑/etc/hosts文件
添加如下内容
192.168.116.130 www.xuyang.edu (以本人姓名拼音举例)
在vhost目录下创建.conf文件并添加以下内容
server {
listen 80;
autoindex on;
server_name www.testwyn.edu;
access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location / {
proxy_pass http://192.168.30.2;
add_header Access-Control-Allow-Origin *;
}
}
虚拟机里浏览器访问www.xuyang.edu/ecshop/admin出现ecshop管理界面
外面浏览器访问需修改Windows hosts文件
以上是通过解析域名,代理到网页
下面是通过域名,访问文件
编辑/etc/hosts文件
添加
server {
listen 80;
autoindex off;
server_name www.filewyn.org;
access_log /usr/local/nginx/logs/access.log combined;
index index.html index.htm index.jsp index.php;
#error_page 404 /404.html;
if ( $query_string ~* ".*[\;'\<\>].*" ){
return 404;
}
location ~ /(mmall_fe|mmall_admin_fe)/dist/view/* {
deny all;
}
location / {
root /tmp/;
add_header Access-Control-Allow-Origin *;
}
}
访问www.filexy.org/hello.txt
文件里的下一级时,浏览器会显示403Forbidden没有权限。但是直接通过网址域名来访问其子目录是可以的,只不过是不能通过主页面进入下一级。
步骤3 负载均衡
负载均衡有三种部署方式:路由模式、桥接模式、服务直接返回模式。路由模式部署灵活,约60%的用户采用这种方式部署;桥接模式不改变现有的网络架构;服务直接返回(DSR)比较适合吞吐量大特别是内容分发的网络应用。约30%的用户采用这种模式。
1、路由模式(推荐)
路由模式的部署方式,服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。
2、桥接模式
桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。
由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。
3、服务直接返回模式
这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。
4、负载均衡算法介绍
现有的负载均衡算法主要分为静态和动态两类。静态负载均衡算法以固定的概率分配任务,不考虑服务器的状态信息,如轮转算法、加权轮转算法等;动态负载均衡算法以服务器的实时负载状态信息来决定任务的分配,如最小连接法、加权最小连接法等。
1、轮询法
轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
2、随机法
随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因素。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
3、最小连接法
最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。
最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上。
步骤4 nginx负载均衡配置
设置nginx的配置文件,实现负载均衡。顾名思义就是将多个请求分发到不同的服务上,实现均衡的负载,减小单个服务的压力。
修改配置文件
vim /usr/local/nginx/conf/nginx.conf
配置upstream,在http{}里 新增 upstream 指向启动另外两台服务器。webservers 可以起一个自己容易辨识的名字。
upstream webservers{
server 192.168.30.2:8081;
server 192.168.30.4:80;
}
在 server{} 里添加一个location,并且配置 proxy_pass(转发到负载服务上),(注意不要有同名的 比如已经有一个 location / 了,你再添加重启Nginx就会报错)
location / {
proxy_pass http://webservers;
}
默认 location / 可以注释掉,也可以在上面修改,我是直接注销掉的。
这里的 webservers 要和你配置 upstream 时起的名字一样。
修改完成后重启Nginx或重新加载配置
# 重新加载(要到Nginx安装目录执行)
systemctl daemon-reload
# 重新启动服务 (如果你添加了服务)
systemctl restart nginx.service
浏览器访问:192.168.30.3多访问几次,你会发现是轮训的
负载均衡配置说明
默认情况下,直接按照上面的配置后,如果后端有多个服务,采用的是轮询策略;
常用的可选配置包括:
weight 多台机器,可以配置权重值,权重高的服务将会优先被访问
down 某个服务配置down之后,这台服务将不会被访问
backup 配置了这个参数后,除非其他的服务都挂掉了,否则这台服务将不会被访问到
以weight 为例做简单的说明,在上面的配置中,补充weight参数
upstream webservers{
server 192.168.30.2:8081 weight=8;
server 192.168.30.4:8082 weight=2;
}
重新加载配置,按照上面的测试步骤再次刷新页面,这时候可以发现,8081对于的这个服务将会被更多的访问到;
其他负载均衡配置策略
默认情况下,nginx采用的是轮询策略,nginx还提供了其他几种常用的负载均衡配置
1、ip_hash
每个请求按访问IP的hash结果进行分配,这样每个访客就可以固定访问一个后端服务,一定程度上可以解决session问题;
upstream webservers {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> ip_hash; server 192.168.30.2:80; server 192.168.30.3:8081; server 192.168.30.4:80;}
2、weight
weight代表权重,默认为1,权重越高,被分配的客户端请求就会越多
upstream webservers{
server 192.168.30.3:8081 weight=8;
server 192.168.30.4:80 weight=2;
}
3、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的将会被优先分配
upstream webservers{
server 192.168.30.3:8081;
server 192.168.30.4:80;
fair;
}
4、url_hash
按访问URL的hash结果分配。这样相同的url会被分配到同一个节点,主要为了提高缓存命中率。比如,为了提高访问性能,服务端有大量数据或者资源文件需要被缓存。使用这种策略,可以节省缓存空间,提高缓存命中率
upstream webservers{
least_conn;
server 192.168.30.3:8081;
server 192.168.30.4:80;
}
以上不同的负载均衡策略均有各自不同的使用场景,请结合自身的实际情况进行合理的选择,同时,各自配置策略在实际使用的时候也不是孤立的,比如最小连接数可以搭配权重数一起使用。