Nginx高性能web服务器详细讲解

简述

本文主要详细介绍Nginx高性能web服务器。

Nginx概述

Nginx服务器是一款免费开源的高性能、轻量级HTTP服务器及反向代理服务器产品,能够提供IMAP/POP3代理服务等功能。是lgor Sysoev为俄罗斯访问量居首的Rambler.ru站点(www.rambler.ru)设计开发的。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。能够快速响应静态页面的请求,支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等大量使用功能,并且支持很多第三方的模块扩展

基本功能服务

Nginx提供的基本功能服务大体分为基本HTTP服务、高级HTTP服务和邮件服务。

基本HTTP服务

Nginx提供基本HTTP服务,可作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤、SSL等功能。详情如下所示:

处理静态文件(如HTML静态网页及请求)、索引文件和自动索引。打开并运行管理文件服务描述符缓存。提供反向代理服务,并且可以使用缓存加速反向代理,同时完成简单负载均衡以及容错。提供远程FastCGI服务的缓存机制,加速访问,同时完成简单负载均衡以及容错。使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI以及图像缩放等。支持SSL协议。高级HTTP服务

Nginx提供高级HTTP服务,可以进行自定义配置,支持虚拟主机、URL重定向、网络监控和流媒体传输。

支持基于名字和IP的虚拟主机设置。支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接。支持重新加载配置以及在线升级时,无需中断正在处理的请求。自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。提供错误代码重定向。支持重写模块扩展。支持HTTP DAV模块,为Http WebDAV提供PUT、DELETE、MKCOL、COPY、MOVE方法。支持FLV流和MP4流传输。支持网络监控,包括基于客户端IP地址和HTTP基本认证机制的访问控制、速度限制、来自同一地址的同时连接数或请求数限制等。支持嵌入Perl语言。邮件服务

Nginx作为邮件代理服务器,支持IMAP/POP3代理服务功能,支持内部SMTP服务功能。

支持使用外部HTTP认证服务器重定向用户到IMAP/POP3后端,并支持IMAP认证方式(LOGIN、AUTH LOGIN/PLAIN/CRAM-MD5)和POP3认证方式(USER/PASS、APOP、AUTH LOGIN/PLAIN/CRAM-MD5)。支持使用外部HTTP认证服务器认证用户后重定向连接到内部SMTP后端,并支持SMTP认证方式并支持SMTP认证方式(AUTH LOGIN/PLAIN/CRAM-MD5)。支持邮件代理服务下的SSL。支持纯文本通信协议的扩展协议TLS。常用功能

Nginx常用功能主要包括HTTP代理和反向代理、负载均衡和web缓存。

HTTP代理和反向代理HTTP代理和反向代理服务是Nginx服务器作为Web服务器的主要功能功能之一,尤其是反向代理服务,是应用十分广泛的功能。

Nginx作为反向代理服务,转发前端请求性能稳定、后端转发与业务配置相互分离,配置十分灵活。配置后端转发请求完全不用关心网络环境如何,可以指定任意的IP地址和端口号或其他类型的链接、请求等。

Nginx可以根据不同的判断表达式,采取不同的转发策略。Nginx对后端返回情况进行了异常判断,如果返回结果不正常,则重新请求另一台主机,并自动剔除返回异常的主机。以及支持错误页面转发功能。

负载均衡Nginx负载均衡主要对大量前端访问和流量进行分流,以保证前端用户访问效率。

负载均衡主要指两个方面,一方面是指将单一重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅度提高网络系统的处理能力。另一个方面是指将大量前端并发访问或数据流量分担到多个后端网络节点上分别处理,以有效减少前端用户等待响应时间。

Nginx服务器负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略主要包含轮询、加权轮询和IP Hash三种。扩展策略主要通过第三方模块实现,种类比较丰富,常见的有url hash、fair等。默认情况下内置策略会被编译进Nginx内核,扩展策略不会被编译到Nginx内核。

