Nginx介绍
nginx可以做什么?
tniginx
- 可针对静态资源高速高并发访问及缓存。
- 可使用反向代理加速,并且可进行数据缓存。
- 具有简单负载均衡、节点健康检查和容错功能。
- 支持远程FastCGI服务的缓存加速。
- 支持FastCGI、Uwsgi、SCGI、Memcached Servers的加速和缓存。
- 支持SSL、TLS、SNI。
- 具有模块化的架构:过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI及图像缩放等功能。在SSI过滤器中,一个包含多个SSI的页面,如果经由FastCGI或反向代理处理,可被并行处理。
作为WEB服务的话支持
- 支持基于名字(域名)、端口及IP地址的多虚拟主机站点。
- 支持Keep-alive和pipelined连接。
- 可进行简单、方便、灵活的配置和管理。
- 支持修改Nginx配置,并且在代码上线时,可平滑重启,不中断业务访问。
- 可自定义访问日志格式,临时缓冲写日志操作,快速日志轮询及通过rsyslog处理日志。
- 可利用信号控制Nginx进程[注释]。
- 支持3xx-5xx HTTP状态码重定向。
- 支持rewrite模块,支持URI重写及正则表达式匹配。
- 支持基于客户端IP地址和HTTP基本认证的访问控制。
- 支持PUT、DELETE、MKCOL、COPY及MOVE等较特殊的HTTP请求方法。
- 支持FLV流和MP4流技术产品应用。
- 支持HTTP响应速率限制。
- 支持同一IP地址的并发连接或请求数限制。
- 支持邮件服务代理。
简单点就是支持以下三种应用场景
(1)作为Web服务软件
(2)反向代理或负载均衡服务
(3)静态业务数据缓存服务
优点
- 支持高并发:能支持几万并发连接(特别是静态小文件业务环境)。
- 资源消耗少:在3万并发连接下,开启10个Nginx进程消耗的内存不到200MB。
- 可以做HTTP反向代理及加速缓存,即负载均衡功能,内置对RS节点服务器健康检查功能,这相当于专业的Haproxy软件或LVS的功能。
- 具备Squid等专业缓存软件等的缓存功能。
- 支持异步网络I/O事件模型epoll(Linux 2.6+)。
apache的特点
- Apache 2.2版本非常稳定强大,据官方说,Apache 2.4版本性能更强。
- Prefork模式取消了进程创建开销,性能很高。
- 处理动态业务数据时,因关联到后端的引擎和数据库,瓶颈不在Apache上。
- 高并发时消耗系统资源相对多一些。
- 基于传统的select模型,高并发能力有限。
- 支持扩展库,可通过DSO、apxs方法编译安装额外的插件功能,不需要重新编译Apache。
- 功能多,更稳定,更安全,插件也多。
- 市场份额在逐年递减。
lighttpd的特点
- 基于异步网络I/O模型,性能、并发都与Nginx相近。
- 扩展库是SO模式,比Nginx灵活。3
- 目前国内的使用率比较低,安全性没有Apache和Nginx好。
- 通过插件(mod_secdownload)可实现文件URL地址加密(优点)。
- 社区不活跃,市场份额较低。
图说三个服务器的性能对比
为什么nginx处理并发能力更强?
如何选择web服务器?
- 静态业务:若是高并发场景,尽量采用Nginx或Lighttpd,二者首选Nginx。
- 动态业务:理论上采用Nginx和Apache均可,建议选择Nginx,为了避免相同业务的服务软件多样化,增加额外维护成本。动态业务可以由Nginx兼做前端代理,再根据页面元素的类型或目录,转发到后端相应的服务器进行处理。
- 既有静态业务又有动态业务:采用Nginx。
此外,如果并发不是很大,又对Apache很熟悉,采用Apache也是可以的,Apache 2.4版本也很强大,并发连接数也有所增加。总的来说,在满足需求的前提下,首先选择自己最擅长的软件,若发现了更好的软件,可在掌握新软件之后逐步替换。虽然动态和静态业务都倾向于选择Nginx,但是大前提是自己要熟练掌握Nginx。切记,在工作中不要盲目选择软件,这可能最终会导致自己无法控制局面,从而给企业带来灾难性的损失。
nginx功能模块说明
Nginx核心功能模块(Core functionality)
access_log的配置
location
基本语法
location使用的语法为:
匹配这两种特殊字符“~”或“~ ”的区别为:“~”用于区分大小写(大小写敏感)的匹配;“~ ”用于不区分大小写的匹配。还可以用逻辑操作符“!”对上面的匹配取反,即“!~”和“!~*”。此外,“^~”的作用是在进行常规的字符串匹配检查之后,不做正则表达式的检查,即如果最明确的那个字符串匹配的location配置中有此前缀,那么不做正则表达式的检查。
示例场景
rewrite
nginx的rewrite规则需要pcre的支持,其实就是正则表达式的扩展使用
rewrite指令语法
指令语法:rewrite regex replacement[flag];
默认值:none
应用位置:server、location、if
rewrite是实现URL重写的关键指令,根据regex(正则表达式)部分的内容,重定向到replacement部分,结尾是flag标记。下面是一个简单的URL rewrite跳转的例子:
企业应用
- 可以调整用户浏览的URL,使其看起来更规范,合乎开发及产品人员的需求。
- 为了让搜索引擎收录网站内容,并让用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。
- 网站换新域名后,让旧域名的访问跳转到新的域名上,例如:让京东的360buy换成了jd.com。
- 根据特殊变量、目录、客户端的信息进行URL跳转等。
301跳转
不通域名的跳转
帐号密码认证
语法:auth_basic string|off;
默认值:auth_basic off;
使用位置:http、server、location、limit_except
·auth_basic_user_file
语法:auth_basic_user_file file;
默认值:—
使用位置:http、server、location、limit_except
auth_basic_user_file参数后接认证密码文件,file的内容如下:
fastCGI
CGI(通用网关接口)