Nginx基础
1、Nginx服务器是轻量级的web服务器。
Nginx是一款免费开源的高性能HTTP服务器及代理服务器产品,同时还可以提供IMAP/POP3代理服务等。
流行的服务器:Apache服务器、Microsoft IIS服务器、Tomcat服务器(轻量级的web服务器)、Nginx服务器(轻量级的web服务器)、Lighttpd服务器(轻量级的web服 务器)等。
2、Nginx功能特性:(基本HTTP服务、高级HTTP服务、邮件服务)
Nginx提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤,支持ssl。
Nginx提供高级HTTP服务,可以进行自定义配置,支持虚拟机,支持URL重定向,支持网络监控,支持流媒体传输。
Nginx作为邮件代理服务器,支持IMAP/POP3代理服务功能,支持SMTP代理服务。
3、负载均衡
负载均衡,一般包含两方面的含义。一方面,将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅度提高网络 系统的处理能力;另一方面,将大量的前端并发访问或数据流量分担到多个后端网络节点上分别处理,这样可以有效减少前端用户等待响应的时间。
Nginx服务器的负载均衡主要是对大量前端访问和流量进行分流,保证前端用户访问效率。
4、Nginx服务器负载均衡策略:
内置策略:轮询、加权轮询、IPhash。
扩展策略:url hash、fair等。
轮询:将每个前端请求按顺序(时间、排序)逐一分配到不同的后端节点上,对应出现问题的后端节点自动排除。
加权轮询:在轮询的基础上考虑后端节点接受请求的权重,指定各后端节点被轮询到的几率。该策略主要用于后端节点性能不均的情况。
IPhash:将前端访问IP进行hash操作。然后根据hash结果将请求分配到不同的后端节点。该策略是一种特殊的轮询策略。这样每个前端访问IP会固定访问一个后端节点,这样做的好处是避免前端用户的session在后端节点共享的问题。
urlhash:与IP hash相近,IP hash是ip进行hash,而url hash是对URL进行hash操作,优点是:如果后端有缓存服务器,它能够提高缓存效率,同时解决session问题;缺点:如果后端节点出现异常,不能自动排斥该节点,导致服务器返回503错误。
Fair:将前端请求转发到一个最近负载最小的后端节点,负载最小怎么判断? Nginx通过后端节点对请求响应时间来判断负载情况,响应时间短,负载就轻。然后Nginx把前端请求转发到选中的负载最轻的节点。
5、nginx.conf配置文件结构总览,生效范围
配置文件由三部分组成:全局块、events块、http块。
1、 全局块:
是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是服务器全局。
通常包括配置运行Nginx服务器的用户组、允许生产worker_processes数,进程PID存放路径、日志存放路径和类型以及配置文件引入。
user root;
用于配置运行Nginx服务器的用户(组)
worker_process 2;
是nginx服务器实现并发处理服务的关键。理论上是越大越好,但受操作系统本身资源和能力的制约。
2、 events块
涉及的指令主要影响Nginx服务器与用户的网络连接。
events {
# worker_connections 12040;
worker_connections 2048;
multi_accept on;
useepoll;
}
常用到设置包括是否开启对多worker_process下的网络连接进行序列化,是否允许同时接受多个网络连接,每个worker_process可以同时支持的最大连接数。、
该部分对服务器的性能影响较大。
3、 http块
最重要的部分,代理、缓存、日志等大多数的功能和第三方模块的配置都可以放在这个模块。
http块可以包含自己的全局块,也可以包含server块,server块又进一步包含location块。
配置指令包含文件引入、mime-type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求上限数。
4、server块
使用Nginx服务器提供的web服务时,利用虚拟主机的技术就可以避免为每一台要运行的网站提供单独的Nginx服务器,也无需为每个网站对应运行一组Nginx进程。虚拟主 机技术是的nginx服务器可以在同一台服务器上只运行一组nginx进程,就可以运行多个网站。Server块就是用来完成这个功能的。
每一个http块都可以包含多个server块,而每个server块就相当于一台虚拟主机,它的内部可以有多台主机联合提供服务,一起对外提供在逻辑上关系密切的一组服务。
Server块也有自己的全局块,同时包含多个location块。最常见的配置是本虚拟机的监听配置和本虚拟主机的名称或IP配置。
server {
listen 8081;
server_name st1.bab.com;
。。。。。。。
5、location块
每个server块可以包含多个location块。Location块就是server块的一个指令,nginx服务器在许多功能上的灵活性往往在location块中体现。
Location块作用:基于nginx服务器接收到的请求字符串(server_name/url-string),对除虚拟主机名称(/IP)之外的字符串进行匹配,对特定的请求进行处理。地址定 向、数据缓存和应答控制功能都再此部分完成。
6、配置网络监听
Listen *:80 | *:8000; 监听所有80端口和8000端口。
Listen 192.168.1.10:8000 监听具体IP和具体的端口上的连接
Listen 192.168.1.10 监听具体IP的所有端口上的连接
Listen 8000 监听具体端口上的所有IP连接
7、基于名称的虚拟主机配置
这里的主机是指:server块对外提供的虚拟主机。
server_name st1.pppb.com;
设置好主机名称并配置好DNS,用户就可以使用这个名称向此虚拟机发送请求了。
8、基于IP的虚拟主机配置
即为nginx服务器提供的每台虚拟主机配置一个不同的IP,因此需要将网卡设置为同时能够监听多个IP地址。
9、配置location块
Location的语法结构:location[ = | ~ | ~* | ^~ ]uri{ }
Uri变量是待匹配的请求字符串,如:/appserver.php/ 也可以包含正则表达式。
方括号里的部分,是可选的。用来改变请求字符串与uri的匹配方式。
在不添加方括号选项时,nginx是如何搜索并使用location块的uri和请求字符串匹配的?:nginx服务器首先在server块的多个location块中搜索是否存在标准uri(不包含正 则表达式的)和请求字符串匹配,如果有多个可以匹配,就记录匹配度最高的一个。然后,服务器在用location块中的正则uri和请求字符串匹配,当第一个正则uri匹配成 功,结束搜索,并使用这个location块处理此请求;如果正则匹配全部失败,就使用刚才匹配的最高的location块处理此请求。
选项标识的含义:
= 用在标准uri前,要求请求字符串与uri严格匹配。成功,就停止搜索并立即处理此请求。
~ 用来表示URI包含正则表达式。区分大小写。
~* 用来表示URI包含正则表达式。不区分大小写。
如果URI包含正则,则必须使用~ 或~* 。如:location~ .*\.(gif|jpg|jpeg|png)$
^~ 用在标准URI前,要求nginx服务器找到标识URI和请求字符串匹配最高的的location块后,立即使用此location处理请求,而不再使用location块的正则URI和请求字符串 比较。
10、配置请求的根目录
Web服务器接收到网络请求,首先在服务器端指定目录寻找请求资源。在nginx服务器中,指令root就是用来配置这个根目录的。
以上资料纯属个人学习使用,不做其他用途。
参考资料:nginx高性能web服务器详解 苗泽