事件【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

代理服务器网站  时间:2021-03-02  阅读:()

一、反向代理 Web服务器的“经纪人”

1. 1反向代理初印象

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

从上图可以看出反向代理服务器位于网站机房代理网站Web服务器接收Http请求对请求进行转发。

1.2反向代理的作用

①保护网站安全任何来自Internet的请求都必须先经过代理服务器

②通过配置缓存功能加速Web请求可以缓存真实Web服务器上的某些静态资源减轻真实Web服务器的负载压力

③实现负载均衡充当负载均衡服务器均衡地分发请求平衡集群中各个服务器的负载压力

二、初识Nginx简单却不平凡

2. 1 Nginx是神马

Nginx是一款轻量级的网页服务器、反向代理器以及电子邮件代理服务器。其将源代码以类BSD许可证的形式发布 因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

Source Nginx 发音同engine x 它是由俄罗斯程序员Igor Sysoev所开发的。起初是供俄国大型的门户网站及搜索引擎Rambler 俄语Рамбл е р 使用。此软件BSD-like协议下发行可以在UNIX、 GNU/Linux、 BSD、 Mac OS X、 Solaris 以及Microsoft Windows等操作系统中运行。

说到Web服务器 Apache服务器和IIS服务器是两大巨头但是运行速度更快、更灵活的对手 Nginx?正在迎头赶上。

2.2 Nginx的应用现状

Nginx已经在俄罗斯最大的门户网站──?Rambl er Media www.rambler.ru上运行了3年时间 同时俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。

在国内已经有淘宝、新浪博客、新浪播客、网易新闻、六间房、 56.com、 Discuz! 、水木社区、豆瓣、 YUPOO、海内、迅雷在线等多家网站使用Nginx作为Web服务器或反向代理服务器。

2.3 Nginx的核心特点

1跨平台 Nginx可以在大多数Unix like OS编译运行而且也有Windows的移植版本

2配置异常简单非常容易上手。配置风格跟程序开发一样神一般的配置

3非阻塞、高并发连接数据复制时磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接在实际生产环境中跑到23万并发连接数。 这得益于Nginx使用了最新的epoll模型 

PS对于一个Web服务器来说首先看一个请求的基本过程建立连接—接收数据—发送数据在系统底层看来上述过程建立连接—接收数据—发送数据在系统底层就是读写事件。

①如果采用阻塞调用的方式 当读写事件没有准备好时必然不能够进行读写事件那么久只好等待等事件准备好了才能进行读写事件那么请求就会被耽搁。

②既然没有准备好阻塞调用不行那么采用非阻塞调用方式。非阻塞就是事件马上返回告诉你事件还没准备好呢你慌什么过会再来吧。好吧你过一会再来检查一下事件直到事件准备好了为止在这期间你就可以先去做其它事情然后再来看看事件好了没。虽然不阻塞了但你得不时地过来检查一下事件的状态你可以做更多的事情了但带来的开销也是不小的。

4事件驱动通信机制采用epoll模型支持更大的并发连接。

①非阻塞通过不断检查事件的状态来判断是否进行读写操作这样带来的开销很大 因此就有了异步非阻塞的事件处理机制。这种机制让你可以同时监控多个事件调用他们是阻塞的但可以设置超时时间在超时时间之内如果有事件准备好了就返回。这种机制解决了上面阻塞调用与非阻塞调用的两个问题。

②以epoll模型为例 当事件没有准备好时就放入epoll (队列)里面。如果有事件准备好了那么就去处理如果事件返回的是EAGAIN那么继续将其放入epoll里面。从而只要有事件准备好了我们就去处理它只有当所有事件都没有准备好时才在epoll里面等着。这样我们就可以并发处理大量的并发了 当然这里的并发请求是指未处理完的请求线程只有一个所以同时能处理的请求当然只有一个了只是在请求间进行不断地切换而已切换也是因为异步事件未准备好而主动让出的。这里的切换是没有任何代价你可以理解为循环处理多个准备好的事件事实上就是这样的。

