刚才完了nginx的编译,nginx的编译还是挺简单的。控制nginx:重启、关闭。只有孤零零的一个二进制文件nginx

通过信号来控制它,Linux操作系统进程与进程之间通过信号来通信。荷兰的一位计算机科学家通过火车轨道的红绿灯产生灵感提出了信号这个概念。

nginx的官方command line的地址已被改为:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/


Nginx信号量

nginx确实在运行,不过是子进程(worker process)在运行,主进程(master process)并没有在运行,看来上节启动nginx主进程(master process)还存在着问题。

注意主进程的文件不直接响应浏览器的请求,主进程是用来管理子进程的。子进程响应浏览器的请求,主进程负责影响子进程,或者是紧急地杀死子进程。所以子进程叫worker,才是真正的工作者。

主进程和子进程的关系

杀死子进程不能用很暴力的pkill -9,你要是在工作中特别是访问量很大的网站不能这么暴力来的。很多人正在下单子,但是你这个进程啪一下给人家关了,怎么办,钱也扣了。单子还没有写到服务器上。所以引入信号量

使用kill -INT杀死nginx子进程worker process,worker process的进程号是8889.然后重新执行./sbin/nginx启动nginx就成功了,上节的问题(nginx子进程占用了80端口)解决了。查看之后发现nginx主进程和子进程都启动了。


再杀死主进程12077,再查看发现nginx被关闭了


TERM或者是INT紧急地杀掉nginx进程,轻易不要这样用。QUIT优雅地关闭进程。如果说有人在下载但是没有下载完,你要是一下子给人关了,下载到一半或者是付钱付到一半怎么办。优雅是指某个worker正在工作先不杀你,某个worker空闲着就把先把你杀掉。等这个worker工作完了就杀掉,不要再接收新的请求了,最后这个主进程也消亡了。

要是晚上机器要停个五分钟休息一下,建议就使用优雅的关闭QUIT


HUP 如果使用了HUP这个信号量,将会开启新的worker 进程,工作子进程,新的工作进程会读新的配置文件,然后会优雅地关掉旧的子进程。旧进程间接地几秒钟之后就消失了,新进程全部得到的是新配置文件。HUP将会有一个很好的功能是,nginx下有一个很强大的功能,方便的功能,改完配置文件之后不需要重启主进程(apache就得要重启一下它的主进程)。在nginx下直接HUP一下,你新读取的配置就生效了。新写的配置就生效了。

测试一下

修改nginx的配置文件nginx.conf,增加一个索引文件ab.html.并且在ab.html上写些内容。

在ab.html上加些内容

你没有重启,也没有通过信号软重启。


下面使用信号量HUP软重启。

访问nginx的时候索引文件就变成了ab.html而不是index.html

修改配置文件nginx.conf影响的是索引文件究竟是html文件夹下的哪一个html文件先出来,是ab.html还是index.html。


再试一次

修改配置文件

script的小技巧:把链接赋给它自身。

修改index.html,增加一段script

修改ab.html,把那段script也改成页面不断地到一个根目录,要把自己刷新到根目录。

刷新到根目录当前访问的不正是ab.html吗?修改了配置文件把它改成index.html但是一直没生效是因为没有重启。

修改了配置文件之后为什么不立即生效?你怎么过了好几秒钟才生效,为什么不立即生效啊?这就是我们所说的优雅。因为这个页面用JS自己刷新自己,刷新的速度是非常快的,导致它那个进程压根就没有结束,没有结束那它就得在那里运行着了。


再一次把nginx.conf改到ab.html,让它优雅地重启。这次重启达到的效果:重读最新的配置文件。所以并不会立即生效,因为我们的JS正在狂刷新,导致它这个nginx的进程压根就没有结束。

中间一直没断过线,已经变过来了。


HUP:你改了配置文件之后,重读配置文件,它就发挥作用了。


USER1。如果你是运维的话,你会经常碰到它。比如:新建了一个日志文件,旧的日志文件要打包存起来。在Linux中,一个文件对应一个节点叫做inode。inode才是在硬盘上/磁盘上那个文件真正的位置,至于那文件名只是表象罢了,就像猪八戒看到白骨精变的那个美女一样。你真正指向的是磁盘上的哪一块文件那就源源不断的对它写啊写,写日志。日志备份很容易,给它改一下名字就完了。这样不行,因为你在对日志文件给名字,但是这个文件一直被nginx进程打开,就算你改了名,它还是打开的那个文件描述符,还是指向这块磁盘空间,还是指向这块的磁盘文件。就算你改名字了,它还是往这块磁盘写。就算你把它删了,它还是往这个inode上写。所以应该这样做:

把旧的日志文件a重新改成a.bak保存这没错,同时还得再重新建立一个a文件,同时还得好声好气告诉nginx这里有一个新的日志文件a让它去读这一块,来读最新的日志文件。

所以在日志切割的时候

每秒的访问速度很快,访问nginx的速度很快,访问次数在不断的增加。


你更改你的,我给日志文件改个名字,比如说用日期来做备份。很奇怪,日志文件的名字已经被改了,但是它的文件大小还在不断地增大。

它的文件大小还在不断地增大。这是Linux文件系统的特殊之处。因为它真正指向磁盘上的那个东西是叫节点,至于名字是无所谓,你改了名字又如何呢?节点还是那个节点,这个进程还是冲着那个节点写,导致你改了名字还是往那个节点写。

新增一个日志文件:access.log之后

