nginx的特点及命令行管理

为什么现代服务器选择Nginx?因为它具有以下特点:

(1)更快

表现在两个方面: 一方面,在正常情况下,单次请求会得到更快的响应;另一方面, 在高峰期(如有数以万计的并发请求),Nginx可以比其他Web服务器更快地响应请求。

(2)高扩展性

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

Nginx的模块都是嵌入到二进制文件中执行的,无论官方发布的模块还是第三方模块都是如此。这使得第三方模块一样具备极其优秀的性能,充分利用Nginx的高并发特性,因 此,许多高流量的网站都倾向于开发符合自己业务特性的定制模块。

(3)高可靠性

高可靠性是我们选择Nginx的最基本条件,因为Nginx的可靠性是有目共睹的,很多高流量网站都在核心服务器上大规模使用Nginx。Nginx的高可靠性来自于其核心框架代码的优秀设计、模块设计的简单性;另外,官方提供的常用模块都非常稳定,每个worker进程相对独立,master进程在1个worker进程出错时可以快速“拉起”新的worker子进程提供服务。

(4)低内存消耗

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

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

这是一个非常重要的特性!随着互联网的迅猛发展和互联网用户数量的成倍增长,各大 公司、网站都需要应付海量并发请求,一个能够在峰值期顶住10万以上并发请求的Server, 无疑会得到大家的青睐。理论上,Nginx支持的并发连接上限取决于内存,10万远未封顶。

(6)热部署

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

(7)最自由的BSD许可协议

这是Nginx可以快速发展的强大动力。BSD许可协议不只是允许用户免费使用Nginx,它还允许用户在自己的项目中直接使用或修改Nginx源码,然后发布。这吸引了无数开发者继 续为Nginx贡献自己的智慧。

以上7个特点当然不是Nginx的全部,拥有无数个官方功能模块、第三方功能模块使得 Nginx能够满足绝大部分应用场景,这些功能模块间可以叠加以实现更加强大、复杂的功 能,有些模块还支持Nginx与Perl、Lua等脚本语言集成工作,大大提高了开发效率。这些特点促使用户在寻找一个Web服务器时更多考虑Nginx。当然,选择Nginx的核心理由还是它能在支持高并发请求的同时保持高效的服务。

如果Web服务器的业务访问量巨大,就需要保证在数以百万计的请求同时访问服务时, 用户可以获得良好的体验,不会出现并发访问量达到一个数字后,新的用户无法获取服务, 或者虽然成功地建立起了TCP连接,但大部分请求却得不到响应的情况。

 

Linux内核参数的优化

由于默认的Linux内核参数考虑的是最通用的场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,使得Nginx可以拥有更高的性能。

在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当 Nginx作为静态Web内容服务器、反向代理服务器或是提供图片缩略图功能(实时压缩图片) 的服务器时,其内核参数的调整都是不同的。以下只针对最通用的、使Nginx支持更多并发 请求的TCP网络参数做简单说明。

首先,需要修改/etc/sysctl.conf来更改内核参数。例如,最常用的配置:

vim /etc/sysctl.conf
fs.file-max = 999999 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_fin_timeout = 30 
net.ipv4.tcp_max_tw_buckets = 5000 
net.ipv4.ip_local_port_range = 1024 61000
net.ipv4.tcp_rmem = 4096 32768 262142 
net.ipv4.tcp_wmem = 4096 32768 262142 
net.core.netdev_max_backlog = 8096 
net.core.rmem_default = 262144 
net.core.wmem_default = 262144 
net.core.rmem_max = 2097152 
net.core.wmem_max = 2097152 
net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_syn.backlog=1024