③与多线程方式相比这种事件处理方式是有很大的优势的不需要创建线程每个请求占用的内存也很少没有上下文切换事件处理非常的轻量级并发数再多也不会导致无谓的资源浪费上下文切换 。对于IIS服务器每个请求会独占一个工作线程 当并发数上到几千时就同时有几千的线程在处理请求了。这对操作系统来说是个不小的挑战 因为线程带来的内存占用非常大线程的上下文切换带来的cpu开销很大 自然性能就上不去从而导致在高并发场景下性能下降严重。

总结通过异步非阻塞的事件处理机制Ngi nx实现由进程循环处理多个准备好的事件从而实现高并发和轻量级。 ?

5 Master/Worker结构一个master进程生成一个或多个worker进程。

PS Master-Worker设计模式核心思想是将原来串行的逻辑并行化并将逻辑拆分成很多独立模块并行执行。其中主要包含两个主要组件Master和Worker Master主要将逻辑进行拆分拆分为互相独立的部分 同时维护了Worker队列将每个独立部分下发到多个Worker并行执行 Worker主要进行实际逻辑计算并将结果返回给Master。

问 nginx采用这种进程模型有什么好处

答采用独立的进程可以让互相之间不会影响一个进程退出后其它进程还在工作服务不会中断 Master进程则很快重新启动新的Worker进程。当然 Worker进程的异常退出肯定是程序有bug了异常退出会导致当前Worker上的所有请求失败不过不会影响到所有请求所以降低了风险。

6 内存消耗小处理大并发的请求内存消耗非常小。在3万并发连接下开启的10个Nginx进程才消耗150M内存15M*10=150M 。7 内置的健康检查功能如果Nginx代理的后端的某台Web服务器宕机了不会影响前端访问。

8节省带宽支持GZIP压缩可以添加浏览器本地缓存的Header头。

9稳定性高用于反向代理宕机的概率微乎其微。

三、构建实战 Nginx+IIS构筑Web服务器集群的负载均衡

这里我们主要在Windows环境下通过将同一个Web网站部署到不同服务器的IIS上再通过一个统一的Nginx反响代理服务器对外提供统一访问接入实现一个最简化的反向代理和负载均衡服务。但是受限于实验条件我们这里主要在一台计算机上进行反向代理、 IIS集群的模拟具体的实验环境如下图所示我们将nginx服务和web网站都部署在一台计算机上 nginx监听http80端口而web网站分别以不同的端口号这里是8050及8060部署在同一个IIS服务器上用户访问localhost时 nginx作为反向代理将请求均衡地转发给两个IIS中不同端口的Web应用程序进行处理。虽然实验环境很简单而且有限但是对于一个简单的负载均衡效果而言本文是可以达到并且展示的。

3. 1准备一个ASP.NET网站部署到IIS服务器集群中

1在VS中新建一个ASP.NET Web应用程序但是为了在一台计算机上展示效果我们将这个Web程序复制一份并修改两个Web程序的Default.aspx让其的首页显示不同的一点信息。这里Web1展示的是“The First Web ” 而Web2展示的则是“The Second Web” 。

2调试运行看看两个网站的效果如何

①Web1的展示效果

②Web2的展示效果

③部署到IIS中分配不同的端口号这里我选择了Web1 :8050 Web2:8060

3总结在真实环境中构建Web应用服务器集群的实现是将同一个Web应用程序部署到Web服务器集群中的多个Web服务器上。

3.2下载Nginx并部署到服务器中作为自启动的Windows服务

1到Nginx官网下载Nginx的Windows版本 http://nginx.org/en/download.html 这里我们使用nginx/Windows-1.4.7版本进行实验本文底部有下载地址

2解压到磁盘任意目录例如这里我解压到了 D:\Servers\nginx-1.4. 7

