nginx知识点总结(一)

编程

1、静态资源服务

通过本地文件系统提供服务

2、反向代理服务

Nginx的强大功能;

缓存;

负载均衡。

3.API服务

OpenResty

 

ngnix功能特性:

1.ngnix提供基本HTTP服务

可以作为HTTP代理服务器和单项代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持ssl等。

2.nginx提供高级HTTP服务

可以进行自定义配置,支持虚拟主机,支持URL重定向,支持网络监控,支持流媒体传输等。

3.ngnix作为邮件服务器

nginx作为邮件服务器是最早开发这个产品的目的之一,它支持IMAP/POP3代理服务功能,支持内部SMTP代理服务功能。

 

ngnix为什么会出现?

1.互联网的数据量快速增长;

2.摩尔定律:性能提升;

3.低效的Apache:apache在设计时使用了以“进程”为基础的结构,导致Apache再多处理器环境中性能有所下降。

 

nginx的优点:

1.高并发,高性能;

2.可扩展性好;

3.高可靠性;

4.热部署;

5.BSD许可证;

 

ngnix组成部分:

ngnix二进制可执行文件:由各模块源码编译出的一个文件;

ngnix.conf配置文件:控制ngnix的行为;

access.log访问日志:记录每一条http请求信息;

error.log错误日志:定位问题;

 

nginx服务的信号控制:

nginx服务在运行时,会保持一个主进程和一个或多个worker process工作进程。

1.获取主进程的进程号PID,有2种途径:第一种,在nginx服务启动以后,默认在ngnix服务器安装目录下的logs目录中会产生文件名为nginx.pid的文件,此文件中保持的就是nginx服务主进程的PID。(此文件的存放路径和文件名都是可配置的)

第二种:使用linux平台下查看进程的工具ps,使用方法是:

ps -ef | grep nginx

2.nginx服务可接收的信号

向nginx服务主进程发送信号有2种方式,一种是使用nginx二进制文件,另一种是使用kill命令发送信号,用法是 kill SIGNAL PID

 也可以使用nginx.pid动态获取PID号:

kill  SIGNAL  `filepath`

其中,filepath为nginx.pid的路径。

3.nginx服务的启动

在linux平台下,启动nginx服务器直接运行安装目录下sbin目录中的二进制文件即可。

可以使用ps -ef | grep nginx查看nginx服务的进程状态。

在nginx的帮助信息中,可以看到nginx可以使用一些参数。

-h  或者  -? 用来打印二进制文件nginx的用法,也就是当前显示的内容;

-v  显示nginx服务器的版本号;

-V  显示nginx服务器版本号和nginx服务器编译情况;

-t  检查nginx服务器配置文件是否有语法错误,可以与-c联用,使输出内容更详细;-q与-t联用,配置文件无错误时,不输出;

-s signal 用来向nginx服务的主进程发送信号;

-p prefix用来改变nginx的安装路径,常用在平滑升级nginx服务器的场合;

-c filename 指定启动nginx服务使用的配置文件;

-g directives 用来补充nginx配置文件,向nginx服务指定启动时应用于全局的配置。

 

4.nginx服务的停止

停止nginx服务的操作比较多,可以发送信号:

./sbin/Nginx -g TERM | INT | QUIT

其中,TERM和INT信号用于快速停止,QUIT用于平缓停止。

或者:

kill TERM | INT | QUIT `/Nginx/logs/nginx.pid`

当然也可以使用kill命令向进程发送-9或者SIGKILL信号强制关闭nginx服务,但不建议这样做。

kill -9 | SIGKILL `/Nginx/logs/nginx.pid`

 

5.nginx服务的平滑重启:

./sbin/nginx -g HUP -C  [ newConfFile ]

HUP信号用于发送平滑重启信号。 newConfFile用于指定新配置文件的路径。

或者使用了新的配置文件代替旧的配置文件后,使用:

kill HUP `/Nginx/logs/nginx.pid`

也可以实现平滑重启。

 

6.nginx服务的平滑升级

将旧服务器的安装路径改为新服务器的安装路径,备份旧服务器,安装新服务器即可。

做好准备工作以后,使用以下命令实现Nginx服务的平滑升级:

./sbin/Nginx -g USR2
其中,USR2信号用于发送平滑升级信号。或者,使用:

 kill USR2 `/Nginx/logs/nginx.pid`
