01 Nginx 简介
1. Nginx 是什么?
关于 Nginx,百度百科的介绍如下:Nginx (engine x)是一个开源、高性能的 HTTP 和反向代理 Web 服务器,同时也提供了 IMAP/POP3/SMTP 服务”。
首先,对 Web 服务器做一个简要说明:
Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文档,也可以放置网站文件,让全世界浏览。可以放置数据文件,让全世界下载。
常见的 Web 服务器有: Apache、Nginx、微软的 IIS 和 Tomcat。比如当我启动 Nginx 服务后,服务监听服务器上的端口,当从外面访问这个 ip+ 端口 的地址时,我们能对应访问服务器上的某些静态文件,或者动态服务响应,对相应的 http 请求进行处理并返回某个结果。这样就是通过浏览器和 Web 服务器(也就是 Nginx )进行交互。
Nginx 是由俄罗斯的工程师 Igor Sysoev 在 Rambler 集团任职系统管理员时利用业余时间所开发高性能 web 服务,官方测试 Nginx 能够支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定,所以现在很多知名的公司都在使用 Nginx 或者在此基础上进行了二次开发,包括淘宝、新浪、百度等。对于中小型企业而言,开源免费而又性能强大的 Nginx 必然也是首选,后续我们将看到一组统计数据来说明 Nginx 的应用之广泛。
2. Nginx 使用场景
Nginx 的使用场景如下:
2.1 HTTP 服务器
Nginx 作为 Web 服务器能独立提供 Http 服务。另外,我们常常通过 Nginx 作为静态资源服务器来访问服务器上的静态资源,比如对于最新热门的前后端分离架构,前端打好包后直接放到某个地址,在 Nginx 配置后可以通过 Nginx 来访问主机上的前端页面。
2.2 反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。这样的好处是,将不暴露内部的服务地址,只统一使用一个公共出口,通过 URI 匹配转发到不同的内部服务处理请求。
2.3 负载均衡
负载均衡也是 Nginx 的一个高频使用场景,对于下游存在的多个相同服务,可以将请求采用某种策略(随机、轮询、权重)发到相应的服务处理。这样由于多个相同服务的存在,可以实现高可用功能,在一个服务不可用时,Nginx 会自动发现并将其剔出服务集群,将请求转发给正常的服务进行处理。
2.4 第三方插件
基于第三方插件,Nginx 可以完成各种各样复杂的功能,全方位满足程序员的想法。比如在 Nginx 中引入 lua 模块,可以实现对 Http 请求更细粒度的限制,包括限速、限流、校验认证等等。后续,在 Nginx 上发展出来的 OpenResty 已经应用到了微服务网关方向。
3. Web 服务器的市场情况
Netcraft公司官网 每月公布的全球 Web 服务器调查报告“Web Server Survey”是当前人们了解全球网站数量以及服务器市场分额情况的主要参考依据,2019 年 12 月份的报告目前已经发布,我们来一睹为快。
可以明显看到,在 2019 年的年末,Nginx 已经确确实实处于 Web 服务器市场的领先地位,成功超过了老大哥 Apache,千年老二至此翻身当上了大哥。