Nginx
1. Nginx是什么?
Nginx是一个高性能的Web服务器和反向代理服务器在高连接并发的情况下,Nginx是Apache服务器不错的替代品。
2. 什么是正向代理,什么是反向代理?
代理服务器的作用就是将客户端的 HTTP 请求提交到真实服务器,得到响应后再返还给客户端(所谓代理就是第三方的介入)
正向代理:
客户端---http--->代理服务器----->真实服务器(返回结果)
在这个过程中客户端是知道真实服务器,也知道代理服务器,但是客户端的请求都是所做的请求都是由代理服务器来处理。
很多人使用正向代理就是为了提高访问速度
当客户端访问服务时有可能会转发多个路由,这种情况会导致访问速度变慢,比较常见的正向代理的实例为“翻墙”
反向代理:
客户端---http--->代理服务器----->未知服务器(由代理服务器自动挑选一台资源服务器<可能是一个“集群”>获取用户请求所需的资源,在这个过程中能很好的体现出负载均衡的作用)
在反向代理请求过程中客户端他是只知道代理服务器的,用户始终认为它访问的是原始服务器而不是代理服务,但实用际上反向代理服务器接受用户的应答,从原始资源服务器中取得用户的需求资源,然后发送给用户。由于防火墙的作用,只允许代理服务器访问原始资源服务器。尽管在这个虚拟的环境下,防火墙和反向代理的共同作用保护了原始资源服务器,但用户并不知情
这个时候客户从互联网访问到了代理服务器代理(代理服务器同时也可以做到集群,来减轻代理服务器压力),服务器越过防火墙(防火墙设置了只能由代理服务器范围服务器集群这样也可以很好的保护服务器)通过“负载均衡”解决方案挑选一台服务器获取用户所需资源从而相应用户
Nginx 的特点
1. 高并发
2. 低消耗
3.热部署
4. 高扩展
5.高可用
为什么选择nginx
1. 采用io多路复用的epoll模型,一种io空闲主动上报机制(内核态fd就绪被放入使用),一个线程并行处理io请求,没有堵塞。不会因为某一路请求的io堵塞导致后面在请求无法执行。
select模型会维护一个fd列表,会一直线性遍历fd列表,效率低下,另外,有文件描述符限制1024个。epoll模型没有描述符限制,也就没有最大链接限制。io多路复用模型还有poll模型。
2. nginx轻量级
功能模块少,代码模块化
与http相关的核心功能集成在源代码里面,其他的非核心插件功能不会在源码中。这样功能不会很全,但是可以加入插件模块进行扩展。代码模块化支持二次开发。
3. nginx 的CPU亲和
一般worker数量=cpu*2=cpu的核心数
多worker使用多cpu,把worker固定在一个CPU上运行,利用cpu亲和的绑定方式,减少切换cpu的cache miss,以获得比较好的性能
4. nginx的sendfile工作机制(nginx在处理静态文件是非常高效的,内核空间直接到内核空间的传输,0拷贝传输模式)
一般httpserver的处理方式从内核空间到用户空间、又从用户空间又到内核空间,切换导致传输低效。