一、简介
传统上基于历程或线程模子架构的web处事通过每历程或每线程处理惩罚并发毗连请求,这势必会在网络和I/O操纵时发生阻塞,其另一个一定功效则是对内存或CPU的操作率低下。生成一个新的历程/线程需要事先备好其运行时情况,这包罗为其分派堆内存和栈内存,以及为其建设新的执行上下文等。这些操纵都需要占用CPU,并且过多的历程/线程还会带来线程发抖或频繁的上下文切换,系统机能也会由此进一步下降。
在设计的最初阶段,nginx的主要着眼点就是其高机能以及对物理计较资源的高密度操作,因此其回收了差异的架构模子。受开导于多种操纵系统设计中基于“事件”的高级处理惩罚机制,nginx回收了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量回收了多路复用及事件通知机制。在nginx中,,毗连请求由为数不多的几个仅包括一个线程的历程worker以高效的回环(run-loop)机制举办处理惩罚,而每个worker可以并行处理惩罚数千个的并发毗连及请求。
假如负载以CPU麋集型应用为主,如SSL或压缩应用,则worker数应与CPU数沟通;假如负载以IO麋集型为主,如响应大量内容给客户端,则worker数应该为CPU个数的1.5或2倍。
Nginx会按需同时运行多个历程:一个主历程(master)和几个事情历程(worker),设置了缓存时还会有缓存加载器历程(cache loader)缓和存打点器历程(cache manager)等。所有历程均是仅含有一个线程,并主要通过“共享内存”的机制实现历程间通信。主历程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。
主历程主要完成如下事情:
1. 读取并验正设置信息;
2. 建设、绑定及封锁套接字;
3. 启动、终止及维护worker历程的个数;
4. 无须中止处事而从头设置事情特性;
5. 节制非间断式措施进级,启用新的二进制措施并在需要时回滚至老版本;
6. 从头打开日志文件,实现日志转动;
7. 编译嵌入式perl剧本;
worker历程主要完成的任务包罗:
1. 吸收、传入并处理惩罚来自客户端的毗连;
2. 提供反向署理及过滤成果;
3. nginx任何能完成的其它任务;
cache loader历程主要完成的任务包罗:
1. 查抄缓存存储中的缓存工具;
2. 利用缓存元数据成立内存数据库;
cache manager历程的主要任务:
1. 缓存的失效及逾期检讨;
Nginx的设置有着几个差异的上下文:main、http、server、upstream和location(尚有实现邮件处事反向署理的mail)。设置语法的名目和界说方法遵循所谓的C气势气魄,因此支持嵌套,尚有着逻辑清晰并易于建设、阅读和维护等优势。
Nginx的代码是由一个焦点和一系列的模块构成, 焦点主要用于提供Web Server的根基成果,以及Web和Mail反向署理的成果;还用于启用网络协议,建设须要的运行时情况以及确保差异的模块之间滑腻地举办交互。不外,大多跟协议相关的成果和某应用特有的成果都是由nginx的模块实现的。这些成果模块大抵可以分为事件模块、阶段性处理惩罚器、输出过滤器、变量处理惩罚器、协议、upstream和负载平衡几个种别,这些配合构成了nginx的http成果。事件模块主要用于提供OS独立的(差异操纵系统的事件机制有所差异)事件通知机制如kqueue或epoll等。协议模块则认真实现nginx通过http、tls/ssl、smtp、pop3以及imap与对应的客户端成立会话。
在nginx内部,历程间的通信是通过模块的pipeline或chain实现的;换句话说,每一个成果或操纵都由一个模块来实现。譬喻,压缩、通过FastCGI或uwsgi协议与upstream处事器通信,以及与memcached成立会话等。
二、安装设置
1.nginx的安装与设置
①、办理依赖干系
编译安装nginx需要实现安装开拓包组“Development tools”和“Server Platform Development”、“Desktop Platform Development”
②、下载、编译、安装nginx
[[email protected] ~]# wget http://nginx.org/download/nginx-1.6.0.tar.gz
[[email protected] ~]# tar xf nginx-1.6.0.tar.gz
[[email protected] ~]# cd nginx-1.6.0
首先添加用于nginx,使其来运行nginx的处事历程
[[email protected] nginx-1.6.0]# useradd -r nginx
[[email protected] nginx-1.6.0]# ./configure
> --prefix=/usr/local/nginx
> --sbin-path=/usr/local/nginx/sbin/nginx
> --conf-path=/etc/nginx/nginx.conf
> --error-log-path=/var/log/nginx/error.log
> --http-log-path=/var/log/nginx/access.log
> --pid-path=/var/run/nginx/nginx.pid
> --lock-path=/var/lock/nginx.lock
> --user=nginx
> --group=nginx
> --with-http_ssl_module
> --with-http_flv_module
> --with-http_stub_status_module
> --with-http_gzip_static_module
> --http-client-body-temp-path=/var/tmp/nginx/client/
> --http-proxy-temp-path=/var/tmp/nginx/proxy/
> --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/
> --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi
> --http-scgi-temp-path=/var/tmp/nginx/scgi
> --with-pcre
说明: