Nginx (读作"engine X") 由Igor Sysoev(俄罗斯)于2005年编写,是一个免费、开源、高性能的HTTP服务器和反向代理,也可以作为一个IMAP/POP3代理服务器。根据 Netcraft 的 March 2014 Web Server Survey, 现在全世界23%的网站使用Nginx,而Apache占54.68%。Nginx因为稳定,丰富的功能集,配置简单,资源占用低而闻名世界。
相关阅读:
CentOS 6.2实战部署Nginx+MySQL+PHP
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
CentOS 6.3下配置Nginx加载ngx_pagespeed模块
CentOS 6.4安装配置Nginx+Pcre+php-fpm
二、Nginx的特性和基础架构
1、基本功能
实现与服务静态文件(静态资源的web服务器),能缓存打开的文件标书费
反向代理服务器,支持缓存、负载均衡、健康状态检测
支持FastCGI
模块化机制,非DOS机制,支持多种过滤器,如gzip,ssl和用来完成图形大小调整的图像模块
支持SSL
2.扩展功能
基于名称和IP做虚拟主机
支持keepalive
支持平滑配置更新和程序版本升级
定制访问日志,支持使用日志缓存以提高性能
支持URL rewrite
支持路径别名
支持基于IP和用户的认证
支持速率限制,并发数限制等
3.nginx的基本架构
一个master,生成一个或多个worker
事件驱动:kqueue,epoll,/dev/poll
消息通知:select poll rt rignals
支持sendfile,sendfile64
支持mmap
三、nginx的配置文件详解
配置参数需要以分号结尾,语法格式如下
参数名 值1 [值2....];
配置参数中还支持使用变量
支持使用模块内置变量
用户自定义变量:set var_name value
Nginx基本核心配置的类别
用于调试、定位问题
正常运行的必备配置
优化性能的配置
事件类的配置
1.正常运行的必备配置
①、user username [groupname]
以那个用户身份运行,可以在配置文件中指定,如果没有指定则以编译时的用户为运行用户
②、pid /path/to/pidfile_name
指定nginx的pid文件
③、worker_rlimit_nofile #
指定一个worker进程所能打开的最大句柄数
④、worker_rlimit_sigpending #
设定每个用户能够发往worker进程的信息的数量
2.优化性能相关的配置
①、worker_procrsses #
worker进程的个数,通常其数值应该为cpu的物理核心数减1或2
②、worker_cpu_affinity cpumask .....
用来绑定cpu的,比如
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
③、ssl_engine device
在存在ssl硬件加速器的服务器上,指定所使用的ssl硬件加速设备
④、timer_resolution t
每次内核事件调用返回时,都会使用gettimeday()来更新nginx缓存时钟,timer_resloution用来定义每隔多久才会由gettimeday()更新一次缓存时钟,x86-64系统上,gettimeday()代价已经很小,可以忽略此配置
⑤、worker_priority nice
-20到19之间的整数值,数值越小越优先被调用
3.跟事件相关的配置
①、accept_mutex on|off
是否打开nginx的负载均衡锁,此锁能够让多个worker轮流地、序列化的与新的客户端请求建立连接;而通常当一个worker进程的负载达到其上限的7/8,master就尽可能不将请求掉地至此worker
②、lock_file /path/to/lock_file
锁文件的位置
③、accept_mutex_delay #ms
使用accept锁以后,只有一个worker能取得锁 ,一个worker进程为取得accept锁的等待市场,即用户建立等待的时间,如果某worker进程在某次试图取得锁时失败了,则至少要等#ms才能再一次请求锁
④、multi_accept on|off
是否允许一次性地响应多个用户请求,默认为off
⑤、use [epoll|rtsig|select|poll]
指定使用的模型,建议让nginx自动选择
⑥、worker_commections #
每个worker能够并发响应的最大请求数,如果为代理服务器的话,worker_rlimit_nofile=worker_commections*2
4.用于调试、定位问题:只在调试nginx时使用
①、daemon [on|off]
关闭提供守护进程的模式,是否让nignx运行于后台;调试时应该为off,使得所有信息直接输出在控制台上,默认为on
②、master_process on|off
是否已master/worker模式运行nginx,默认为on,调试时可以设置为off以方便追踪
③、error_log /path/to/error_log level
错误日志文件及其级别,调试时可以使用debug级别,但要求在编译时必须使用--with-debug启用debug功能,通常默认为error级别
四、nginx的http web功能
必须使用虚拟主机来配置站点,每个虚拟主机使用一个server{}段来定义,非虚拟主机的配置和公共选项,需要定义在server之外,http之内
1.server{}
定义一个虚拟主机:nginx支持使用基于主机名或ip的虚拟主机
2.listen
liseten address [:port]
liseten prot
listen unix:socket
default_server:定义此server为http的默认的server,如果所有的server中任意没有任何一个使用此参数,那么第一个server为默认server
rcvbuf=SIZE:接收缓冲大小
sndbuf=SIZE:发送缓冲大小
3.server_name [...]