从入门到实践,快速掌握 Nginx 研发

摘要:
我们都知道Nginx很容易使用,但大多数人对Nginx的理解和使用还处于初级阶段,他们还没有探索Nginx是否有效。实验楼开设了“Nginx网络模块编写入门指南”课程,这可能会帮助需要系统学习Nginx的学生。自nginx 0.5.x以来,nginx吸引了国内互联网专业人士的关注,例如在中国推广nginx的先驱张燕。2020年3月,Nginx在全球web服务器市场的市场份额首次超过了旧的web服务器Apache,如下图所示:图片引自2020年3月份的web服务器市场份额调查。再次,Nginx占用的资源很少,其稳定性也经受住了许多公司的考验。

Nginx 是一种非常流行的 Web 服务器软件,全球超过 30%的网站都在 Nginx 上运行,如腾讯、淘宝、百度、京东、新浪、网易等。

对于开发来说,我们在工作中或多或少都会遇到 web 性能优化、高并发等问题,而 Nginx 是一个万能药,它具备高性能、高扩展性、高可靠性、低内存消耗等优势,不管是个人建立网站、博客,还是进行互联网应用开发,都可以轻松应对。

我们都知道 Nginx 好用,但大多数人对 Nginx 的理解和使用只停留在初步阶段,并没有挖掘出 Nginx 的效能。我们收集了一些大家使用 Nginx 遇到的困惑,贴几个:

  • 一开始公司就让我来配置服务器,真的懵了,原理也不大懂,网上看了一堆资料,没个系统化,到底要怎么学?
  • Nginx 处理 HTTP 请求需要经过哪 11 个阶段啊?!
  • 如何用 Nginx 系统编写 HTTP 模块?

实验楼上线了一门《Nginx 网络模块编写入门》课程,或许可以帮助到有系统学习Nginx 需求的同学们。

从入门到实践,快速掌握 Nginx 研发

课程从研发的角度,系统介绍了 Nginx 网络模块的编程,分为 9 个实验,将逐一讲解:

  • 如何编译和使用 Nginx;
  • 如何使用相关的验证工具,编写简单的 HTTP 模块和 HTTP 过滤模块,并在此基础上介绍如何使用自定义变量;
  • 如何使用 Nginx 的定时器;
  • 如何使用工具检查编写的模块中是否存在内存问题。

即使你之前从未使用过 Nginx 也没关系,课程会从 Nginx 的历史和优势讲起,帮助你建立起系统的认识。

Nginx 的发展史

Nginx 最开始是由 Igor Sysoev 在 Rambler.ru 任职期间开发的,它诞生于 2002 年 8 月 6 日。

从 nginx-0.5.x 开始(时间为 2007 年左右),Nginx 开始受到国内互联网人士关注,如在国内普及 Nginx 的先驱 — 张宴。

2011 年 12 月 2 日,阿里巴巴旗下的淘宝网技术团队正式开源了基于 nginx-1.0.10 开发的一个重要变种 Tengine 。

2020 年 3 月,Nginx 在全球 Web 服务器市场的占有率首超老牌 Web 服务器 Apache,见下图:

从入门到实践,快速掌握 Nginx 研发

图片引自 2020 年 3 月 Web 服务器市场占有率调查 。

Nginx 为什么会流行

在 Nginx 出现之前,已经存在 Apache 这种功能与 Nginx 有很多重合的服务器,而且 Apache 经过几十年的发展,运行高度稳定,功能也非常完备,支持的平台众多,配套的软件不计其数。但是也正因为 Apache 已经存在几十年了,历史包袱重,其性能低和对系统资源的占用率高等问题越来越不满足互联网和移动互联网发展的需求。

Apache 在较老的系统上,只能用低效的 select 网络 I/O 多路复用接口(即提供一个或者几个函数来添加,监控和删除多个连接的网络事件,如可读,关闭等),虽然在较新的系统上,它也支持如 epoll 等高效的网络 I/O 多路复用接口,但是其由于历史原因,它的一个进程同时只能全程处理一个请求,处理完后才能再处理另一个请求,这可能导致进程频繁切换,严重消耗系统资源,无法应对现在动则上万,十几万甚至几十万的并发请求:

从入门到实践,快速掌握 Nginx 研发

Nginx 从诞生起就使用了 epoll (Linux)和 kqueue (FreeBSD)等高效的网络 I/O 多路复用接口。不过,在某些平台上它仍然能使用 select 等传统的网络 I/O 多路复用接口,如 Windows 。不仅如此,Nginx 从设计之初就保证了一个进程同时能处理很多个请求,所以它减少了进程切换带来的开销:

从入门到实践,快速掌握 Nginx 研发

另外,Nginx 也支持常见的操作系统,如 Linux,FreeBSD,MacOS,Windows 等。再次,Nginx 对资源的占用很少,稳定性也经受住了众多公司的检验。最后,Nginx 为编写第三方模块提供了一套稳定的接口,吸引了众多个人,组织和公司为其开发各种功能的模块,详情可以参考 Nginx 第三方模块列表(部分)。

总之,就是 Nginx 赶上了操作系统的变革时代(Linux 2.6+ 开始支持 epoll),又满足了历史的发展需求(互联网和移动互联网的繁荣),导致它变得流行。

篇幅有限,更多课程内容可以在实验楼边敲代码边学习~

点击《Nginx 网络模块编写入门》,免费学习课程前两节。

免责声明:文章转载自《从入门到实践,快速掌握 Nginx 研发》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇avalon最佳实践SpringBoot全局时间date和localDateTime格式失效问题记录下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Struts核心技术简介

Struts核心技术简介 1、Struts内部机制 Struts是一种基于MVC经典设计模式的开发源代码的应用框架,它通过把Servlet、JSP、JavaBean、自定义标签和信息资源整合到一个统一的框架中,为Web开发提供具有高可配置性的MVC开发模式。 Struts体系结构实现了MVC设计模式的概念,它将Model、View、和Controller分...

Flask web应用

Flask web应用一、介绍 最近开发要用一个测试环境,是这样的Nginx+uwsgi+flask 的一个结构。下面是一些记录,在Centos 系统上使用Flask 架构部署一个简单的Python应用。然后使用Nginx作为前端反向代理,设置uWSGI应用网关处理web应用程序。 二、条件 1) 环境要求 Server OS:最小化安装 Centos...

通过Nginx设置HttpOnly Secure SameSite参数解决Cookie跨域丢失

在前面的文章中“谷歌浏览器Chrome 80版本默认SameSite导致跨域请求Cookie丢失”,我们知道 Chrome 升级到80版本后,默认限制了跨域携带cookie给后端。我们也提到了可以修改Chrome的设置或在服务端添加SameSite设置来解决,但是普通的Web框架需要升级到最新版本才支持SameSite属性,升级Web框架成本太高,因此本文...

H5网页在ios,android,微信中打开手机中的地图导航

需求 一个H5页面需要实现在ios的浏览器,android的浏览器以及微信中打开时支持打开手机的地图导航。 实现 let url = '' if (myBrowser1() === 'android') { // 判断是安卓环境 url = `androidamap://navi?sourceApplication=amap&poiname...

Mac使用nginx+rtmp服务器

一、安装Homebrow 已经安装了brow的可以直接跳过这一步。执行命令 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 如果已经安装过,而想要卸载: ruby -e "$(curl -fsSL https://raw.gi...

hbase安装配置(整合到hadoop)

如果想详细了解hbase的安装:http://abloz.com/hbase/book.html 和官网http://hbase.apache.org/ 1.  快速单击安装 在单机安装Hbase的方法。会引导你通过shell创建一个表,插入一行,然后删除它,最后停止Hbase。只要10分钟就可以完成以下的操作。 1.1下载解压最新版本 选择一个 ...