轮询策略:内置策略,将每个前端请求按顺序(时间顺序或者排列顺序)逐一分配到不同的后端节点上,对于出现问题的后端接口自动排除。

加权轮询策略:内置策略,在基本的轮询策略上考虑各后端节点接收请求的权重,指定各后端节点被轮询到几率。跟据配置的权重的大小而分发给不同服务器不同数量的请求,使得整个网络对前端请求达到最佳的响应能力。

Ip Hash策略:内置策略,将前端的访问IP进行hash操作,然后根据hash结果将请求分配给不同的后端节点。通过Nginx的实现,每个前端访问IP会固定访问一个后端节点,可避免session共享的问题。

url hash:扩展策略,urlhash在形式上和IPhash相近,不同之处在于,IPhash策略是对前端访问IP进行了hash操作,而urlhash策略是对前端请求的url进行hash操作。urlhash策略优点在于,如果后端有缓存服务器,它能够提高缓存效率,同时解决了session的问题;但其缺点是,如果后端节点出现异常,它不能自动排除该节点。

fair:扩展策略,fair将前端请求转发到一个最近负载最小的后台节点。Nginx通过后端节点对请求的响应时间来判断负载情况。响应时间短的节点负载相对就轻,得出判断结果后,Nginx就将前端请求转到选中的负载最轻的节点。

web缓存

Nginx被用于缓存前端请求,可以缓存万维网、域名系统和其他网络所搜等,从而提高Web服务器性能。

Nginx服务器的Web缓存服务主要由Proxy_Cache相关指令集和FastCGI_Cache相关指令集构成。Proxy_Cache主要用于在Nginx服务器提供反向代理服务时,对后端源服务器的返回内容进行URL缓存;FastCGI_Cache主要用于对FastCGI_Cache的动态程序进行缓存;第三发模块ngx_cache_purge用于清除Nginx服务器上指定的URL缓存。

nginx.conf文件结构

nginx.conf一共有三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块,多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。同一指令放在不通层级块中,其作用域也不同,高一级块中的指令可以作用于自身所在的块和次块包含的所有低层级块。

全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

events {

accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为on

multi_accept on;#设置一个进程是否同时接受多个网络连接,默认为off

worker_connections1024;#最大连接数,默认为512

}

http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

server块:配置虚拟主机的相关参数,一个http中可以有多个server。

location块:配置请求的路由,以及各种页面的处理情况。

http {

upstream backend{

server backend1.example.com:80;

server backend2.example.com:80 backup;#热备

}

server {

listen 80; #监听端口

server_namelocalhost nginx_ip; #监听地址

#请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。

location~*^.+$ {

#请求转向backend定义的服务器列表

proxy_pass;

deny 127.0.0.1;#拒绝的ip

allow backend.example.com; #允许的ip

}

}

}

常见配置项

$remote_addr 与 $http_x_forwarded_for 用以记录客户端的ip地址;$remote_user :用来记录客户端用户名称;$time_local : 用来记录访问时间与时区;$request : 用来记录请求的url与http协议;$status : 用来记录请求状态;成功是200;$body_bytes_s ent :记录发送给客户端文件主体内容大小;$http_referer :用来记录从那个页面链接访问过来的;$http_user_agent :记录客户端浏览器的相关信息;Nginx命令

Nginx启动命令:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

Nginx重启命令:

/usr/local/nginx/sbin/nginx -s reload

Nginx停止命令:

/usr/local/nginx/sbin/nginx -s stop

Nginx日志查看

错误日志:

[root@192 ~]# cd /usr/local/nginx/logs/

[root@192 logs]# tail -f error.log

访问日志:

[root@192 ~]# cd /usr/local/nginx/logs/

[root@192 logs]# tail -f access.log

ok,以上就是Nginx高性能web服务器详细讲解,看完记得转发、点赞和收藏。如果有错误,欢迎批评指正,感谢。

(云渺书斋)

举报/反馈