Nginx服务器及其配置

来源:互联网 发布:游戏王哪些卡好看知乎 编辑:程序博客网 时间:2024/04/26 12:16

  Nginx(engine x)是一个高性能HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。

一、nginx工作原理

  Nginx由内核和模块两部分构成,内核的工作非常简单,就是通过配置文件将请求映射到一个location block,在location中配置的指令会启动不同的模块去完成相应的工作。模块包括HTTP等核心模块、基础模块和第三方模块。用户可以根据自己的需求开发模块,直接编译进nginx。启动nginx后,模块被自动加载。在解析配置文件时,每个模块都有可能去处理请求,但是同一请求只能由一个模块来完成。

  Nginx使用一个多进程模型来提供服务。启动时,系统会自动创建一个master进程和多个worker进程,数量与nginx的配置有关,一般会设置与及其CPU核数一致。Master进程主要用来管理worker进程,以及负责nginx的配置解析、模块注册、信号管理等。Worker进程负责接收和处理客户端请求。

  Nginx采用异步非阻塞的方式来处理请求,可以同时处理成千上万个请求。这种机制可以同时监控多个请求,worker进程在处理时会有I/O调用,如果不能立即得到响应,进程会转去处理其他客户端请求,I/O调用有结果时会利用事件驱动模型通知worker进程,进程得到通知会暂停工作,来处理I/O调用的结果。

二、Nginx服务器的优点

  首先,nginx的安装简单,配置文件简洁,测试比较方便,日志系统完善且清晰,方便开发者进行调试。

  作为web服务器,nginx占用的内存少,在实际环境下处理能力高且CPU负载并不高。Nginx比较低的内存消耗也为多并发连接提供了基础。理论上,nginx支持的并发连接上限取决于机器的内存,实际测试可以支持高达30000以上的并发连接数。

  Nginx还支持热部署。由于master进程与worker进程的分离设计,可以在7×24小时不间断服务的前提下,进行nginx可执行文件的升级;也可以不停止服务时进行配置文件的修改等功能。

  Nginx还作为负载均衡服务器和邮件代理服务器,在性能和CPU的使用效率方面较其他服务器都有优势。且使用nginx成本较低,做反向代理时可以实现负载均衡,这样节省硬件的负载均衡交换机的运营和维护成本。

三、nginx_rtmp模块

  RTMP(Real Time Messaging Protocol)是一个实时消息传送协议,利用这一协议的第三方模块nginx_rtmp_module可以用来实现音视频的直播和点播。模块的输入可以是文件或者HTTP流,支持push和pull两种流的分发模式。利用FFMPEG的相关功能可以在线转码,并且支持HLS和MPEG-DASH的传输。

四、服务器的配置

  首先要进行服务器的安装,包括其所依赖的第三方库,并添加所需的各类模块。安装编译完成后,用户可以通过对配置文件的修改来控制服务器的工作。

  Nginx配置文件主要有四个部分,全局设置(main)、主机设置(server)、上游服务器设置(upstream)和URL匹配位置的设置(location),而且每个部分都有若干指令。

  在配置文件的全局设置部分,worker_processes参数设置worker进程的工作进程个数,并对master进程分配给的请求进行处理。这个数值一般简单地设置为CPU的核数,若开启了SSL或者gzip,则应该设置为与逻辑CPU数量一致或者2倍。在目前本系统中,只有一个客户端进行请求操作,可以简单地设置为1。Events部分通过worker_connections参数设置每个worker进程可以并发处理的最大连接数。

  HTTP服务器部分配置服务器是否开启高效文件传输模式以及长连接的超时时间等。其中,include指令设置MIME(Multipurpose Internet Mail Extension)多用户的网际邮件扩充协议的类型,通过mime.types文件指定;client_max_body_size参数规定允许客户端请求的最大单文件字节数;通过sendfile指令来指定是否要调用此函数来输出文件,减少用户空间到内核空间的上下文传输;通过keepalive_timeout参数来指定超时时间,如果设置时间过长且用户较多的情况下,长时间连接会占用大量的资源。在这部分中,http_gzip模块用来开启gzip压缩输出,用来减轻服务器的带宽问题,编译时要为nginx添加这一模块。除了gzip模块,http_proxy模块实现nginx作为反向代理服务器的功能,在此论文中不进行讨论。

  Nginx的日志包括access log和error log两种。Error log记录服务器的错误日志,而access log记录了哪些用户在何时对服务器进行了访问,请求何种内容等信息。在延时分析中可能会用到这些日志信息,所以需要在http部分利用log_format指令设置日志条目,如下:

这里写图片描述

  HTTP服务中支持若干个虚拟主机,每个主机对应一个server配置内容。其中,listen参数设置server的监听端口,默认是80;server_name指定服务器名,可以是localhost或者IP地址的格式等;access_log指令指定服务器产生的日志存储地址。

  Location部分采用通用规则进行配置,“/”表明任何请求都会匹配到。其中root定义服务器的默认网站根目录的位置,即本工程中产生的DASH切片的存储位置;index设置首页索引文件的名称。同时,error_page定义错误提示页面,方便对服务器是否正常配置进行检测。

原创粉丝点击