Nginx做为新诞生的web服务器,能够实现比Apache更好的并发性,自从诞生以来市场占有率稳步提高
Nginx的特性:
基础特性:
模块化设计,较好的扩展性
支持热部署:不停机更新配置文件,升级版本,更换日志文件
低内存消耗:10000个keep-alive连接模式下的非活动连接,仅需2.5M内存
event-driven,aio,mmap,sendfile
和web服务相关的功能:
虚拟主机(server)
支持 keep-alive 和管道连接(利用一个连接做多次请求)
访问日志(支持基于日志缓冲提高其性能)
url rewirte
路径别名
基于IP及用户的访问控制
支持速率限制及并发数限制
重新配置和在线升级而无须中断客户的工作进程
Nginx的web请求处理机制:
1、多进程方式:
服务器每接收到一个客户端请求就有服务器的主进程生成一个子进程响应客户端,直到用户关闭连接,这样的优势是处理
速度快,子进程之间相互独立,但是如果访问过大会导致服务器资源耗尽而无法提供请求。
2、多线程方式:
与多进程方式类似,但是每收到一个客户端请求会有服务进程派生出一个线程来个客户方进行交互,一个线程的开销远远小于一个进程,
因此多线程方式在很大程度减轻了web服务器对系统资源的要求,但是多线程也有自己的缺点,即当多个线程位一个进程内工作的时候,
可以相互访问同样的内存地址空间,所以他们相互影响,一旦主进程挂掉则所有子线程都不能工作了,IIS服务器使用
了多线程的方式,需要间隔一段时间就重启一次才能稳定。
主进程(master process)的功能:
1,读取Nginx 配置文件并验证其有效性和正确性
2,建立、绑定和关闭socket连接
3,按照配置生成、管理和结束工作进程
4,接受外界指令,比如重启、升级及退出服务器等指令
5,不中断服务,实现平滑升级,重启服务并应用新的配置
6,开启日志文件,获取文件描述符
7,不中断服务,实现平滑升级,升级失败进行回滚处理
8,编译和处理perl脚本
工作进程(woker process)的功能:
1,接受处理客户的请求
2,将请求以此送入各个功能模块进行处理
3,IO调用,获取响应数据
4,与后端服务器通信,接收后端服务器的处理结果
5,缓存数据,访问缓存索引,查询和调用缓存数据
6,发送请求结果,响应客户的请求
7,接收主程序指令,比如重启、升级和退出等
编译安装
1,下载Nginx源码安装包
wget http://nginx.org/download/nginx-1.14.2.tar.gz
2,解压安装包
tar xf nginx-1.14.2.tar.gz -C /usr/local
3,添加预启动的执行环境
yum install pcre pcre-devel openssl-devel gcc gcc-c++ perl-ExtUtils-Embed
4,添加编译安装选项,并检查编译环境
./configure
--prefix=/apps/nginx
--user=nginx
--group=nginx
--with-http_ssl_module
--with-http_v2_module
--with-http_realip_module
--with-http_stub_status_module
--with-http_gzip_static_module
--with-pcre --with-stream
--with-stream_ssl_module
--with-stream_realip_module
--with-http_perl_module
5,编译安装
make && make install
6,增加环境变量
vim /etc/profile.d/nginx.sh
PATH=/apps/nginx/sbin/:$PATH
由于Nginx是高度模块化的web服务器,有很多的第三方对此进行了二次开发,如淘宝的Tengine等,如果想添加第三方模块,需要在编译时进行添加。如增加echo模块,此模块可以打印出Nginx的内置变量,在后期进行排错时可以使用
1,下载第三方模块
yum -y install git
git clone https://github.com/openresty/echo-nginx-module.git
2,将第三方模块加入编译选项
./configure \
--prefix=/apps/nginx \
--user=nginx --group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-http_perl_module \
--add-module=/usr/local/src/echo-nginx-module #增加第三方模块的路径
3,编译安装
make && make install