·file-max:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这 个参数直接限制最大并发连接数,需根据实际情况配置。
·tcp_tw_reuse:这个参数设置为1,表示允许将TIME-WAIT状态的socket重新用于新的 TCP连接,这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接。
·tcp_keepalive_time:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。 默认是2小时,若将其设置得小一些,可以更快地清理无效的连接。
·tcp_fin_timeout:这个参数表示当服务器主动关闭连接时,socket保持在FIN-WAIT-2状 态的最大时间。
·tcp_max_tw_buckets:这个参数表示操作系统允许TIME_WAIT套接字数量的最大值, 如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为 180000,过多的TIME_WAIT套接字会使Web服务器变慢。
·tcp_max_syn_backlog:这个参数表示TCP三次握手建立阶段接收SYN请求队列的最大 长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时, Linux不至于丢失客户端发起的连接请求。
·ip_local_port_range:这个参数定义了在UDP和TCP连接中本地(不包括连接的远端) 端口的取值范围。
·net.ipv4.tcp_rmem:这个参数定义了TCP接收缓存(用于TCP接收滑动窗口)的最小 值、默认值、最大值。
·net.ipv4.tcp_wmem:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小 值、默认值、最大值。
·netdev_max_backlog:当网卡接收数据包的速度大于内核处理的速度时,会有一个队列 保存这些数据包。这个参数表示该队列的最大值。
·rmem_default:这个参数表示内核套接字接收缓存区默认的大小。 ·wmem_default:这个参数表示内核套接字发送缓存区默认的大小。 ·rmem_max:这个参数表示内核套接字接收缓存区的最大大小。 ·wmem_max:这个参数表示内核套接字发送缓存区的最大大小。
·tcp_syncookies:该参数与性能无关,用于解决TCP的SYN攻击。

Nginx的命令行控制

在Linux中,需要使用命令行来控制Nginx服务器的启动与停止、重载配置文件、回滚日 志文件、平滑升级等行为。默认情况下,Nginx被安装在目录usrlocal/nginx/中,其二进制文 件路径为usrlocal/nginc/sbin/nginx,配置文件路径为usrlocal/nginx/conf/nginx.conf。当然,在 configure执行时是可以指定把它们安装在不同目录的。

(1)默认方式启动

直接执行Nginx二进制程序

/usr/local/nginx/sbin/nginx

这时,会读取默认路径下的配置文件:/usr/local/nginx/conf/nginx.conf。

(2)指定配置文件的启动方式

使用-c参数指定配置文件

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

这时,会读取-c参数后指定的nginx.conf配置文件来启动Nginx。

(3)指定安装目录的启动方式

使用-p参数指定Nginx的安装目录

/usr/local/nginx/sbin/nginx -p /usr/local/nginx/

(4)指定全局配置项的启动方式

可以通过-g参数临时指定一些全局配置项,以使新的配置项生效。

/usr/local/nginx/sbin/nginx -g "pid /var/nginx/nginx.pid;"

-g参数的约束条件是指定的配置项不能与默认路径下的nginx.conf中的配置项相冲突,否 则无法启动。

(5)测试配置信息是否有错误

在不启动Nginx的情况下,使用-t参数仅测试配置文件是否有错误

/usr/local/nginx/sbin/nginx -t

(6)在测试配置阶段不输出信息

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

/usr/local/nginx/sbin/nginx -t -q

(7)显示版本信息

使用-v参数显示Nginx的版本信息。

/usr/local/nginx/sbin/nginx -v

(8)显示编译阶段的参数

使用-V参数除了可以显示Nginx的版本信息外,还可以显示配置编译阶段的信息

/usr/local/nginx/sbin/nginx -V

(9)快速地停止服务

使用-s stop可以强制停止Nginx服务。-s参数其实是告诉Nginx程序向正在运行的Nginx服 务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的进程ID,再向运行中的 master进程发送TERM信号来快速地关闭Nginx服务。

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

实际上,如果通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样 的。

(10)"优雅"地停止服务

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

/usr/local/nginx/sbin/nginx -s quit

该命令与快速停止Nginx服务是有区别的。当快速停止服务时,worker进程与master进程 在收到信号后会立刻跳出循环,退出进程。而“优雅”地停止服务时,首先会关闭监听端口, 停止接收新的连接,然后把当前正在处理的连接全部处理完,最后再退出进程。

(11)使运行中的Nginx重读配置项并生效

使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件

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

(12)日志文件回滚

使用-s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其 他目录中进行备份,再重新打开时就会生成新的日志文件。这个功能使得日志文件不至于过 大。

/usr/local/nginx/sbin/nginx -s reopen

(13)平滑升级Nginx

当Nginx服务升级到新的版本时,必须要将旧的二进制文件Nginx替换掉,通常情况下这是需要重启服务的,但Nginx支持不重启服务来完成新版本的平滑升级。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值