Nginx服务器

Nginx 服务器的特点

更快
  • 正常情况下,单次请求会得到更快的响应
  • 在高峰期,nginx可以比其他web服务器响应更快。
高扩展性

Nginx的设计极具扩展性,它完全是由多个不同功能、不同层次、不同类型且耦合度极低的模块组成。因此,当对某一个模块修复Bug或进行升级时,可以专注于模块自身,无须在意其他。而且在HTTP模块中,还设计了HTTP过滤器模块:一个正常HTTP模块在处理完请求后,会有一串HTTP过滤器模块对请求的结果进行再处理。这样,当我们开发一个新的HTTP模块时,不但可以使用诸如HTTP核心模块、events模块、log模块等不同层次或者不同类型的模块,还可以原封不动地复用大量已有的HTTP过滤器模块。这种低耦合度的优秀设计,造就了Nginx庞大的第三方模块,当然,公开的第三方模块也如官方发布的模块一样容易使用。
Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性,因此,许多高流量的网站都倾向于开发符合自己业务特性的定制模块。

高可靠性

nginx可靠性源自于其核心框架代码的优秀设计、模块设计简单;另外官方提供的常用模块非常稳定,每一个work进程相对独立,master进程可以一个work进程出错时可以快速“拉起”新的子进程提供服务。

低内存消耗

一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗2.5MB的内存,这是Nginx支持高并发连接的基础。

单机支持10万以上的并发连接

理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。当然,能够及时地处理更多的并发请求,是与业务特点紧密相关的。

热部署

master管理进程与worker工作进程的分离设计,使得Nginx能够提供热部署功能,即可以在7×24小时不间断服务的前提下,升级Nginx的可执行文件。当然,它也支持不停止服务就更新配置项、更换日志文件等功能。

最自由的BSD许可协议

这是Nginx可以快速发展的强大动力。


Nginx的命令行控制

在Liunx中需要命令行来控制Nginx服务器的启动与停止、重载配置文件、回滚日志文件、平滑升级等。

默认启动方式

直接执行二进制文件

/usr/sbin/nginx
另行指定配置文件的启动方式
/usr/sbin/nginx -c tmpnginx.conf

会读取 -c 后的配置文件来启动nginx

另行指定全局配置项的启动
/usr/sbin/nginx -g "pid varnginx/test.pid;"

-g的约束条件是指定的配置不能与默认的路径下的nginx.conf中的配置产生冲突,即默认配置中不能含有类似的pid logs/nginx.pid的配置,否则无法启动。

检测配置信息是否有错误
/usr/sbin/nginx -t
在配置阶段不输出信息

测试配置选项时,使用-q 参数可以不把error级别以下的信息输出到屏幕上

/usr/sbin/nginx -t -q
快速地停止服务
/usr/sbin/nginx -s stop

或者用ps查询nginx master进程ID
ps -ef | grep nginx 
root 10800 1 	 0 02:27 ? 00:00:00 nginx: master process ./nginx root
root 10801 10800 0 02:27 ? 00:00:00 nginx: worker process

接下来用kill 命令发送信号
kill -s SIGTERM 10800
或
kill -s SIGINT  10800
“优雅”地停止服务

如果希望Nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit参数来停止服务

/usr/sbin/nginx -s quit

运行中的nginx进程之间的关系

在正式提供服务的产品环境下,部署nginx都是使用一个master进程管理来管理多个worker进程,一般情况下,worker与服务器上CPU内核数相等。

Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境下要按照master-worker方式配置同时启动多个进程呢?这样做的好处主要有以下两点:

  • 由于master进程不会对用户请求提供服务,只用于管理真正提供服务的worker进程,所以master进程可以是唯一的,它仅专注于自己的纯管理工作,为管理员提供命令行服务,包括诸如启动服务、停止服务、重载配置文件、平滑升级程序等。master进程需要拥有较大的权限,例如,通常会利用root用户启动master进程。worker进程的权限要小于或等于master进程,这样master进程才可以完全地管理worker进程。当任意一个worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务。
  • 多个worker进程处理互联网请求不但可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在常见的SMP多核架构,从而实现微观上真正的多核并发处理。因此,用一个进程(master进程)来处理互联网请求肯定是不合适的。另外,为什么要把worker进程数量设置得与CPU核心数量一致呢?这正是Nginx与Apache服务器的不同之处。在Apache上每个进程在一个时刻只处理一个请求,因此,如果希望Web服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,通常会达到一台服务器拥有几百个工作进程,这样大量的进程间切换将带来无谓的系统资源消耗。而Nginx则不然,一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当Nginx上的进程数与CPU核心数相等时(最好每一个worker进程都绑定特定的CPU核心),进程间切换的代价是最小的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值