Nginx 是什么

Nginx ("engine x") 是一个开源的,支持高性能、高并发的 Web 服务和代理服务软件。它是由俄罗斯人 Igor Sysoev 开发的,最初被应用在俄罗斯的大型网站 www.rambler.ru 上。后来作者将源代码以类 BSD 许可的形式开源出来供全球使用。

Nginx 的官方介绍见 http://nginx.org/en/

Nginx 中文介绍见 http://tengine.taobao.org/nginx_docs/cn/


Nginx 的重要特性

Nginx 基本特性

  • 可针对静态资源高速高并发访问及缓存。
  • 可使用反向代理加速,并且可进行数据缓存。
  • 具有简单负载均衡、节点健康检查和容错功能。
  • 支持远程 FastCGI 服务的缓存加速。
  • 支持 FastCGI、Uwsgi、SCGI、Memcached Servers 的加速和缓存。
  • 支持SSL、TLS、SNI。
  • 具有模块化的架构:过滤器包括 gzip 压缩、ranges 支持、chunked 响应、XSLT、SSI 及图像缩放等功能。在SSI 过滤中,一个包含多个 SSI 的页面,如果经由 FastCGI 或反向代理,可被并行处理。

Nginx Web 服务特性

  • 支持基于名字、端口及IP的多虚拟主机站点。
  • 支持 Keep-alive 和 pipelined 连接。
  • 可进行简单、方便、灵活的配置和管理。
  • 支持修改 Nginx 配置,并且在代码上线时,可平滑重启,不中断业务访问。
  • 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过 rsyslog 处理日志。
  • 可利用信号控制 Nginx 进程。
  • 支持 3xx-5xx HTTP状态码重定向。
  • 支持 rewrite 模块,支持 URI 重写及正则表达式匹配。
  • 支持基于客户端 IP 地址和 HTTP 基本认证的访问控制。
  • 支持 PUT、DELETE、MKCOL、COPY 及 MOVE 等特殊的 HTTP 请求方法。
  • 支持 FLV 流和 MP4 流技术产品应用。
  • 支持 HTTP 响应速率限制。
  • 支持同一 IP 地址的并发连接或请求数限制。
  • 支持邮件服务代理。

面试必答特性

  • 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
  • 资源消耗少:在3万并发连接下,开启10个 Nginx 线程消耗的内存不到200MB。
  • 可以做 HTTP 反向代理及加速缓存,即负载均衡功能,内置对 RS 节点服务器健康检查功能,这相当于专业的 Haproxy 软件或 LVS 的功能。
  • 具备 Squid 等专业缓存软件等的缓存功能。
  • 支持异步网络 I/O 事件模型 epoll( Linux 2.6 内核 以上)。

Nginx 在企业中的应用

作为 Web 服务软件

Nginx 是一个支持高性能、高并发的 Web 服务软件,它具有很多优秀的特性,作为 Web 服务器,与 Apache 相比,Nginx 能够支持更多的并发连接访问,但占用的资源却更少,效率更高,在功能上也强大了很多,几乎不逊色于 Apache。

反向代理或负载均衡服务

在反向代理或负载均衡服务方面,Nginx 可以作为 Web 服务、PHP 等动态服务及 Memcached 缓存的代理服务器,它具有类似专业反向代理软件(如 Haproxy)的功能,同时也是一个优秀的邮件代理服务软件(最早开发这个产品的目的之一就是作为邮件代理服务),同时 Nginx 的代理在 Nginx 1.9.0 发布之后,还支持 TCP 的代理。

前端业务数据缓存服务

在 Web 缓存服务方面, Nginx 可通过自身的 proxy_cache 模块实现类 Squid 等专业缓存软件的功能。

Nginx的这三大功能中, Web服务、反向代理或负载均衡服务是国内使用 Nginx 的主要场景。


Nginx 与其他 Web软件产品的对比

Apache 软件特点

  • Apache2.2 版本非常稳定强大,据官方说,Aapche 2.4 版本性能更强。
  • prefork 模式取消了进程创建开销,性能很高。
  • 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在 Apache 上。
  • 高并发时消耗资源相对多一些。
  • 基于传统的 select 模型,高并发能力有限。
  • 支持扩展库,可以通过 DSO、apxs 方法编译安装额外的插件功能,不需要重新编译 Apache。
  • 功能多,更稳定,更安全,插件也多。
  • 市场份额在逐年递减。

