一、网站、下载、文档、模块
http://nginx.org/en/download.html
http://wiki.nginx.org/3rdPartyModules
https://github.com/search?q=nginx&type=&ref=simplesearch
ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
二、特性
1)HTTP服务器
2)HTTP反向代理服务器
3)MAIL反向代理服务器
4)性能非常高
5)资源占用少(CPU、内存)
三、安装
1)查看编译选项
./configure --help
如:
--prefix=PATH set installation prefix
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/src/pcre-8.10
2)步骤
首先,./configure:执行后可能报错,提示无xxx库,需要先安装
如:gzip 模块需要 zlib 库 ,rewrite 模块需要 pcre 库 ,ssl 功能需要 openssl 库
sudo apt-get install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev
然后,make&make install
安装成功后 /usr/local/nginx 目录下有四个子目录分别是:conf、html、logs、sbin
./nginx启动,打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功
四、使用
1)./nginx
2)./nginx -s stop 直接退出
3)./nginx –s quit 优雅退出
4)./nginx -s reload 优雅装载新配置
优点:
1. 更新平滑,不中断服务,不丢失请求
2. 新配置错误时,不会替换先前的工作进程
5)./nginx –t 检查配置的正确性
6)./nginx –v 查看基本信息
7)./nginx -V 查看详细编译信息,对调试有用
五、配置文件
worker_processes 2; user admin admin; error_log logs/error.log warn; event { use epoll; worker_connections 20480; } http { server { listen 80; server_name www.taobao.com; location / { root html; index index.html index.htm; } } }
说明:
0)最外层是main块,父层的配置会被下层继承
1)event块:定义nginx的事件模型,不可缺
2)http块:整个http服务器的必要块
3)server块:定义虚拟主机
4)location块:定义uri规则
5)if块:根据条件进行跳转
六、nginx处理流程
---解析请求与查找配置---
1)接收数据 2)分析请求 3)找到VS 4)找到LOCATION
---产生内容模块---
1)执行各阶段处理模块 2)产生回复内容
---过滤阶段---
1)过滤回复头 2)过滤回复主体
七、查找域名
nginx以名字查找虚拟主机时,如果名字可以匹配多于一个主机名定义,比如同时匹配了通配符的名字和正则表达式的名字,那么nginx按照下面的优先级别进行查找,并选中第一个>匹配的虚拟主机:
1)确切的名字;
2)最长的以星号起始的通配符名字:*.example.org;“*.example.org”不仅匹配www.example.org,也匹配www.sub.example.org。有一种形如“.example.org”的特殊通配符,它可以既匹配确切的名字“example.org”,又可以匹配一般的通配符名字“*.example.org”。
3)最长的以星号结束的通配符名字:mail.*;
4)第一个匹配的正则表达式名字(按在配置文件中出现的顺序)。nginx使用的正则表达式兼容PCRE。为了使用正则表达式,虚拟主机名必须以波浪线“~”起始。
server_name ~^www\d+\.example\.net$;否则该名字会被认为是个确切的名字
--优化--
确切名字和通配符名字存储在哈希表中。哈希表和监听端口关联。哈希表的尺寸在配置阶段进行了优化,可以以最小的CPU缓存命中失败来找到名字。nginx首先搜索确切名字的哈希表,如果没有找到,搜索以星号起始的通配符名字的哈希表,如果还是没有找到,继续搜索以星号结束的通配符名字的哈希表。因为名字是按照域名的节来搜索的,所以搜索通配符名字的哈希表比搜索确切名字的哈希表慢。
**注意特殊的通配符名字“.example.org”存储在通配符名字的哈希表中,而不在确切名字的哈希表中。正则表达式是一个一个串行的测试,所以是最慢的,而且不可扩展。鉴于以上原因,请尽可能使用确切的名字。
**举个例子,如果使用example.org和www.example.org来访问服务器是最频繁的,那么将它们明确的定义出来就更为有效:
server { listen 80; server_name example.org www.example.org *.example.org; ... }
下面这种方法相比更简单,但是效率也更低:
server { listen 80; server_name .example.org; ... }
八、location
location = / { #1 } location ^~ /images/ { #2 } location ~* \.(gif|jpg|jpeg)$ { #3 } location / { #4 }
1)= : 精确匹配
2)^~ :前缀匹配
3)~ :正则匹配
4)没有标识符,最后匹配