目录:
Nginx简介
Nginx (“engine x”) 是一个高性能 HTTP 和 反向代理 服务器、IMAP、POP3、SMTP 服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。其将源代码以类 BSD 许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
Nginx 特点是占有内存少,并发能力强,事实上 Nginx 的并发能力确实在同类型的网页服务器中表现较好。
Nginx 相对于 Apache 优点如下:
- 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5w/s;
- 负载均衡及反向代理性能非常强;
- 系统内存和 CPU 占用率低;
- 可对后端服务进行健康检查;
- 支持 PHP cgi 方式和 FastCGI 方式;
- 可以作为缓存服务器、邮件代理服务器;
- 配置代码简洁且容易上手。
Nginx工作原理
Nginx WEB 服务器最主要就是各种模块的工作,模块从结构上分为核心模块、基础模块和第三方模块,其中三类模块分别如下:
- 核心模块:HTTP 模块、EVENT 模块和 MAIL 模块等;
- 基础模块:HTTP Access 模块、HTTP FastCGI 模块、HTTP Proxy 模块和 HTTP Rewrite 模块;
- 第三方模块:HTTP Upstream Request Hash 模块、Notice 模块和 HTTP Access Key模块、Limit_req 模块等;
Nginx 的模块从功能上分为如下三类。
- Handlers(处理器模块):此类模块直接处理请求,并进行输出内容和修改headers 信息等操作,Handlers 处理器模块一般只能有一个;
- Filters (过滤器模块):此类模块主要对其他处理器模块输出的内容进行修改操作,最后由 Nginx 输出;
- Proxies (代理类模块):此类模块是 Nginx 的 HTTP Upstream 之类的模块, 这些模块主要与后端一些服务比如 FastCGI 等进行交互,实现服务代理和负载均衡等功能。
与apache的区别
Nginx 的高并发得益于其采用了 epoll 模型,与传统的服务器程序架构不同,epoll 是 Linux 内核 2.6 以后才出现的,Nginx 采用 epoll 模型,异步非阻塞,而 apache 采用的是 select 模型:
- Select 特点:select 选择句柄的时候,是遍历所有句柄,也就是说句柄有事件响应时,select 需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率是非常低。
- epoll 的特点:epoll 对于句柄事件的选择不是遍历的,是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。
Nginx工作流程
Nginx安装
Nginx WEB 安装时可以指定很多的模块,默认需要安装 Rewrite 模块,也即是需要系统有 PCRE 库,安装 Pcre 支持 Rewrite 功能。
安装过程:
#安装 相应库支持
yum install pcre-devel pcre wget openssl openssl-devel -y
#下载 Nginx 源码包
cd /usr/src
wget -c http://nginx.org/download/nginx-1.12.0.tar.gz
#解压 Nginx 源码包
tar -xzf nginx-1.12.0.tar.gz
#进入解压目录,然后 sed 修改 Nginx 版本信息为 JWS
cd nginx-1.12.0
sed -i -e 's/1.12.0//g' -e 's/nginx\//JWS/g' -e 's/"NGINX"/"JWS"/g' src/core/nginx.h
#预编译 Nginx
useradd www
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
#.configure 预编译成功后,执行 make 命令进行编译
make
#make 执行成功后,执行 make install 正式安装
make install
#至此 Nginx WEB 服务器安装完毕。
Nginx预编译模块详解
--with-http_ssl_module 如果需要对流量进行加密,可以使用该选项,在URLs中开始部分将会是https(需要OpenSSL库)
--with-http_realip_module 如果你的Nginx在七层负载均衡器或者是其他设备之后,它们将http头中的客户端IP地址传递,那么你将会需要启用这个模块。在多个客户处于一个IP地址的情况下使用
--with-http_addition_module 这个模块作为输出过滤器,使你能够在请求经过一个location前或者后时在该location本身添加内容
--with-http_xslt_module 该模块用于处理XML响应转换,基于一个或者多个XSLT格式(需要libxml2和libxslt库)
--with-http_image_filter_module 该模块被作为图像过滤器使用,在将图形投递到客户之前进行处理(需要libgd库)
--with-http_geoip_module 使用该模块,能够设置各种变量以便在配置文件中区段使用,基于地理位置查找客户端IP地址(需要MaxMfind GeoIP库和相应的预编译数据库文件)
--with-http_sub_module 该模块实现了替代过滤,在响应中用一个字符串替代另一个字符串
--with-http_dav_module 启用这个模块将激活使用WebDAV的配置指令。注意:这个模块也只在有需要使用的基础上启用,如果配置不正确,它将带来安全问题。
--with-http_flv_module 如果需要提供Flash流媒体视频文件,那么该模块将会提供伪流媒体
--with-http_mp4_module 这个模块支持H.264/AAC文件伪流媒体
--with-http_gzip_module 当被调用的资源没有.gz结尾格式的文件时,如果想支持发送预压缩版本的静态文件,那么使用该模块
--with-http_gunzio_module 对应不支持gzip编码的客户,该模块用于为客户解压缩预压缩内容
--with-http_random_index_module 如果你想提供从一个目录中随机选择文件的索引文件,那么这个模块需要被激活
--with-http_secure_link_module 该模块提供了一个机制,它会将一个哈希值链接到一个URL中,因此,只有那些使用正确的密码能够计算链接
--with-http_stub_status_module 启用这个模块后会收集Nginx自身的状态信息。输出的状态信息可以使用RRDtool或类似的东西来绘制成图
--with-pcre 启用nginx正则依赖库,主要对nginx配置中正则表达进行支持,例如rewrite模块。
启动Nginx服务
# 检查配置文件
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# 启动服务
[root@localhost nginx-1.12.0]# /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.12.0]# ps -ef | grep nginx
root 4903 1 0 17:25 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
www 4904 4903 0 17:25 ? 00:00:00 nginx: worker process
root 4908 1066 0 17:25 pts/0 00:00:00 grep --color=auto nginx