通过ps -ef | grep nginx查看新的Nginx服务启动正常,再使用:

 ./sbin/Nginx -g WINCH
其中,WINCH信号用于发送平滑停止旧服务信号。或者,使用:

 kill WINCH `/Nginx/logs/nginx.pid`
这样就在不停止提供Web服务的前提下完成了Nginx服务器的平滑升级。

 

7.nginx服务器基础配置指令

第一:nginx.conf文件的结构

nginx.conf一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

如果某个指令在两个不同层级的块中同时出现,则采用“就近原则”,即以较低层级块中的配置为准。

全局块是默认配置文件从开始到events块之间的一部分内容,主要设置一些影响Nginx服务器整体运行的配置指令,因此,这些指令的作用域是Nginx服务器全局。通常包括配置运行Nginx服务器的用户(组)、允许生成的worker process数、Nginx进程PID存放路径、日志的存放路径和类型以及配置文件引入等。

events块涉及的指令主要影响Nginx服务器与用户的网络连接。常用到的设置包括是否开启对多worker process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型处理连接请求,每个worker process可以同时支持的最大连接数等。

http块是Nginx服务器配置中的重要部分,代理、缓存和日志定义等绝大多数的功能和第三方模块的配置都可以放在这个模块中。可以在http全局块中配置的指令包括文件引入、MIME-Type定义、日志自定义、是否使用sendfile传输文件、连接超时时间、单连接请求数上限等。http块可以包含自己的全局块,也可以包含多个server块,server块中可以包含location块。

在server全局块中,最常见的两个配置项是本虚拟主机的监听配置和本虚拟主机的名称或IP配置。

location块:地址定向、数据缓存和应答控制等功能都是在这部分实现。许多第三方模块的配置也是在location块中提供功能。

第二:配置运行nginx服务器用户(组)

user user [group];
■ user,指定可以运行Nginx服务器的用户。
■ group,可选项,指定可以运行Nginx服务器的用户组。
只有被设置的用户或者用户组成员才有权限启动Nginx进程,如果是其他用户尝试启用Nginx进程,将会报错:

如果希望所有用户都可以启动Nginx进程,有两种办法:一是将此指令行注释掉:

#user [user] [group];
或者将用户(和用户组)设置为nobody:

user nobody nobody;
这也是user指令的默认配置。user指令只能在全局块中配置。
注意:在Nginx配置文件中,每一条指令配置都必须以分号结束

第三:配置允许生成的worker process数

worker process是Nginx服务器实现并发处理服务的关键所在。

配置允许生成的worker process数的指令是worker_processes,其语法格式为:

worker_processes number | auto;
■ number,指定Nginx进程最多可以产生的worker process数。
■ auto,设置此值,Nginx进程将自动检测。
在默认的配置文件中,number=1。启动Nginx服务器以后,使用以下命令可以看到Nginx服务器除了主进程master process ../sbin/nginx之外,还生成了一个worker process:

此指令只能在全局块中设置。

第四、配置nginx进程PID存放路径

Nginx支持对它的存放路径进行自定义配置,指令是pid,其语法格式为:

pid file ;
其中,file指定存放路径和文件名称。

在指定[path]的时候,一定要包括文件名,如果只设置了路径,没有设置文件名,则会报以下错误:

nginx: [emerg] open() "/Nginx/logs/" failed (21: Is a directory)
此指令只能在全局块中进行配置。

第五、配置错误日志的存放路径

在全局块、http块和server块中都可以对Nginx服务器的日志进行相关配置。配置基本相同,只是作用域不同。使用的指令是error_log,其语法结构是:

error_log file| stderr [debug | info | notice | warn | error | crit | alert | emerg];

指定的文件对于运行Nginx进程的用户具有写权限,否则在启动Nginx进程的时候会出现以下报错信息:

nginx: [alert]: could not open error log file: open() "/Nginx/logs/error.log" failed
(13: Permission denied)

第六、配置文件的引入

include file;

第七、设置网络连接的序列化

惊群:当某一时刻只有一个网络连接到来时,多个睡眠进程会被同时叫醒,但只有一个进程可获得连接。如果每次唤醒的进程数目太多,会影响一部分系统性能。在Nginx服务器的多进程下,就有可能出现这样的问题

为了解决这样的问题,Nginx配置中包含了这样一条指令accept_mutex,当其设置为开启的时候,将会对多个Nginx进程接收连接进行序列化,防止多个进程对连接的争抢。其语法结构为:

accept_mutex on | off;
此指令默认为开启(on)状态,其只能在events块中进行配置。

第八、设置是否允许同时接收多个网络连接

multi_accept on | off;

此指令只能在events块中进行配置。

第九、事件驱动模型选择

use method;

其中,method可选择的内容有:select、poll、kqueue、epoll、rtsig、/dev/poll以及eventport,此指令只能在events块中进行配置。

第十、配置最大连接数

worker_connections number;

默认设置为512

十一、定义MIME-TYPE

用于识别前端请求的资源类型

十二、自定义服务器日志

记录nginx服务器提供服务过程应答前端请求的日志:

access_log path  [format [butter=size]];

此指令可以在http块、server块或location块中设置。

十三、配置连接超时时间

keepalive_timeout timeout [header_timeout];

keepalive_timeout 120s 100s;其含义是,在服务器端保持连接的时间设置为120 s,发给用户端的应答报文头部中Keep-Alive域的超时时间设置为100 s。
此指令可以在http块、server块或location块中配置。

十四、单连接请求数上限

keepalive_requests number;
此指令还可以出现在server块和location块中,默认设置为100。

十五、配置网络监听

可以监听ip地址,或者端口号,listen

十六、虚拟主机配置

基于名称的虚拟主机配置:

配置主机名称:server_name name...;

name可以有一个或者多个名称组成,用空格隔开。

name可以用通配符*,单只能用于头或尾。

name可以使用正则表达式,并使用~作为正则表达式字符串的开始标记。

Nginx服务器做出如下规定:
a. 对于匹配方式不同的,按照以下的优先级选择虚拟主机,排在前面的优先处理请求。
① 准确匹配server_name
② 通配符在开始时匹配server_name成功
③ 通配符在结尾时匹配server_name成功
④ 正则表达式匹配server_name成功
b. 在以上四种匹配方式中,如果server_name被处于同一优先级的匹配方式多次匹配成功,则首次匹配成功的虚拟主机处理请求。

基于ip的虚拟主机配置:

 

十七、配置location块

location [ = | ~ | ~* | ^~ ] uri { ... }

■ “=”,用于标准uri前,要求请求字符串与uri严格匹配。如果已经匹配成功,就停止继续向下搜索并立即处理此请求。
■ “~”,用于表示uri包含正则表达式,并且区分大小写。
■ “~*”,用于表示uri包含正则表达式,并且不区分大小写。

 

十八、配置请求的根目录

root path;

通常在location中进行配置

十九、更改location的uri

alias path;

二十、设置网站的默认首页

index file ...;

二十一、设置网站的错误页面

error_page code ... [=[response]] uri

■ code,要处理的HTTP错误代码,常见的在表2.2中已经列出。
■ response,可选项,将code指定的错误代码转化为新的错误代码response。
■ uri,错误页面的路径或者网站地址。如果设置为路径,则是以Nginx服务器安装路径下的html目录为根路径的相对路径;如果设置为网址,则Nginx服务器会直接访问该网址获取错误页面,并返回给用户端。

如果不想将错误页面放到Nginx服务器的安装路径下管理,只需要另外使用一个location指令定向错误页面到新的路径下面了就可以了。

二十二、基于ip配置nginx的访问权限

allow指令,用于设置允许访问Nginx的客户端IP,语法结构为:

allow address | CIDR | all;

另一个指令是deny,作用刚好和allow指令相反,它用于设置禁止访问Nginx的客户端IP,语法结构为:

deny address | CIDR | all;
■ address,禁止访问的客户端的IP,不支持同时设置多个。如果有多个IP需要设置,需要重复使用deny指令。
■ CIDR,禁止访问的客户端的CIDR地址。
■ all,代表禁止所有客户端访问。

Nginx配置在解析的过程中,遇到deny指令或者allow指令是按照顺序对当前客户端的连接进行访问权限检查的。如果遇到匹配的配置时,则停止继续向下搜索相关配置。

 

 

以上是 nginx知识点总结(一) 的全部内容, 来源链接: utcz.com/z/513065.html

回到顶部