开源工具之Nginx
是什么?Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。功能反向代理Nginx作为反向代理器可以代表我们要访问的目标服务器。Nginx作为代理服务器的工作流程:代理服务器接收请求,然后将请求转发给内部网络中集群化的服务器,后端服务器将请求处理并返回结果给Nginx代理服务器,Nginx再将结果转发给客户端。期间有一个速度匹配问题:由于客户端和Nginx...
是什么?
Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。
功能
反向代理
Nginx作为反向代理器可以代表我们要访问的目标服务器。
Nginx作为代理服务器的工作流程:
代理服务器接收请求,然后将请求转发给内部网络中集群化的服务器,后端服务器将请求处理并返回结果给Nginx代理服务器,Nginx再将结果转发给客户端。
期间有一个速度匹配问题:
由于客户端和Nginx是通过公网传输,速度比较慢;Nginx和服务器之间是内网或者线路传输,速度比较快。为了匹配后端服务器与客户端之间的速度匹配问题,通常在Nginx代理服务器中会有一个缓存。
处理方式
Nginx代理一次性接收客户端所有HTTP包(完整)放在缓存中,然后转发给后端服务器,服务器处理后将结果返回给Nginx代理器,Nginx代理一边接收一边转发给客户端。
Nginx在反向代理上,根据不同的场景采用不同的转发策略,灵活多样。
负载均衡
在高并发情况下,将数据流分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,提高数据的吞吐量。
基本工作流程
- 先将大量的并发访问或数据流量分担到多台节点设备上分别处理,减少了用户等待响应的时间
- 再将单个重负载的运算分担到多台节点设备上并行处理,每个节点设备处理结束后,汇总返回给用户,系统处理能力提高
Nginx可使用的负载均衡策略有:
- 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果端服务器down调,能自动剔除
- 权重:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均衡的情况。性能好的多分配,性能差的少分配。
- ip_hash(ip绑定):每个请求按访问ip的hash结果分配,这样访客固定访问一个后端服务器,可以解决session问题。
- url_hash(第三方):按访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存是比较有效
- fair(第三方) :按后端服务器响应时间来分配请求,响应时间短的优先分配
动静分离
Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。
Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。
静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。
动态请求由相应的后端服务器处理。
Nginx的特点
- 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。
- 配置异常简单,非常容易上手。配置风格跟程序开发一样
- 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
- 事件驱动:通信机制采用epoll模型,支持更大的并发连接。
- master/worker结构:一个master进程,生成一个或多个worker进程
- 内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
- 成本低廉:Nginx为开源软件,可以免费使用。
- 内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
- 节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
- 稳定性高:用于反向代理,宕机的概率微乎其微
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)