1. Nginx 介绍
Nginx是 HTTP 和反向代理服务器,邮件代理服务器,以及 Igor Sysoev 最初编写的通用TCP/UDP 代理服务器。在很长一段时间以来,它一直在许多负载重的俄罗斯网站上运行,包括: Yandex,Mail.Ru,VK 和 Rambler。根据Netcraft的说法,Nginx在 2017 年3 月份服务或代理了28.50%的最繁忙的网站。这里有一些成功案例:Netflix,Wordpress.com,FastMail.FM。
Nginx特性
Nginx有什么不同?Nginx使用可扩展的事件驱动架构,而不是更传统的过程驱动架构。这需要更低的内存占用,并且当并发连接扩大时,使内存使用更可预测。在传统的 Web 服务器体系结构中,每个客户端连接作为一个单独的进程或线程处理,随着网站的流行度增加,并发连接数量的增加,Web服务器减慢,延迟了对用户的响应。从技术的角度来看,产生一个单独的进程/线程需要将CPU切换到新的任务并创建一个新的运行时上下文,消耗额外的内存和CPU时间,从而对性能产生负面影响。Nginx开发的目标是实现10倍以上的性能,优化服务器资源的使用,同时也能够扩展和支持网站的动态增长。因此,Nginx成为最知名的模块化,事件驱动,异步,单线程 Web 服务器和 Web 代理之一。Nginx是一个高性能的 Web 和反向代理服务器, 它具有很多非常优越的特性:
作为 Web 服务器
相比 Apache, Nginx使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应,感谢 Nginx为我们选择了 epoll and kqueue 作为开发模型
作为负载均衡服务器
Nginx既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP 代理服务器 对外进行服务。Nginx用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
Nginx架构
处理并发连接的传统的基于进程或线程的模型涉及使用单独的进程或线程处理每个连接,并阻止网络或输入/输出操作。
根据应用,在内存和 CPU 消耗方面可能非常低效。产生一个单独的进程或线程需要准备一个新的运行时环境,包括分配堆和堆栈内存,以及创建新的执行上下文。额外的CPU时间也用于创建这些项目,这可能会导致由于线程在过多的上下文切换上的转机而导致性能下降。所有这些并发症都表现在较老的 Web 服务器架构(如Apache)中。 这是提供丰富的一般应用功能和优化的服务器资源使用之间的一个折衷。
从一开始 Nginx就是一个专门的工具,可以实现更高性能,更密集和经济地使用服务器资源,同时实现网站的动态发展,所以它采用了不同的模式。它实际上受到各种操作系统中高级事件机制的不断发展的启发。发展结果变成是一个模块化的,事件驱动的,异步的,单线程的非阻塞架构的 nginx 代码基础。nginx大量使用复用和事件通知,并专门用于分离进程的特定任务。连接在有限数量的单线程进程称为工作(worker)的高效运行循环中处理。 在每个工作(worker)中, nginx可以处理每秒数千个并发连接和请求
2. Nginx 安装
准备第三方支持库源码:
nginx-1.13.7.tar.gz
openssl-1.1.0g.tar.gz
pcre-8.41.tar.gz
zlib-1.2.11.tar.gz
解压每个包
wget http://nginx.org/download/nginx-1.13.7.tar.gz
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
wget http://ftp.pcre.org/pub/pcre/pcre-8.41.tar.gz
wget http://www.zlib.net/zlib-1.2.11.tar.gz
$ tar xzvf nginx-1.13.7.tar.gz
$ tar xzvf openssl-1.1.0g.tar.gz
$ tar xzvf pcre-8.41.tar.gz
$ tar xzvf zlib-1.2.11.tar.gz
$ cd nginx-1.13.7
./configure --prefix=/usr/local/nginx/ --with-http_realip_module --with-http_addition_module --with-http_gzip_static_module --with-http_secure_link_module --with-http_stub_status_module --with-stream --with-pcre=/home/alpha/share/nginx/pcre-8.41 --with-zlib=/home/alpha/share/nginx/zlib-1.2.11 --with-openssl=/home/alpha/share/nginx/openssl-1.1.0g
$ make
$ sudo make install
在/usr/local/目录下面, 产生了 nginx 的目录
$ ./sbin/nginx –c ./conf/nginx.conf
参考资料: