Nginx核心功能:Web服务器,代理服务器以及邮件服务器;
- Nginx的基本架构
- Nginx的工作模式:一主(Master process)N从(Work Process),即Master-Slaver模式Nginx和Apache都是进程处理请求,IIS是线程处理,可以获得比较好的性能,还是还是需要时不时的进行重启,IIS里面本身也有这个配置;
- Nginx是异步非阻塞机制处理请求,异步是指客户端发送请求/相应后,都不会等待对方相应,忙别的事去了;非阻塞是指服务器端处理过程如果有需要IO操作(硬盘读写)也不会等待;处理完毕后,再进行处理;
- Nginx是基于事件处理机制,有事件接收器,事件分发器以及事件处理器三部分组成;事件驱动处理库又称为IO多路复用(multiplexing);常见的机制有select(读写异常都是单独的队列),poll(读写异常同一个队列),epoll(等待内核通知,Linux2.5以后都可以使用);
- Nginx高级优化
- 针对内核进行优化,比如max_backlog,描述当网络接包数量大于内核处理速度的时候,允许发送队列的数据包最大的数目;
- 针对CPU进行优化,worker_processes,是指Nginx工作进程数量;worker_cpu_affinity,为每个work进程分配CPU;
- 针对网络连接进行优化,keepalive_timeout指令,两个参数,第一个参数是指服务器主动关闭时间,第二个参数(可选)是发送到客户端的keep-alive头,如果指定了该值,客户端到时间将会主动关闭;
- 针对事件驱动进行优化,use指令,用来指定处理库;worker_connections允许同时连接客户端最大连接数;
- 后端服务器配置(upstream块)
- upstream,指定一组服务器;
- server,用于指定组内服务器名称;
- ip_hash,用来保证相同客户端将会被定位到同一台后端服务器,维持Session;
- keepalive,当空闲网络连接数达到指定数量后,将会根据"近期最少使用"策略关闭网络连接;
- nginx.conf文件结构
- 全局块,包括指定工作进程数量;
- Events块,指定最大连接数以及多路复用模式(select,poll以及epoll);
- Http块,是最为庞大的块,定义Http协议服务、代理等功能
- 指令,包括access_log,tcp_timeout以及include(mime类型);
- Server块,里面指定监听的端口;
- Location块,隶属于server,用于匹配资源路径(不包含host主机部分,host部分已经在Server层级匹配,所以location级别只是匹配主机下属资源路径);
- Error_page块,指定错误代码404,500,指定跳转页面;
- Rewrite功能
- Rewrite将会引发两次请求,第一次服务器将会返回准确的地址(重写),第二次向重写后的地址发送请求;
- Rewrite模式:rewrite regex replacement [flag];注意location块中能够匹配的是不包含host以及queryString部分内容,只是资源定位部分内容,这部分内容中,只要有匹配regex部分,就可以进行重写(让浏览器向重写地址发送请求);
- Flag有三种:last,重回到配置文件location,逐个匹配,这次匹配使用的是rewrite之后的地址;break;继续在本块中执行(而且只在本块中中执行),但是之后的操作,都是基于重写之后的路径;redirect/permanent,前者返回302,告诉客户端临时跳转,后者返回301,告诉客户端是永久套转,永久跳转对于网站SEO帮助比较大,爬虫发现了永久跳转会将原始网站的排名和分数全部转移到跳转后的网站;
- Rewrite可以应用在server,location作用域内;
- if指令
- if(condition) { … };
- ~代表匹配大小写;~*代表匹配是忽略大小写;
- $parameter,是指变量,多数是指Nginx内置的全局变量,比如$request_url(请求url),$host(主机地址);
- Break,跳出当前作用域;走其他的location块;
- Return,参数可以是text,返回客户端内容;code,Http状态代码;URL,返回给客户端的URL地址;
- Nginx反向代理
- 老八
- 老九
- 老石