事件【大型网站技术实践】初级篇:借助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

特网云,美国独立物理服务器 Atom d525 4G 100M 40G防御 280元/月 香港站群 E3-1200V2 8G 10M 1500元/月

特网云为您提供高速、稳定、安全、弹性的云计算服务计算、存储、监控、安全,完善的云产品满足您的一切所需,深耕云计算领域10余年;我们拥有前沿的核心技术,始终致力于为政府机构、企业组织和个人开发者提供稳定、安全、可靠、高性价比的云计算产品与服务。公司名:珠海市特网科技有限公司官方网站:https://www.56dr.com特网云为您提供高速、稳定、安全、弹性的云计算服务 计算、存储、监控、安全,完善...

易探云2核2G5M仅330元/年起,国内挂机宝云服务器,独立ip

易探云怎么样?易探云是国内一家云计算服务商家,致力香港服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出深圳或北京地区的适合挂机和建站的云服务器,国内挂机宝云服务器(可选深圳或北京地区),独立ip;2核2G5M挂机云服务器仅330元/年起!点击进入:易探云官方网站地址易探云国内挂机宝云服务器推荐:1、国内入门型挂机云服务器...

日本vps云服务器选择指南。

日本vps云服务器怎么选择?很多人都会遇到日本vps和日本云服务器怎么选择的问题,日本云服务器具有免备案的特点。小编今天就分析一下日本云服务器价格多少钱,以方便大家选购的时候有个更加合适的取舍。日本云服务器租用前比较选择,高性能、安全、高效、免备案日本云服务器是很关键的因素。那么,日本云服务器该怎么选择呢?日本作为我们的邻国,与其贸易、文化往来是比较多的。日本云服务器价格多少钱一年?一、日本·CN...

代理服务器网站为你推荐
免费制作qq空间怎么免费设计QQ空间站长故事爱迪生发明东西的故事金山杀毒怎么样金山杀毒好吗吴晓波频道买粉吴晓波频道学习卡资费?ios7固件下载iOS7如何升级固件?xv播放器下载除了迅雷看看播放器还有什么播放器支持xv格式的视频?安装迅雷看看播放器迅雷看看播放器安装商标注册查询官网全国商标注册查询在哪里查呀?分词技术中文分词的应用srv记录SRV记录的简介
移动服务器租用 国外vps主机 免费域名跳转 hostigation smartvps 新加坡主机 老鹰主机 cve-2014-6271 http500内部服务器错误 一元域名 南昌服务器托管 河南服务器 网通ip 亚马逊香港官网 免费高速空间 免费phpmysql空间 登陆qq空间 网络速度 好看的空间 发证机构 更多