Lighttpd 软件特点

  • 基于异步网络 I/O 模型,性能、并发都与 Nginx 相近。
  • 扩展库是 SO 模式,比 Nginx 灵活。
  • 目前国内使用率比较低,安全性没有 Apache 和 Nginx 好。
  • 通过插件(mod_secdownload)可实现文件 URL 地址加密(优点)。
  • 社区不活跃,市场份额交较低。

Nginx、Apache、Lighttpd 对比

  • 处理静态小文件(小于1MB)时,Nginx 和 Lighttpd 比 Apache 更有优势(高并发、资源占用少)。这是因为 Nginx 和 Lighttpd 是基于异步网络 I/O 模型,而 Apache 基于传统的 select 模型。
  • 处理动态数据时,三者差距不大,Apache 更有优势一点。这是因为处理动态数据的能力取决于 PHP(java)和后端数据库的服务能力,也就是说瓶颈不在 Web 服务器上,一般情况下普通的 PHP 引擎支持的并发连接参考值为 300~1000,Java 引擎和数据库的并发连接参考值为 300~1500。业务场景及网站架构不同,并发连接数也会有上下浮动,这些数字仅供参考。
  • Nginx 不支持类似 Apache 的动态模块加载,安装扩展模块必须重新编译 Nginx( Tengine 支持动态模块加载)。
  • Nginx 不仅支持 Web服务,同时还能做反向代理或负载均衡服务以及前端业务数据缓存服务。
  • Nginx 市场份额逐年快速增长,社区非常活跃。

Apache select 和 Nginx epoll 对比

下面用两个通俗的比喻来解释 Apache 采用的 select 模型 和 Nginx 采用的 epoll 模型之间的区别。

第一个比喻:假设你在大学读书,住的宿舍楼有很多房间,你的朋友要来找你。select 版宿管大妈就会带着你的朋友到各房间挨个去找,直到找到你位置。而 epoll 版宿管大妈会先记下每位入住同学的房间号,你的朋友来找你时,只需要告诉你的朋友你住在哪个房间即可,不用亲自带着你的朋友满宿舍楼找人了。如果同时来了 100 个人,都要找自己住在这栋楼的同学, epoll 版宿管大妈的效率要更高。

第二个比喻:select 的调用复杂度是线性的,即O(n)。举个例子,一个保姆照看一群孩子,如果把孩子是否需要尿尿比作网络 I/O 事件,select 的作用就好比这个保姆挨个询问每个孩子“你要尿尿吗?”如果孩子回答是,保姆则把孩子领出去放到另外一个地方。当所有的孩子询问完之后,保姆领着这些要尿尿的孩子去上厕所(处理网络 I/O 事件)。在 epoll 机制下,保姆不需要挨个询问每个孩子是否需要尿尿。取而代之的是,如果孩子需要尿尿,他就自主动站到事先约定好的地方,而保姆的职责就是查看事先约定好的地方是否有孩子。如果有小孩,则领着孩子去上厕所(网络事件处理)。因此,epoll 的这种机制,能够高效地处理成千上万的并发连接,而且性能不会随着连接数增加而下降太多。

Apache select 和 Nginx epoll 技术对比

指标 select epoll
性能 随着连接数的增加性能急剧下降。处理成千上万并发连接时,性能很差 随着连接数的增加,性能基本上没有下降。处理成千上万并发连接时,性能很好
连接数 连接数有限制,处理的最大连接数不超过 1024 个 。如果超过 1024 个则需修改 FD_SETSIZE 宏,并重新编译 连接数无限制
内在处理机制 线性轮询 回调 callback
开发复杂性

更多关于 select 和 epoll 原理及深入区别

Apache select和Nginx epoll模型区别

Kqueue与epoll机制

怎样理解阻塞非阻塞与同步异步的区别?


如何正确选择 Web 服务器

虽然国内很多人都在使用 Nginx ,但是 Apache、Lighttpd 这两个 Web 服务器同样非常强大且使用,尤其 Apache ,到目前为止仍是全球使用最广泛的 Web 服务软件。

在实际工作中,我们需要根据业务需求来选择合适的业务服务软件,建议如下:

  • 静态业务:若是高并发场景,尽量采用 Nginx 或 Lighttpd ,首选 Nginx。
  • 动态业务:理论上采用 Nginx 和 Apache 均可,建议选择 Nginx,为了避免相同业务服务软件多样化,增加额外维护成本。动态业务可以由 Nginx 兼做前端代理,再根据页面元素的类型或目录,转发到后端相应的服务器进行处理。
  • 既有静态又有动态业务:采用 Nginx。

