20191021笔记

4.48/49 nginx反向代理

4.50 nginx负载均衡

4.51 配置nginx的ssl

一、nginx反向代理

反向代理方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器

为什么使用反向代理?

1.可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器

2.通过缓存静态资源,加速Web请求

3.实现负载均衡。顺便说下,目前市面上,主流的负载均衡方案,硬件设备有F5,软件方案有四层负载均衡的LVS,七层负载均衡的Nginx、Haproxy等

什么场景下会使用反向代理?

1.访问不带公网的内部机器

2.解决两台机器之间通信有障碍的问题

场景设置

1.A B两台机器,其中A只有内网,B有内网和外网

2.A的内网ip是 192.168.222.128

3.B的内网ip是 192.168.222.129,B的外网ip是 192.168.149.128

4.C为客户端,C只能访问B的外网ip,不能访问A或B的内网ip

需求:

C访问A的内网网站

配置:

location /
{
proxy_pass http://ip;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

二、nginx负载均衡

负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backend servers,也叫做服务池, 后面简称backend)来做复杂的计算、处理和响应,这种模式的好处是相当多的:隐藏业务主机更安全,节约了公网IP地址,并且在业务量增加的时候可以方便地扩容后台服务器

先创建简单的负载平衡模块,配置文件load.conf

20191021笔记

有个命名可以查看 dig 域名; 没有安装可以用yum安装此包:yum install -y bind-utils

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHrLmJeK-1571667214869)(https://oscimg.oschina.net/oscnet/3bf1c371a2d7c2a39f099651d9101aa3083.jpg)]

现在用curl -x测试www.qq.com,此时任意域名都会转到默认虚拟主机上

20191021笔记

检查load.conf配置文件语法,并加载

20191021笔记

我们再curl -x测试www.qq.com,此时可以通过自己的机器能访问腾讯网站。说明代理成功

20191021笔记

负载均衡扩展:

Nginx负载均衡(工作在七层“应用层”)功能主要是通过upstream模块实现,Nginx负载均衡默认对后端服务器有健康检测的能力,仅限于端口检测,在后端服务器比较少的情况下负载均衡能力表现突出

Nginx的几种负载均衡算法:

1.轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,则自动剔除故障机器,使用户访问不受影响

2.weight:指定轮询权重,weight值越大,分配到的几率就越高,主要用于后端每台服务器性能不均衡的情况

3.ip_hash:每个请求按访问IP的哈希结果分配,这样每个访客固定访问一个后端服务器,可以有效的解决动态网页存在的session共享问题

4.fair(第三方):更智能的一个负载均衡算法,此算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。如果想要使用此调度算法,需要Nginx的upstream_fair模块

5.url_hash(第三方):按访问URL的哈希结果来分配请求,使每个URL定向到同一台后端服务器,可以进一步提高后端缓存服务器的效率。如果想要使用此调度算法,需要Nginx的hash软件包

在upstream模块中,可以通过server命令指定后端服务器的IP地址和端口,同时还可以设置每台后端服务器在负载均衡调度中的状态,常用的状态有以下几种:

1.down:表示当前server暂时不参与负载均衡

2.backup:预留的备份机,当其他所有非backup机器出现故障或者繁忙的时候,才会请求backup机器,这台机器的访问压力最轻

3.max_fails:允许请求的失败次数,默认为1,配合fail_timeout一起使用

4.fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s(某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。)

一个负载均衡器的名称为whsirserver,这个名称可以自己定义,在后面proxy_pass直接调用即可

proxy_next_upstream参数用来定义故障转移策略,当后端服务器节点返回500、502和执行超时等错误时,自动将请求转发到upstream负载均衡器中的另一台服务器,实现故障转移

三、配置nginx的ssl

20191021笔记

编辑完ssl配置文件,此时检查语法,发现当前Nginx并不支持SSL,因为当时辑Nginx编译时并没有配置支持SSL的参数

20191021笔记

配置ssl模块,然后编译、安装

20191021笔记

检查语法、重启服务,查看监听端口,此时会出现443端口

20191021笔记

测试

20191021笔记

此时可以直接:curl https://ying.com/ ;但是证书是我自己颁发的,有点不合法

20191021笔记

此时在windows下浏览器测试

假如在浏览器:https://ying.com 此时无反应,则需要清除规则;或者增加一个443的端口

20191021笔记