3启动、停止和重新加载服务通过cmd以守护进程方式启动nginx.exe start nginx.exe停止服务 nginx -s stop重新加载配置 nginx-s? reload

4每次以cmd方式启动Nginx服务不符合实际要求于是我们想到将其注册为Windows服务并设置为自动启动模式。这里我们使用一个不错的小程序 “Windows Service Wrapper” 将nginx.exe注册为Windows服务具体的步凑如下

①下载最新版的Windows Service Wrapper程序 比如我下载的名称是 “winsw-1.8-bin. exe” 本文底部有下载地址 然后把它命名成你想要的名字比如: “nginx-service.exe”  当然你也可以不改名

②将重命名后的nginx-service.exe?复制到nginx的安装目录比如我这里是 “D:\Servers\nginx-1.4.7″ 

③在同一个目录下创建一个Windows Service Wrapper的XML配置文件名称必须与第一步重命名时使用的名称一致比如我这里是“nginx-service.xml” , ?如果你没有重命名则应该是 “winsw-1.8-bin.xml”  这个XML的内容如下

1 <?xml version="1.0"encoding="UTF-8" ?>

2 <service>

3 <id>nginx</id>

4 <name>Nginx Service</name>

5 <description>High Performance Nginx Service</description>

6 <executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>

7 < logpath>D:\Servers\nginx-1.4.7\</logpath>

8 < logmode>rol l</logmode>

9 <depend></depend>

10<startargument>-p D:\Servers\nginx-1.4.7</startargument>

11<stopargument>-p D:\Servers\nginx-1.4.7-s stop</stopargument>

12</service>

④在命令行下执行以下命令 以便将其注册成Windows服务 nginx-service. exe install

⑤接下来就可以在Windows服务列表看到Nginx服务了这里我们可以将其设置为自动启动了

5总结在Windows环境中要对外提供的Windows服务一般都要将其启动类型设置为自动。

3.3修改Nginx核心配置文件nginx.conf

HostSailor:罗马尼亚机房,内容宽松;罗马尼亚VPS七折优惠,罗马尼亚服务器95折

hostsailor怎么样?hostsailor成立多年,是一家罗马尼亚主机商家,机房就设在罗马尼亚,具说商家对内容管理的还是比较宽松的,商家提供虚拟主机、VPS及独立服务器,今天收到商家推送的八月优惠,针对所有的产品都有相应的优惠,商家的VPS产品分为KVM和OpenVZ两种架构,OVZ的比较便宜,有这方面需要的朋友可以看看。点击进入:hostsailor商家官方网站HostSailor优惠活动...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

NameCheap优惠活动 新注册域名38元

今天上午有网友在群里聊到是不是有新注册域名的海外域名商家的优惠活动。如果我们并非一定要在国外注册域名的话,最近年中促销期间,国内的服务商优惠力度还是比较大的,以前我们可能较多选择海外域名商家注册域名在于海外商家便宜,如今这几年国内的商家价格也不贵的。比如在前一段时间有分享到几个商家的年中活动:1、DNSPOD域名欢购活动 - 提供域名抢购活动、DNS解析折扣、SSL证书活动2、难得再次关注新网商家...

代理服务器网站为你推荐
印章制作如何做公章google地球打不开google地球无法打开怎么办961556225317563152822是哪个银行的办公协同软件最好用的协同办公软件是哪个安全漏洞web安全漏洞有哪些网站优化方案网站优化方案如何写?网络虚拟机虚拟机的网络怎么弄?网站营运网络运营主要做些什么?声母是什么声母.韵母有哪些聚美优品红包聚美优品里怎么合并红包
php空间租用 中文域名申请 快速域名备案 google电话 google镜像 photonvps 狗爹 美国便宜货网站 56折 日志分析软件 搜狗抢票助手 天猫双十一抢红包 lamp配置 云鼎网络 html空间 股票老左 世界测速 卡巴斯基免费试用 酷番云 支付宝扫码领红包 更多