Nginx的反向代理以及负载均衡

2020-09-29 14:28发布

一、反向代理

正向代理: 

正向代理,也就是我们常说的代理,其工作原理为:我访问不了某个网站,但是我能访问一个代理服务器,这个代理服务器他能访问那个我不能访问的网站,于是我连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来之后返回给我。从网站的角度来说只在代理服务器来取内容的时候有一次记录有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理是否告诉网站。

总之,正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标,然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用 正向代理。

反向代理的概念:

反向代理就是客户端并不知道代理服务器上没有自己要的内容,对于客户端来说代理服务器就是原始服务器,且客户端不需要做任何特别设置,客户端向反向代理服务器的命名空间中的内容发送普通请求,接着反向代理服务器判断向何处转交请求,并将获得的内容返回给客户端,就像是这些内容是他自己的一样。

正向代理和反向代理的区别:

正向代理的典型应用是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率,反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载均衡,或者为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在与同一个URL空间下。

安全方面来说,正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过和授权的客户端提供服务。反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。

环境:

    代理+负载均衡服务器:centos7:192.168.253.130

    web服务器1:centos7:192.168.253.110

    web服务器2:centos7:192.168.253.120

三台服务器都操作
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld  关闭防火墙
[root@localhost ~]# yum -y install ntpdate
[root@localhost ~]# ntpdate pool.ntp.org   同步时间

1.安装nginx并修改nginx.conf配置文件

[root@localhost src]# yum -y install gcc gcc-c++ zlib-devel pcre-devel   源码安装nginx所需要的依赖包
[root@localhost src]# tar xzf nginx-1.12.2.tar.gz 
[root@localhost src]# cd nginx-1.12.2
[root@localhost nginx-1.12.2]# ./configure
[root@localhost nginx-1.12.2]# make && make install
 
####在http{}中的server{}中的location  / {}中添加:proxy_pass ip   这个ip是代理的ip
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf  添加
46             proxy_pass http://192.168.253.110;

2.在被代理端安装web,测试

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo "welcome to hya" > /var/www/html/index.html
[root@localhost ~]# systemctl  start httpd
 
代理服务器开启nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx 
[root@localhost ~]# ss -tnl
State       Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN      0      128                      *:80                                   *:*

 

二、Nginx实现负载均衡

upstream负载均衡模块说明:

upstream是nginx的http upstream模块,这个模块通过一个简单的调度算法来实现客户端ip到后端服务器的负载均衡,通过upstream指令指定一个负载均衡的名称。这个名称任意指定,在后面需要用到的地方直接调用即可。

upstream支持负载均衡算法:

nginx的负载均衡模块目前支持4种调度算法,

轮询(默认的):每个请求按照时间顺序依次分配到不同的后端服务器,如果后端服务器宕机,故障服务器自动被剔除,使用户访问不受影响。Weight指定权重值,值越大访问到的几率越大,这个看后端服务器的配置水平而定。

Ip_hash:每个请求按访问ip的hash结果分配,这样来自同一个ip的访客固定访问一个后端服务器,有效解决了动态页面存在的session共享问题。

Fair:这是比上两个更加智能的负载均衡算法,此种算法可以依据页面代销和加载时间的长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。

url_hash:此方法按照访问URL的hash结果来分配请求,使每个URL定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。

upstream支持的状态参数:

在http upstream模块中,可以通过server指令指定后端服务器的ip地址和端口,同时还可以设定每个节点在负载均衡调度中的状态,比如:down:表示当前Server不参与负载均衡。backup:预留的备份,当其他所有非backup机器出故障或者繁忙的时候,才会请求backup机器,所以此机器的压力也是最轻的。

 max_fails:允许请求失败的次数,默认为1,当超过最大次数时,返回

proxy_next_upstream模块定义的错误。

Fail_timeout:在经历了max_fails失败后,暂停服务的时间。Max_fails和faul_timeout一起使用。

注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是Weight和backup。

1.配置nginx.conf文件(基于反向代理的环境操作)

###########################################
在http{}中server{}外添加:
upstream    webservers {
        server  ip:80    weight=1;
        server  ip:80   weight=1;
        }
并且修改location  / {}中http://后的名称为upstream后的名字
location / {
            root   html;
            index  index.html index.htm;
            proxy_pass  http://webservers;
            proxy_set_header X-Real-IP $remote_addr;
        }
####################################################
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
 34     upstream webservers{
 35       server 192.168.253.110:80 weight=1;
 36       server 192.168.253.120:80 weight=1;
 37     }
 
 46         location / {
 47             root   html;
 48             index  index.html index.htm;
 49             proxy_pass http://webservers;
 50         }

 2.安装web端并测试

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# echo "welcome to hya222" > /var/www/html/index.html
[root@localhost ~]# systemctl  start httpd
 
负载服务重载nginx
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload

转载自:CSDN  作者:Hya、

原文链接:https://blog.csdn.net/yeyslspi59/article/details/108071355