access.log的大小根本没有发生变化。真正指向磁盘的文件是用了inode节点,而不是说光靠一个文件名。现在你是把文件名改了,但是linux系统根本不买账,进程根本不买账。所以我就是刚才打开的进程一直往里面写。


要想备份日志文件,就得使用信号量USR1。

旧的配置文件access.log.0305已经不变了,写新的配置文件access.log上去了。开发还用的少一些,如果是运维,老板说这个日志每天晚上你得备份起来,并且第二天写新日志上,这个时候就得靠USR1了。


USR2。平滑地升级。比如说nginx用的是1.4,过几天用1.6了,1.6重新编译的话,把日志文件又复制到/usr/local/nginx下面去了。一复制呢,就得重新启动这个新进程。新进程一启动,旧进程怎么办,使用信号量USR2。这个新进程将会控制旧进程里面的东西,如果有访问旧进程的,这一次你访问完毕了你就结束吧,你旧的别想再有机会启动了,后来都是这个1.6的新版本在重新启动,响应新的请求。所以USR2和WINCH配合起来用于升级的时候用。


不用查进程号也可以kill的方法。其实说到底还是离不开进程号,只是变通一下罢了。

Linux内核是根据进程号管理的。不想老是查看进程号,可以查看它的pid文件,它的pid文件只是把进程号记录下来了。也可以把进程文件的进程号作为参数赋给kill


虚拟目录的配置:基于ip的虚拟主机,基于端口的虚拟主机,基于域名的虚拟主机。

02-nginx信号量的更多相关文章

  1. 02·nginx进阶·服务优化配置管理

    企业场景常用的Nginx http功能模块汇总 ngx_ http_ core_ module 包括-些核心的http 参数配置,对应Nginx的配置为HTTP区块部分 ngx_ http _acce ...

  2. Nginx教程--02.Nginx虚拟主机的配置

    1.Nginx虚拟主机的配置 1.1 在conf目录下,使用命令 : vim nginx.conf 对上图解释: //全局区 worker _processes 1; //表示当前有1个工作的子进程, ...

  3. 02 - nginx - 反向代理、限速

    一.Nginx反向代理 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器. 代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中, ...

  4. nginx信号量

    nginx信号说明相关说明 信号名称 作用 TERM,INT 快速关闭 QUIT 从容关闭 HUP 重新加载配置,用新的配置开始新的工作进程,从容关闭旧的工作进程 USR1 重新打开日志文件 USR2 ...

  5. 02 . Nginx平滑升级和虚拟主机

    Nginx虚拟主机 在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理 配置nginx虚拟主机有三种方法 ...

  6. nginx反向代理+负载均衡+url重写+ssl认证

      Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄 ...

  7. 从刚刚「简书」平台的短暂异常,谈Nginx An error occurred报错~

    09.26简书平台的短暂异常 An error occurred. Sorry, the page you are looking for is currently unavailable. Plea ...

  8. 使用Nginx和Logstash以及kafka来实现网站日志采集的详细步骤和过程

    使用Nginx和Logstash以及kafka来实现网站日志采集的详细步骤和过程 先列出来总体启动流程: (1)启动zookeeper集群(hadoop01.hadoop02和hadoop03这3台机 ...

  9. nginx 基础文档

    Nginx基础 1.  nginx安装 2.  nginx 编译参数详解 3.  nginx安装配置+清缓存模块安装 4.  nginx+PHP 5.5 5.  nginx配置虚拟主机 6.  ngi ...

  10. [nginx] 网上最全面nginx教程(近100篇文章整理)

    转载:http://bbs.linuxtone.org/thread-25588-1-1.html Nginx基础 1.  nginx安装 2.  nginx 编译参数详解 3.  nginx安装配置 ...

随机推荐

  1. SVG 总结

    //文件名:11.svg<?xml version="1.0" encoding="UTF-8" ?> <!--XML NameSpace:名 ...

  2. 人生苦短之我用Python篇(基础)

    Python简介 Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, ...

  3. eclipse javaw.exe in your current path问题

    问题: 第一次运行eclipse的时候,可能会提醒找不到javaw.exe ******等的问题 很坑的! 解决方案: 无法启动Eclipe,因找不到javaw.exe 还是环境变量的问题!!! 注意 ...

  4. Java进阶知识点4:不可变对象与并发 - 从String说起

    一.String的不可变特性 熟悉Java的朋友都知道,Java中的String有一个很特别的特性,就是你会发现无论你调用String的什么方法,均无法修改this对象的状态.当确实需要修改Strin ...

  5. HihoCoder 1104 : Suzhou Adventure(树形DP)

    Suzhou Adventure 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is taking an adventure in Suzhou n ...

  6. test20181219 奇怪的函数

    题意 奇怪的函数 [问题描述] 使得x^x达到或超过n位数字的最小正整数x是多少? [文件输入] 输入一个正整数n(n<=2*10^9). [文件输出] 输出使得x^x达到n位数字的最小正整数x ...

  7. browser-sync 服务器使用

    1. 安装 npm install browser-sync or yarn add browser-sync 2. 使用(集成gulp) 备注: gulp 安装使用此处不介绍 默认的端口是3000, ...

  8. js中使用分号的情况

  9. [转]javascript中基本类型和引用类型的区别分析

    基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确 ...

  10. php://input解决APP发送图片问题

    今天公司要求用APP发送一个图片到PHP程序接收并保存起来,而且中间还需要很多参数! 以前没有做过APP和PHP交互,这次算是一个挑战吧(对一个没有人指导实习生来说) 1.APP发1.jpg,而且带有 ...