nginx高性能web服务详解
1.1nginx简介
Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 邮件代理服务器。由 Igor Sysoev 于2004年首次发布,其设计目标是解决 C10K 问题,即在一台服务器上同时处理一万个并发连接。Nginx 以其高并发处理能力、低资源消耗和模块化设计而闻名,广泛应用于 Web 服务器、反向代理、负载均衡等场景。
随着信息数据的不断增长及用户体验需求增高:技术关心三个方面:
- 服务器自身处理性能(信息数据,云计算与大数据理论等工作)
如何更快处理与响应客户端与web服务器之间的问题
- 服务器的稳定性
如何保证web服务器在大量并发请求中任然进行保持稳定运行(也就是我们所说的服务器、网站等不宕机),产生问题的时候能够进行有效的预防,运行过程中进行减少系统平台资源的压力等问题
- web服务器的定制特性
部署迅速,快速增加删除与配置功能
主流的web服务器
Apache、Microsoft IIS,Sun、Nginx、Tomcat、Lighttpd等
- apache:apache
web服务器在开源的www服务所提供的工具在特性最全并且运行速度最快。缺点是apache设计一进程的基础结构,导致apache处理器环境下降。 - tomact:一般应用在中小型系统和并发访问用户数量少的场合下使用。缺点是tomact处理html页面功能不如apache服务器,不能满足复杂的业务,tomact体积小,安装与部署方便,系统占用率低
- nginx:可以做htpp服务器,反向代理,邮件服务器,快速相应静态页面,支持FastCGI、SSL、Virtual Host、URL
Rewrite、HTTP Basic Auth、Gzip等大量使用功能;并且支持更多的第三方功能模块的扩展。
nginx版本分为:
- 开发版,稳定版,最新版
HTTP代理和反向代理
nginx服务器提供反向代理服务,转发前端请求性能稳定,向后端转发业务支持相互分离,配置灵活
支持正则表达式,后端返回情况做异常判断,结果若不正常,重新请求另外一台主机,自动替换异常主机,并且支持错误页面跳转功能
负载均衡
将单一的重负载分担多个网络节点进行处理,将每一个节点处理结束后的结果汇总返还给用户,提高网络系统处理能力;另外一个,将大量前端请求并发访问或数据流担到多个后端节点分别处理,减少用户等待时间。
nginx负载服务器:
对大量前段访问和流量进行分流,保证前端用户访问效率
nginx负载策略
- 内置策略:轮询,加权轮询,iphash
- 默认会被编译到nginx内核中
- 扩展策略:url hash,fair 模块编译到nginx中
- 不会编译到nginx内核,需要手动将第三方
轮询:
每个前端请求按照时间顺序,或者策略进行分配到不同的后端节点,若后段节点有问题将自动排除。
加强轮询:
因为后端节点请求的权重,指定后端节点轮询的概率,用于后端性能不均的情况。
ip hash策略,将前端访问的IP进行hash操作,将hash结果分配到不同的后端节点,通过nginx实现,每一个前端访问访问ip会固定访问后端节点,避免前端用户的session在后端多个节点上的共享
扩展策略url hash形式上与ip hash类似,不同之处在于ip hash策略是对前端用户ip进行了hash操作;URL hash是若后端有缓存服务器,提高缓存效率,解决session问题;缺点是,解决了后端节点异常,不能自动排除节点.后端节点出现异常,nginx服务器返回503的错误
扩展fair模块:
该模块将前端请求转发到负载最小的后端节点,nginx通过后端节点对请求的相应时间来判断负载情况;相应时间短的节点负载轻;得出结果就,nginx负载请求转发到选中的负载最轻的几点上
web缓存
nginx服务器类似squid缓存功能;
- nginx服务器的web服务器主要由proxy_cache指令(nginx服务器提供反向代理,对后端原服务器返回内容进行URL缓存)
- fastcgi_cache指令(用于fastcgi动态程序进行缓存)构成;
- 第三方ngn_cache_purge模块(用于清除ngijx服务器上指定的URL缓存)
nginx服务器的多核CPU调度,性能比suid更好,因为nginx不仅模块多,使nginx服务器同时作为负载均衡器和web缓存服务器来进行使用!
1.2 获取nginx服务器
nginx下载官网:http://nginx.org/en/download.html
windows版本安装
在官网安装之后,windows版本上运行的服务效率要低于Linux版本上
,在电脑上下面对每一个目录进行简单的介绍
- conf目录存放的是nginx服务器的配置文件(nginx.conf)
- docs目录存放nginx服务器文档资料
- html目录存放静态网页文件,两个文件与nginx服务器的运行相关
- logs目录存放nginx运行服务器日志文件
;
Linux版本编译与安装
- 在安装版本之前:需要安装一款Linux常见的发行版本,Redhat、SUSE、Fedora、CentOS、Ubuntu、FreeBSD、Solaris以及Debian等
- 变异nginx源代码,需要标准的GCC(GNU Complier Collection)编译器
- 需要安装Automake工具,完成自动创建Makefile工作
nginx需要第三方库
yum –y install gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel open openssl-devel
完成了编译和安装Nginx服务器软件的环境准备工作
这里就不再进行续写了,参考小编之前的文章!!!
Nginx服务的启动
将当前工作目录定位到Nginx安装目录下,运行以下命令:
# ./sbin/nginx -h
nginx version: nginx/1.2.4
Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help 显示该帮助信息
-v : show version and exit 打印版本号并退出
-V : show version and configure options then exit打印版本号和配置并退出
-t : test configuration and exit 测试配置正确性并退出
-q : suppress non-error messages during configuration testing 测试
配置时只显示错误
-s signal : send signal to a master process: stop, quit, reopen, reload向主
进程发送信号
-p prefix : set prefix path (default: /Nginx/bin/) 指定Nginx服务器路径前缀
-c filename : set configuration file (default: conf/nginx.conf) 指定Nginx配
置文件路径
-g directives : set global directives out of configuration file 指定Nginx附
加配置文件路径
nginx服务的停止
- 快速停止:立即停止当前Nginx服务正在处理的所有网络请求,马上丢弃连接,停止工作
- 平缓停止:允许Nginx服务将当前正在处理的网络请求处理完成,但不再接收新的请求,之后关闭连接,停止工作
kill -9 进程的pid
nginx 平滑重启
- nginx服务进程接收到信号之后,首先读取新的nginx配置文件
- 如果配置正确,则重新启动nginx服务,然后平缓关闭旧的服务进程
- 如果新的nginx配置出现问题,则将显示错误,任然使用旧的nginx进程进行提供服务
平滑重启命令:
# ./sbin/nginx -g HUP [-c newConfFile]
使用新的配置文件代替了旧的配置文件后,使用:
# kill HUP `/Nginx/logs/nginx.pid`