Nginx 介绍的更多相关文章

  1. Nginx 介绍和安装

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...

  2. LNMP架构介绍、MySQL和PHP安装、Nginx介绍

     6月6日任务  12.1 LNMP架构介绍12.2 MySQL安装12.3/12.4 PHP安装12.5 Nginx介绍 扩展Nginx为什么比Apache Httpd高效:原理篇 http://w ...

  3. Nginx介绍和使用

    Nginx介绍和使用 一.介绍 Nginx是一个十分轻量级并且高性能HTTP和反向代理服务器,同样也是一个IMAP/POP3/SMTP代理服务器. 二.特性 HTTP服务器 反向代理服务器 简单的负载 ...

  4. nginx介绍及相关实验

    一.nginx介绍 1.nginx简介 Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP 服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 R ...

  5. Linux centosVMware LNMP架构介绍、MySQL安装、PHP安装、Nginx介绍

    一. LNMP架构介绍 和LAMP不同的是,提供web服务的是Nginx 并且php是作为一个独立服务存在的,这个服务叫做php-fpm Nginx直接处理静态请求,动态请求会转发给php-fpm   ...

  6. 三十六、www服务nginx介绍

    一.Nginx介绍 ,相对于LAMP经典组合而言,LNMP是近几年来流行的组合.(linux+nginx+mysql+php) Nginx是一个开源www服务软件,是俄罗斯人开发的,本身是一款静态ww ...

  7. nginx介绍及其原理

    nginx介绍及其原理 nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行. nginx由俄罗斯程序设计师lgor Sy ...

  8. Nginx介绍,安装,配置

    引言 为什么要学习Nginx 问题一: 客户端到底要将请求发送给哪台服务器? 问题二: 如果所有客户端的请求都发送给了服务器1,那另一台岂不是废了 问题三: 客户端发送的请求可能是申请动态资源的,也可 ...

  9. Nginx介绍

    原文:http://www.aosabook.org/en/nginx.html 作者: Andrew Alexeev nginx(发音"engine x")是俄罗斯软件工程师Ig ...

  10. nginx介绍(三) 配置篇

    3. nginx配置 nginx配置系统受益于Igor Sysoev(nginx创始人)在Apache(阿帕奇软件基金会)的经历.Igor Sysoev洞察出可扩展的配置系统对于一个web服务器来说是 ...

随机推荐

  1. 异常Cannot get a text value from a numeric cell

    POI操作Excel时偶尔会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类 ...

  2. EL 表达式截取字符串/替换字符/……

    <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 下面是 ...

  3. Codeforces Round #369 (Div. 2)-D Directed Roads

    题目大意:给你n个点n条边的有向图,你可以任意地反转一条边的方向,也可以一条都不反转,问你有多少种反转的方法 使图中没有环. 思路:我们先把有向边全部变成无向边,每个连通图中肯定有且只有一个环,如果这 ...

  4. Strom在本地运行调试出现的错误

    1.错误日志 31385 [main] WARN backtype.storm.daemon.nimbus - Topology submission exception. (topology nam ...

  5. 字符串处理-Hdu1004

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1004 题目大意:给你一个数n,要求输入n个字符串,在这n个字符串中,我们需要输出出现次数最多的字符串. ...

  6. SQLite中SELECT基本形式

    SQLite中SELECT基本形式 每个数据库通常都包含多个表,而每个表又包含多条数据.要获取数据库中的数据,就需要SQL语言提供的查询语句SELECT.本章将讲解和SELECT语句相关的内容,其中包 ...

  7. JS中集合对象(Array、Map、Set)及类数组对象的使用与对比

    原文地址 在使用js编程的时候,常常会用到集合对象,集合对象其实是一种泛型,在js中没有明确的规定其内元素的类型,但在强类型语言譬如Java中泛型强制要求指定类型. ES6引入了iterable类型, ...

  8. BZOJ.4319.[cerc2008]Suffix reconstruction(后缀数组 构造 贪心)

    题目链接 \(Description\) 给定SA数组,求满足SA[]的一个原字符串(每个字符为小写字母),无解输出-1. \(Solution\) 假设我们现在有suf(SA[j]),要构造suf( ...

  9. 洛谷.3834.[模板]可持久化线段树(主席树 静态区间第k小)

    题目链接 //离散化后范围1~cnt不要错 #include<cstdio> #include<cctype> #include<algorithm> //#def ...

  10. 服务器被ddos攻击?分析如何防止DDOS攻击?

    上周知名博主阮一峰的博客被DDOS攻击,导致网站无法访问而被迫迁移服务器的事情,引起了广大网友的关注及愤慨,包括小编的个人博客也曾接受过DDOS的“洗礼”,对此感同身受.所以,本文我们一起来了解下DD ...