NGINX 机器环境:web主机192.168.2.18 centos7 测试主机192.168.2.29 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,具有占用内存少,并发能力强等优点。 官网:www.nginx.org 官方文档:http://nginx.org/en/docs/ 中文文档:http://tengine.taobao.org/nginx_docs/cn/docs/ 二、nginx的功能与特性 1、基本功能及特性 ①作为静态资源的web服务器,能缓存打开的文件描述符; ②作为反向代理服务器,可做缓存、负载均衡; ③支持FastCGI ④模块化,非DSO机制(不能动态装卸载),过滤器gzip,SSI和图像大小调整等 ⑤支持SSL 2、扩展功能: ①基于名称和IP做虚拟主机 ②支持keepalive ③支持平滑配置更新或程序版本升级 ④定制访问日志,支持使用日志缓存以提高性能 ⑤支持url rewrite ⑥支持路径别名 ⑦支持基于IP及用户的认证; ⑧支持速率限制,并发限制等;

三、nginx的进程模型 。 ◆nginx会运行一个主进程(master)和若干个由其fork出来的工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。连接请求就由为数不多的几个仅包含一个线程的worker进程以高效的回环(run-loop)机制进行处理,这样就不会引起很多的进程/线程上下文切换,从而降低了系统开销。每个线程内部对socket的管理方式是异步非阻塞的,使用epoll事件驱动机制来实现对大量socket描述符的管理,当描述符多的时候也只是会占用较多的内存而已,而不会造成占用大量cpu时间,这就是nginx并发能力强的原因。每个worker可以并行处理数千个的并发连接及请求。 每个worker进程是平等的,当有连接请求进来,交由哪个worker处理呢?master进程在建立需要listen的socket之后,fork出若干个worker进程,所有worker进程会抢互斥锁,抢到的的接受并处理连接请求,返回数据给客户端,最后断开连接,一个请求只在由一个worker处理。 worker数是可以设置的:如果负载以CPU密集型应用为主,如SSL或压缩应用,则worker数应与CPU数相同;如果负载以IO密集型为主,如响应大量内容给客户端,则worker数应该为CPU个数的1.5或2倍。 主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。 主进程主要完成如下工作: ①读取并验正配置信息; ②创建、绑定及关闭套接字; ③启动、终止及维护worker进程的个数; ④无须中止服务而重新配置工作特性; ⑤控制非中断式程序升级,启用新的二进制程序并在需要时回滚至老版本; ⑥重新打开日志文件,实现日志滚动; ⑦编译嵌入式perl脚本; worker进程主要完成的任务包括: ①接收、传入并处理来自客户端的连接; ②提供反向代理及过滤功能; ③nginx任何能完成的其它任务; cache loader进程主要完成的任务包括: ①检查缓存存储中的缓存对象; ②使用缓存元数据建立内存数据库; cache manager进程的主要任务: ①缓存的失效及过期检验;

	 四、nginx的模块和工作原理

nginx代码是由内核和一系列的模块组成, nginx内核主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能;还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互。不过,大多跟协议相关的功能和某应用特有的功能都是由nginx的模块实现的。 ◆nginx模块从结构上分为: 核心模块 http模块 http标准模块 http可选模块 如 http_stub_status_module,http_ssl_module,http_gzip_static_module 邮件模块 第三方扩展模块 ◆nginx模块从功能上分为: handlers:此类模块直接处理请求,并生成内容 filter:此类模块对其它handlers生成的内容进行修改,最后由nginx输出 proxies:此类模块主要与后端服务如fastcgi进行交互,实现服务代理和负载均衡等功能

NGINX 1.9.11开始增加加载动态模块支持,从此不再需要替换nginx文件即可增加第三方扩展。目前官方只有几个模块支持动态加载,第三方模块需要升级支持才可编译成模块。 这里可以参考这篇文章https://www.cnblogs.com/tinywan/p/6965467.html 五、nginx安装 首先要先安装开发环境 yum -y groupinstall "Development Tools" "Server Platform Development" nginx的rewrite模块和http核心模块会用到PCRE正则表达式语法,所以要安装pcre-devel yum -y install gcc pcre-devel openssl-devel zlib-devel 我们这里采用yum安装,需要有epel源,配置epel源: yum install epel-release.noarch yum install nginx 补充一个编译安装的例子 首先创建nginx用户和组 groupadd nginx useradd -r -s /sbin/nologin nginx 下载源码包 wget http://nginx.org/download/nginx-1.14.0.tar.gz tar xf nginx-1.14.0.tar.gz cd nginx-1.14.0 ./configure
--prefix=/usr/local/nginx --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 \ #指定以什么身份运行worker进程 --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=/usr/local/nginx/client \ #临时包体的暂存路径 --http-proxy-temp-path=/usr/local/nginx/proxy
--http-fastcgi-temp-path=/usr/local/nginx/fcgi
--http-uwsgi-temp-path=/usr/local/nginx/uwsgi
--http-scgi-temp-path=/usr/local/nginx/scgi
--with-pcre make && make install