Nginx简介与编译安装
这是一篇关于Nginx简介与编译安装的Blog
Nginx简介
什么是Nginx
Nginx是轻量级Web服务器,或者叫做WWW(WorldWide Web)服务器,相应地也具备Web服务器的基本功能:基于REST架构风格,以统一资源描述符(Uniform Resource Identifier,URI)或者统一资源定位符(Uniform Resource Locator,URL)作为沟通依据,通过HTTP为浏览器等客户端程序提供各种网络服务。
Nginx(engine-x)是由1994年毕业于俄罗斯国立莫斯科鲍曼技术大学的IgorSysoev为俄罗斯访问量居首的Rambler.ru站点(www.rambler.ru)设计开发的。开发工作从2002年开始,第一次正式公开发布是在2004年10月4日,版本号为0.1.0。2011年7月,Nginx正式成立公司,由Igor Sysoev担任CTO,立足于提供商业级的Web服务器。Nginx的官方网站为http://www.nginx.org,同时Wiki为Nginx开设了专门的介绍页面,链接为http://wiki.nginx.org/Main。
Nginx功能
我们将Nginx提供的基本功能服务从大体上归纳为基本HTTP服务、高级HTTP服务和邮件服务等三大类:
- Nginx提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。
- Nginx提供高级HTTP服务,可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等。
- Nginx作为邮件代理服务器是最早开发这个产品的目的之一,它支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能。
Nginx特点
- 更快
- 在正常情况下,单次请求会得到更快的响应;
- 在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求。
- 高扩展性
- Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。
- 高可靠性
- 高可靠性是我们选择Nginx的最基本条件,因为Nginx的可靠性是大家有目共睹的,很多家高流量网站都在核心服务器上大规模使用Nginx。Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。
- 低内存消耗
- 一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。
- 单机支持10万以上的并发连接
- 这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大公司、网站都需要应付海量并发请求,一个能够在峰值期顶住10万以上并发请求的Server,无疑会得到大家的青睐。理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。
- 热部署
- master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。
- 最自由的BSD许可协议
- 这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继续为Nginx贡献自己的智慧。
以上7个特点当然不是Nginx的全部,拥有无数个官方功能模块、第三方功能模块使得Nginx能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加强大、复杂的功能,有些模块还支持Nginx与Perl、Lua等脚本语言集成工作,大大提高了开发效率。这些特点促使用户在寻找一个Web服务器时更多考虑Nginx。
Nginx与Apache
Web服务器 | 优点 | 缺点 |
---|---|---|
Apache | 稳定、开源、跨平台 | 重量级、不支持高并发 |
Nginx | 轻量级、高性能、跨平台、支持高并发 | 只适合处理静态文件和反向代理 |
Nginx编译安装
下载
以Ubuntu系统为例
-
准备
-编译工具:
GCC(GNU Compiler Collection)可用来编译C语言程序。Nginx不会直接提供二进制可执行程序。命令如下:
sudo apt-get install gcc g++ make
-
主要依赖库
- PCRE库:
PCRE(Perl Compatible Regular Expressions,Perl兼容正则表达式)是由PhilipHazel开发的函数库,目前为很多软件所使用,该库支持正则表达式。wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz tar -zxvf pcre-8.44.tar.gz
- zlib库
zlib库用于对HTTP包的内容做gzip格式的压缩,如果我们在nginx.conf里配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,那么,在编译时就必须把zlib编译进Nginx。wget http://zlib.net/zlib-1.2.11.tar.gz tar -zxvf zlib-1.2.11.tar.gz
-
OpenSSL开发库
如果我们的服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,那么就需要拥有OpenSSL了。另外,如果我们想使用MD5、SHA1等散列函数,那么也需要安装它。wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz tar -zxvf openssl-1.1.1d.tar.gz
- PCRE库:
获取Nginx源码
Nginx 下载地址:http://nginx.org/en/download.html
获取Nginx源码包。将下载的nginx-1.0.14.tar.gz源码压缩包放置到准备好的Nginx源代码目录中,然后解压。
tar -zxvf nginx-1.14.0.tar.gz
编译安装Nginx
安装Nginx最简单的方式是,进入nginx-1.0.14目录后执行以下3行命令:
./configure --prefix=/usr/local/nginx
make
sudo make install
-
configure命令做了大量的“幕后”工作,包括检测操作系统内核和已经安装的软件,参数的解析,中间目录的生成以及根据各种参数生成一些C源码文件、Makefile文件等。
-
make命令根据configure命令生成的Makefile文件编译Nginx工程,并生成目标文件、最终的二进制文件。
-
make install命令根据configure执行时的参数将Nginx部署到指定的安装目录,包括相关目录的建立和二进制文件、配置文件的复制。
启动Nginx
进入到 /usr/local/nginx/sbin目录,通过如下命令启动 nginx:
./nginx