众所周知,Apache、Lighttpd、Tomcat、 Jetty、IIS等都是著名的Web服务器(这里就不详细介绍这几个服务器了,有兴趣的可以自己查资料),那为什么我要特意学习Nginx呢?最重要的原因当然是——互联网公司(尤其是杭州的某个电商公司)面试的时候可以瞎xx吹一波,显得自己很叼(开玩笑的,最重要的原因还是其性能的优越性,我们下面细谈)

Nginx是一个跨平台的Web服务器,可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、 Windows等操作系统上,并且它还可以使用当前操作系统特有的一些高效API来提高自己的性能。例如,对于高效处理大规模并发连接,它支持Linux上的epoll、Solaris上的event ports和FreeBSD上的kqueue等(我只了解epoll I/O复用技术,剩下的并不了解,有兴趣的可以一起探讨epoll的实现和使用之类的)。

nginx的性能优越性体现在几个方面(直接参照书):

(1) 更快

这表现在两个方面:一方面,在正常情况下,单次请求会得到更快的响应;另一方面,在高峰期(如有数以万计的并发请求), Nginx可以比其他Web服务器更快地响应请求。

(2) 高扩展性

Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块:一个正常的HTTP模块在处理完请求后,会有一串HTTP过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的HTTP模块时,不但可以使用诸如HTTP核心模块、events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合度的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性。

(3) 高可靠性

这个就不谈了

(4) 低内存消耗

一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这 是Nginx支持高并发连接的基础。

(5) 单机支持10万以上的并发连接

这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量并发请求,而Nginx作为一个能够在峰值期顶住10万以上并发请求的Server,你觉得你需不需要学习。

(6) 热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以 在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。

(7) 最自由的BSD许可协议

这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继 续为Nginx贡献自己的智慧。

既然Nginx这么优秀,我们便来准备一下Nginx的使用环境,然后开始Nginx的探索之旅吧。

首先我们需要一个内核为Linux 2.6及以上版本的操作系统,因为Linux 2.6及以上内核才 支持epoll,而在Linux上使用select或poll来解决事件的多路复用,是无法解决高并发压力问题的。

Linux中我们可以通过命令uname -a来查看我们系统的一些信息,包括内核版本,比如下面显示我使用的的阿里云服务器的内核版本为4.4.0

内核版本如果低于2.6,可以参考下面的链接中的方法进行更新(这里只给出ubuntu的)

如何在 Ubuntu 中升级到最新内核

此外,你还需要安装一些软件

(1) gcc和g++

这是编译Nginx模块源代码的必备工具,直接在命令行中输入gcc -v(gcc --version也行)或者g++ -v你就可以知道自己的系统中有没有安装gcc或者g++了(如下所示,表明已经安装)

如果没有安装gcc或者g++,那么一般直接

sudo apt-get install build-essential

sudo apt-get install gcc

sudo apt-get install g++

就好了,当然有时候有可能出问题,这时候你们自己解决吧。

(2) PCRE库

这东西如果用不到正则表达式的话是不用装的

安装命令如下:

sudo apt-get install libpcre3 libpcre3-dev 即可

(3)zlib库

zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那 么,在编译时就必须把zlib编译进Nginx。

安装命令如下:

sudo apt-get install zlib1g-dev

(4)openssl库

如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP(HTTPS,这个东西阿里和腾讯面试特别问),那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。

安装命令如下:

sudo apt-get install openssl libssl-dev

我们的环境先配置到这里,后面还需要配置磁盘并进行一些linux内核参数的优化,下一篇再讲。

深入理解Nginx 阅读笔记(一)相关推荐

  1. 《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记

    <深入理解Java虚拟机>阅读笔记 本repository为<深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)>阅读笔记,因为第一章主要讲的是Java的发展历史, ...

  2. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...

  3. 《深入理解Nginx》阅读与实践(一):Nginx安装配置与HelloWorld

    最近在读陶辉的<深入理解Nginx:模块开发与架构解析>,一是想跟着大牛练练阅读和编写开源代码的能力,二是想学学Nginx优秀的架构设计,三是想找一个点深入下Linux下网络编程的细节.侯 ...

  4. 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(八)—— 模型训练-训练

    系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...

  5. 【异构图笔记,篇章3】GATNE论文阅读笔记与理解:General Attributed Multiplex HeTerogeneous Network Embedding

    [异构图笔记,篇章3]GATNE论文阅读笔记与理解:General Attributed Multiplex HeTerogeneous Network Embedding 上期回顾 论文信息概览 论 ...

  6. 基于神经网络的机器阅读理解综述学习笔记

    基于神经网络的机器阅读理解综述学习笔记 一.机器阅读理解的任务定义 1.问题描述 机器阅读理解任务可以形式化成一个有监督的学习问题:给出三元组形式的训练数据(C,Q,A),其中,C 表示段落,Q 表示 ...

  7. 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(九)—— 预测与校验

    系列目录: 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(一)--数据 菜鸟笔记-DuReader阅读理解基线模型代码阅读笔记(二)-- 介绍及分词 菜鸟笔记-DuReader阅读理解基线模 ...

  8. 【阅读笔记】Java游戏服务器架构实战

    [阅读笔记]Java游戏服务器架构实战 书籍链接:Java游戏服务器架构实战 作者提供的源码链接:kebukeYi / book-code 这里对书籍中比较重要的知识点(精华部分)进行摘录(总结) 文 ...

  9. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  10. nginx 修改html header,nginx 安全笔记 (修改nginx的header信息和错误显示版本号)

    nginx 安全笔记 (修改nginx的header信息和错误显示版本号) 发布时间:2020-08-07 16:18:18 来源:51CTO 阅读:1189 作者:674591788 随笔记载,欢迎 ...

最新文章

  1. python autoreload
  2. Python-OpenCV 笔记3 -- 霍夫变换(Hough)
  3. [Java基础]反射练习之越过泛型检查,运行配置文件制定内容
  4. android studio 2.3 instant run,android studio 2.3 instant run not working
  5. MySQL笔记-group by和聚合函数的使用
  6. 西门子智能门锁设计_如何过度设计门锁
  7. 【MyBatis笔记】0-MyBatis简介
  8. python中的pickle解析
  9. linux测试libreoffice,LibreOffice 7.0 开放测试,最终版本将于8月初发布
  10. 网络通信基础——网络协议
  11. 利用Java编写自动关机程序(包括输入、输出、控制电脑自动关机)
  12. 高等数学-空间解析几何与向量代数
  13. 腾讯云学生服务器+wordpress搭建个人网站
  14. 免费开源51单片机个人课程设计--基于stc89c52及红外遥控的测温智能电风扇
  15. poj日记(3295)
  16. 利用android的通知Notification来实现msn的登录状态
  17. 超越CBAM,全新注意力GAM:不计成本提高精度
  18. 6.5 自定义报表方案
  19. 极验第四代滑块验证码破解(二):滑块缺口识别
  20. 记录一下sql两个表关联的查询使用方法

热门文章

  1. 限时,字节Java程序性能优化宝典大全,这才叫真正的性能优化
  2. CCS各个版本软件的下载及安装说明(内涵有详细获取安装包以及步骤奥)
  3. Linux服务器的软件安装步骤
  4. Linux软件安装到哪个目录
  5. 三阶段DEA模型操作步骤笔记
  6. python和按键精灵哪个稳定_按键精灵教程,学了这个你也能做出稳定的脚本
  7. 基于SSM实现的在线音乐网站【附源码】(毕设)
  8. 计算机网络之网络安全基础-网络安全概述
  9. cdr宏教程_如何自学coreldraw vba
  10. CryptoKitties加密猫合约详解