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

百纵科技云主机首月9元,站群1-8C同价,美国E52670*1,32G内存 50M 899元一月

百纵科技:美国高防服务器,洛杉矶C3机房 独家接入zenlayer清洗 带金盾硬防,CPU全系列E52670、E52680v3 DDR4内存 三星固态盘阵列!带宽接入了cn2/bgp线路,速度快,无需备案,非常适合国内外用户群体的外贸、搭建网站等用途。官方网站:https://www.baizon.cnC3机房,双程CN2线路,默认200G高防,3+1(高防IP),不限流量,季付送带宽美国洛杉矶C...

特网云-新上线香港五区补货资源充足限时抢 虚拟主机6折,低至38元!

官方网站:点击访问特网云官网活动方案:===========================香港云限时购==============================支持Linux和Windows操作系统,配置都是可以自选的,非常的灵活,宽带充足新老客户活动期间新购活动款产品都可以享受续费折扣(只限在活动期间购买活动款产品才可享受续费折扣 优惠码:AADE01),购买折扣与续费折扣不叠加,都是在原价...

旅途云(¥48 / 月),雅安高防4核4G、洛阳BGP 2核2G

公司成立于2007年,是国内领先的互联网业务平台服务提供商。公司专注为用户提供低价高性能云计算产品,致力于云计算应用的易用性开发,并引导云计算在国内普及。目前,旅途云公司研发以及运营云服务基础设施服务平台(IaaS),面向全球客户提供基于云计算的IT解决方案与客户服务,拥有丰富的国内BGP、双线高防、香港等优质的IDC资源。点击进入:旅途云官方网商家LOGO优惠方案:CPU内存硬盘带宽/流量/防御...

代理服务器网站为你推荐
印章制作传统印章怎么做eset最新用户名密码ESET4.0最新用户名和密码保护气球如何才能让气球放久了不会没气王炳坤nike男子跑步鞋42码的对应同款女子跑步鞋是多少码?购买流量怎么购买流量啊购买流量移动卡如何购买流量?关闭qq相册图标在不删除照片的情况下如何关闭QQ相册图标请客网《请客》这篇文章说明了什么道理?厦门铁通厦门铁通固定电话的收费标准?adobephotoshop教程怎么使用Photoshop?
下载虚拟主机 万网域名 便宜vps z.com 美国主机论坛 免费个人博客 好看的桌面背景图片 私有云存储 个人域名 100m独享 南通服务器 太原网通测速平台 1美金 联通网站 google台湾 移动服务器托管 百度云加速 美国凤凰城 net空间 阿里dns 更多