Nginx基础知识介绍

                                                作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.Nginx概述

  Nginx是免费的、开源的、高性能的HTTP和正向/反向代理服务器、邮件代理服务器、以及TCP/UDP代理服务器。
  Nginx官网:
    http://nginx.org   nginx的其它的二次发行版:
    Tengine:
      由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。
      它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
      从2011年12月开始,Tengine成为一个开源项目,官网 http://tengine.taobao.org/
    OpenResty:
      基于Nginx与Lua语言的高性能Web平台。章亦春带领开发,官网:http://openresty.org/cn/   Nginx解决C10K问题(10K Connections):
    http://www.ideawu.net/blog/archives/740.html

二.Nginx功能介绍

Nginx早期核心功能:
  静态的web资源服务器html,图片,js,css,txt等静态资源
  结合FastCGI(交给php程序处理)/uWSGI(交给python程序处理)/SCGI等协议反向代理动态资源请求
  http/https协议的反向代理
  imap4/pop3协议的反向代理
  tcp/udp协议的请求转发(反向代理)

1>.基础特性

特性:
  模块化设计,较好的扩展性
  高可靠性
  支持热部署:不停机更新配置文件,升级版本,更换日志文件
  低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
  event-driven,aio,mmap,sendfile
基本功能:
  静态资源的web服务器
  http协议反向代理服务器
  pop3/imap4协议反向代理服务器
  FastCGI(LNMP),uWSGI(python)等协议
  模块化(非DSO),如zip,SSL模块

2>.和web服务相关的功能

  虚拟主机(server)
  支持 keep-alive 和管道连接(利用一个连接做多次请求)
  访问日志(支持基于日志缓冲提高其性能)
  url rewirte
  路径别名
  基于IP及用户的访问控制
  支持速率限制及并发数限制
  重新配置和在线升级而无须中断客户的工作进程

 

三.Nginx组织结构

web请求处理机制:
  ()多进程方式:
      服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。
  ()多线程方式:
      与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位于同一个进程内工作的时候,可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用了多线程的方式,需要间隔一段时间(一般2-3个月左右)就重启一次才能稳定。

1>.组织模式

  Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。

主进程(master process)的功能:
  读取Nginx 配置文件并验证其有效性和正确性
  建立、绑定和关闭socket连接
  按照配置生成、管理和结束工作进程
  接受外界指令,比如重启、升级及退出服务器等指令
  不中断服务,实现平滑升级,重启服务并应用新的配置
  开启日志文件,获取文件描述符
  不中断服务,实现平滑升级,升级失败进行回滚处理
  编译和处理perl脚本 工作进程(woker process)的功能:
  接受处理客户的请求
  将请求以此送入各个功能模块进行处理
  IO调用,获取响应数据
  与后端服务器通信,接收后端服务器的处理结果
  缓存数据,访问缓存索引,查询和调用缓存数据
  发送请求结果,响应客户的请求
  接收主程序指令,比如重启、升级和退出等

2>.进程间通信

  工作进程是有主进程生成的,主进程使用fork()函数,在Nginx服务器启动过程中主进程根据配置文件决定启动工作进程的数量,然后建立一张全局的工作表用于存放当前未退出的所有的工作进程,主进程生成工作进程后会将新生成的工作进程加入到工作进程表中,并建立一个单向的管道并将其传递给工作进程,该管道与普通的管道不同,它是由主进程指向工作进程的单项通道,包含了主进程向工作进程发出的指令、工作进程ID、工作进程在工作进程表中的索引和必要的文件描述符等信息。

  主进程与外界通过信号机制进行通信,当接收到需要处理的信号时,它通过管道向相关的工作进程发送正确的指令,每个工作进程都有能力捕获管道中的可读事件,当管道中有可读事件的时候,工作进程就会从管道中读取并解析指令,然后采取相应的执行动作,这样就完成了主进程与工作进程的交互。接受处理客户的请求将请求以此送入各个功能模块进行处理IO调用,获取响应数据与后端服务器通信,接收后端服务器的处理结果缓存数据,访问缓存索引,查询和调用缓存数据发送请求结果,响应客户的请求接收主程序指令,比如重启、升级和退出等   工作进程之间的通信原理基本上和主进程与工作进程之间的通信是一样的,只要工作进程之间能够取得彼此的信息,建立管道即可通信,但是由于工作进程之间是完全隔离的,因此一个进程想要直到另外一个进程的状态信息就只能通过主进程来设置了。

  为了实现工作进程之间的交互,主进程在生成工作进程只之后,在工作进程表中进行遍历,将该新进程的ID以及针对该进程建立的管道句柄传递给工作进程中的其他进程,为工作进程之间的通信做准备,当工作进程1向工作进程2发送指令的时候,首先在主进程给它的其他工作进程工作信息中找到2的进程ID,然后将正确的指令写入指向进程2的管道,工作进程2捕获到管道中的事件后,解析指令并进行相关操作,这样就完成了工作进程之间的通信。

四.Nginx模块介绍

核心模块:
  是Nginx服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能 标准HTTP模块:
  提供HTTP协议解析相关的功能,比如:端口配置、网页编码设置、HTTP响应头设置 等等 可选HTTP模块:
  主要用于扩展标准的HTTP功能,让Nginx能处理一些特殊的服务,比如:Flash多媒体传输、解析GeoIP请求、网络传输压缩、安全协议SSL支持等 邮件服务模块:
  主要用于支持Nginx的邮件服务,包括对POP3协议、IMAP协议和SMTP协议的支持 第三方模块:
  是为了扩展 Nginx 服务器应用,完成开发者自定义功能,比如:Json支持、Lua支持等

