黄宽的blog

宁可十年不将军,不可一日不拱卒



nginx的一些参数

nginx -t//检查nginx配置

nginx -s reload//nginx平滑加载最新配置

nginx -s reopen//nginx重新打开日志

nginx -s stop//立即停止

nginx -s quit//优雅停止

nginx -t命令能够检查nginx.conf里的配置有没有语法错误,有错误的话会提示行数哪一行出了什么错误。

nginx -s reload,这条命令能够平滑的加载最新的nginx配置,如果网站正在运行中,需要修改一些配置,可以用这条命令而不用去重启服务器。这条命令为何能够平滑加载最新的nginx配置呢,要知道apache这一点是做不到的,之前提到过nginx启动后一般会有两个或多个进程,有一个是master管理进程,一个是worker工作进程,当用户请求资源时,master将用户的请求分配到某一个worker上,此时如果使用nginx -s reload命令的话,master将会将闲置的worker杀掉,未闲置的worker等待当前用户的请求结束返回资源,返回资源后把这个worker也杀掉,此时所有worker已没有,当用户再次请求时,master将会启动一个拥有最新配置的worker为用户的请求进行服务。

nginx -s reopen,重新打开日志,若不是自己下载编译的nginx而是使用依赖包管理下载的(例如centos的yum,ubuntu的apt-get)话,nginx的日志和其他的日志都放在/var/log下。为什么要重新打开日志,这里涉及到日志管理(日志很重要),比如说我要每天定时做一个nginx的日志备份打包,大部分业务逻辑跟我之前写的那个数据库定时备份差不多,但有一点,如果不在shell里加上这么一条命令的话,恐怕难以做到真正的分批备份。可以测试一下,手动将日志move走或者改个名字,然后再创建一个access.log,然后再次访问nginx,ll一下logs目录,会发现access.log的大小还是0,而活动记录跑到之前move走的文件里面去了,这是为什么呢。其实acess.log只是一个指针,这个指针指向一块空间,当nginx启动的时候,程序会顺着这个指针找到这一块空间并打开一条写入的通道(资源已经形成),当有需要写入数据时,会直接写入这块空间,完毕后这条通道并不会关闭,还会等待下一次访问,所以如果仅仅只是将acess.log的名字改掉或者move走是没用的,需要重启,让程序再次回到找指针这一步,再有指针指向区域。

立即停止和优雅停止跟上面的reload有异曲同工之妙。可以做个php然后sleep一下,再echo。再使用这两条命令观察区别。

nginx.conf有几个参数比较重要,worker_processe,nginx进程个数,我这里是设置的是auto,一般是设置是为cpu数*核数,问了一些人,auto是怎们个auto法,普遍会说设置auto会检测cpu参数,cpu大于4还不是8的时候就是一个cpu一个继承,worker_connections,单个进程的最大连接数,这个不是说越大越好,而是需要根据访问量和进程数来算,平均一个进程多少个链接,再多抛一点。

 


作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接