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. Mysql 视图&事务&触发器

    参考资料 一.视图 视图的含义: 视图是一个虚拟表,是从数据库中一个或者多个表中导出来的表. 1.创建视图 #语法:CREATE VIEW 视图名称 AS SQL语句 create view teac ...

  2. 怎么删除STL容器的元素

    在STL容器有顺序容器和关联容器两种. 顺序容器删除元素的方法有两种: 1.c.erase(p) 从c中删除迭代器p指定的元素.p必须指向c中一个真实元素,不能等于c.end().返回一个指向p之后元 ...

  3. MySQL实战45讲学习笔记:第一讲

    一.MySQL逻架构图 二.连接器工作原理刨析 1.连接器工作原理图 2.原理图说明 1.连接命令 mysql -h$ip -P$port -u$user -p 2.查询链接状态 3.长连接端连接 1 ...

  4. DVWA XSS (Reflected) 通关教程

    XSS 介绍XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需 ...

  5. CSP-S 2019 简要题解

    从这里开始 又考炸了,sad.....明年应该在准备高考了,考完把坑填了好了. 一半题都被卡常,qswl.[我汤姆要报警.jpg] dfs 怎么这么慢呀,sad..... i7 牛逼! 写的比较混乱, ...

  6. Salesforce学习之路(二)Profile

    如上篇文章所述,针对User来讲,最重要的概念便是Profile和Role,因为Profile于Security息息相关,这是一个合格的产品中十分重要的一环. 何为Profile? 前文所讲--就是一 ...

  7. tensorflow 梯度裁剪

    gvs = optimizer.compute_gradients(loss) # 计算出梯度和变量值 capped_gvs = [(tf.clip_by_value(grad, -5e+10, 5e ...

  8. kubernetes之coredns玩法

    一.概述 新版本的kubernetes默认使用了coredns,这里就不赘述了.直达车:https://coredns.io/.https://kubernetes.io/docs/tasks/adm ...

  9. spring-session(一)揭秘续篇

    上一篇文章中介绍了Spring-Session的核心原理,Filter,Session,Repository等等,传送门:spring-session(一)揭秘. 这篇继上一篇的原理逐渐深入Sprin ...

  10. Java 函数式编程--流操作

    GitHub Page: http://blog.cloudli.top/posts/Java-函数式编程-流操作/ 外部迭代到内部迭代 在使用集合类时,通用的方式是在使用 for 循环集合上进行迭代 ...