官方还有有很多支持nginx模块这里没有列出来,如下图所示。

博主推荐阅读:
http://nginx.org/en/docs/

五.Nginx版本选择

1>.nginx的官方文档 

博主推荐阅读:
  https://nginx.org/en/CHANGES

2>.nginx的版本选择

以"nginx-1.14.2"版本为例:
nginx表示产品名称
1.14.2表示对应的版本号,.14表示对应的大版本号,而后面的2表示该版本已经被更新过3次了,即1.14.0,1.14.,1.14.。
  
生产环境中我们建议大家使用长期支持版本
  本次nginx项目介绍均基于nginx1..2版本介绍。
  一般情况下,长期支持版"Legacy versions"已经符合大多数企业使用了,除非你用到了特别新的功能,那就得根据相应版本编译安装了。 博主推荐阅读:
  http://nginx.org/en/download.html

3>.nginx的官方文档

博主推荐阅读:
  http://nginx.org/en/docs/

4>.下载预编译好的安装包(一般用于rpm/yum方式安装)

博主推荐阅读:
  http://nginx.org/en/linux_packages.html

六.Nginx安装

博主推荐阅读:
  https://www.cnblogs.com/yinzhengjie/p/12031651.html

Nginx基础知识介绍的更多相关文章

  1. TCP_Wrappers基础知识介绍

    1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...

  2. Swift Playgrounds for mac基础知识介绍

    Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...

  3. day63:Linux:nginx基础知识&nginx基础模块

    目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...

  4. Nginx 基础知识学习

    资料 基础 掘金-前端开发者必备的Nginx知识 介绍的比较综合,正向代理反向代理的区别.负载均衡等知识,都有介绍 静默虚空-Nginx 简易教程 博客园上的一篇推荐文章 简书-全面了解Nginx到底 ...

  5. WPF Step By Step -基础知识介绍

    回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...

  6. python基础----基础知识介绍

    一  编程语言的划分       编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...

  7. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  8. Nginx基础知识之————Nginx 环境的搭建?

    本课时主要给大家讲解如何在 Linux 系统下搭建 Nginx 和 Nginx 搭建过程中常见问题的知识,并结合实例让学员掌握 Nginx 环境的搭建. 下载解压: 安装gcc-c++ 从新配置文件: ...

  9. Linux基础知识介绍

    1.Linux知识说明1)文件位置 1)/etc/inittab2)模式介绍 0:挂起模式-不推荐 1:单用户模式-只有管理员可以进入该模式,可以修改root密码,处理有登录权限而没有修改文件的权限问 ...

随机推荐

  1. js toFixed() 四舍五入后并不是你期望的结果

    小学的时候学数学就知道有一种叫四舍五入的计算方式,就是对于小数位数的取舍,逢五进一,比如1.225 取两位小数后就是1.23.在前端开发中自己也少不了这样的计算,js也提供了相关的方法--toFixe ...

  2. 洛谷p2613【模板】有理数取余

    题目 \(c\)等于一个分数,求他的余数,分数是不能直接模的,除以一个数等于乘上这个数的逆元. 所以此题就是求一个逆元,费马小定理求逆元是很方便的,一个快速幂就解决了. 还要注意因为\(a,b\)的值 ...

  3. NLP之CRF应用篇(序列标注任务)

    1.CRF++的详细解析 完成的是学习和解码的过程:训练即为学习的过程,预测即为解码的过程. 模板的解析: 具体参考hanlp提供的: http://www.hankcs.com/nlp/the-cr ...

  4. [LeetCode] 161. One Edit Distance 一个编辑距离

    Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...

  5. oracle--表空间基本操作

    --查表空间使用率情况(含临时表空间) SELECT d.tablespace_name "Name", d.status "Status", TO_CHAR ...

  6. python运维开发常用模块(二)IPy

    1.安装 IP地址规划是网络设计中非常重要的一个环节,规划的好坏会直 接影响路由协议算法的效率,包括网络性能.可扩展性等方面,在这个 过程当中,免不了要计算大量的IP地址,包括网段.网络掩码.广播地 ...

  7. 父组件调用子组件 viewChild

    父组件调用子组件 1.在子组件的ts中声明一个变量 public  lineout:any="你好,我是被父组件调用的子组件";  2.在父组件的html中写入 (引入子组件) & ...

  8. ant-design-pro引用css

    ant-design-pro中默认只能引用less文件,引用了css文件也是无效的.所以需要在配置文件config.js中找到  cssLoaderOptions,在 getLocalIdent中加入 ...

  9. RocketMQ 使用情况梳理

    个人梳理有限:欢迎大家 丰富此文档 2018年 12 月 RocketMQ 版本  不适用于 新版关系请勿参考目前规划原则:          topic 创建基于业务  消费者基于模块 多对多关系 ...

  10. ['1', '2', '3'].map(parseInt) 输出答案和解析

    根据题目可以了解到这道题主要考我们的是对map函数和parseInt函数的熟悉程序,所以我们先来了解这两个函数 map 根据MDN上对于map的解释:map() 方法创建一个新数组,其结果是该数组中的 ...