知识要点:
nginx的启停控制
nginx的配置文件解读
nginx启停控制
安装完成Nginx服务器之后我们需要来学习如何启动,停止,重启Nginx服务。在Linux平台下有着不止一种的控制Nginx启停的方法 下面我们来详细的学习一下。
Nginx的信号控制
在控制nginx中有一类是通过信号控制的,因此我们来先介绍一下Nginx服务器的信号控制.
在nginx服务运行时,会保持一个主进程和多个worker process 工作进程, 我们可以通过给主进程发送信号,就可以控制服务的启停了,那么我们如何去给服务发送信号?发送信号我们必须要知道服务的PID, 那么我们就来获取一下他的进程ID
第一种直接利用ps 查看详情 :
ps -ef | grep nginx
ps aux | grep nginx
二选一
#这些都是linux的基础知识,在这里和初学者分享一下
第二种 我们直接查看文件存储地址查看: 此操作需要先开启pid的存储才可以生效
# 进入logs文件下
cd logs
# 查看所有文件
ll
# Nginx.pid文件只有一串数字,那就是nginx的pid
vi nginx.pid
找到我们的pid之后那么可以开始我们下一步的操作 再开始之前先了解一下可以接受的信号有哪些,各自有什么含义
信号 | 用法 |
---|---|
TERM/INT | 快速停止nginx服务 |
QUIT | 平缓的停止nginx服务 |
HUP | 平滑重启 即使用新的配置文件启动后平缓停止原有进程 |
USR1 | 重新打开日志常用于日志的切割· |
USR2 | 使用新的nginx版本启动服务 之后平缓停止原有的进程,也就是所谓的“平滑升级”, |
WINCH | 平缓停止worker prcess ,用于nginx服务平滑升级 |
向Nginx服务进程发送信号也有两种方式:
- 一种是使用Nginx二进制文件
- 另外一种是使用Kill 命令发送信号
用法如下
kill USR2 12808 #给进程12808发送USR2信号
同样我我们可以使用动态的PID
kill 信号 filepath (filepath指的是我们的Nginx.PID的路径)
kill USR ‘nginx.pid路径’
nginx服务的启动
在linux平台下,启动Nginx服务器直接运行安装目录下的Sbin目录中的二进制文件即可.
具体命令在sbin目录下:
./nginx
这里主要讲下二进制文件的用法这是我们工作中常常用到的一些指令
#h或者?都可以使得我们获取到nginx的帮助文档
./nginx -h|?
nginx服务停止
停止我们的Nginx有两种方式
- 快速的停止 指的是立马丢弃手上的工作停下来 停掉当前nginx正在处理的所有网络请求
- 平缓的停止 指的是完成当前的工作之后再停止nginx
停止nginx的命令比较多,可以发送信号来停止服务。比较常用的方式为:
# 习惯的使用方式为
# 停止nginx运行
./nginx -s stop
# 其中INT | TERM用于快速停止 QUIT用于平滑停止
./nginx -g INT | TERM | QUIT
# 或者((PID未进程编号)
kill INT | TERM | QUIT PID
# 也可以直接使用
kill -9 信号 进程id
kill -9 pid 这种方式不推荐大家在工作中使用会导致部分用户连接的丢失
**Nginx服务的重启 **
当我们Nginx服务加入新的模块后,如果希望当前的Nginx服务应用新的配置或者使用新的模块生效,就需要重启Nginx服务。当然我们可以先关闭Nginx服务然后使用新的Nginx配置文件重启Nginx服务, 这里我们讲的 是平滑的重启Nginx服务
平滑是重启的一个过程,Nginx服务进程收到信号后先读取我们新的配置文件,如果我们新的配置文件正常,那么启动新的Nginx服务,然后平滑的关闭旧的进程服务,如果新的Nginx服务配置文件有问题那么将显示错误然后任然使用旧的Nginx
使用以下命令可以做到Nginx的平滑重启
./nginx -g HUB(信号) [新的配置文件]
或者你使用了新的配置文件代替了旧的配置文件那么你可以使用、
kill HUB PID(或者是pid文件所在的文件)
都可以实现平滑的重启
在工作中常用的重启方式为
./nginx -s reload 平滑重启我们的nginx服务器 生产环境中经常使用
Nginx服务的升级
如果我们需要对当前的Nginx服务进行升级 ,应用新的模块,最简单的方式是停下来,然后开启新的Nginx服务,那么给我们的用户体验是非常差的,会导致用户在一段时间内无法访问我们的服务器为了解决这个问题,Nginx提供了平滑升级的方案
过程如下:
注意:
为了实现nginx服务器的平滑升级,新安装的服务器路径应该和旧的一致。因此建议用新安装的服务器之前先备份一下我们的旧nginx服务器,如果由于种种原因不能保持新旧客户端路径一致则可以做一下操作,将旧的服务器路径更改为新的路径,新的服务器放入旧的路径中
#newinstallpath新文件的路径
./nginx -p newinstallpath
# 备份旧的服务器
# 安装新的服务器
#使新旧服务器实现平滑升级
./nginx -g USR2
# 或者使用
kill USR2 nginx.pid路径
# 查看新服务器的启动情况
ps -ef |grpe nginx
# 发送平滑停止旧的服务器信号
./nginx -g WINCH
执行过程
Nginx服务接受到USR2的信号后,首先将旧的Nginx。pid文件后面添加一个.oldbin
变成了,nginx.pid.oldbin 然后执行新版本的Nginx服务器的二进制文件启动服务,如果启动成功那么我们将会有两个Nginx服务在提供服务
之后需要向旧的发送WINCH信号,使旧的nginx服务平缓的停止并删除
nginx.pid.oldbin文件 在发送WINCH信号前我们可以随时停止新的服务
基础配置文件解读
从目录中我们不难看出所有的配置文件都放在conf目录下主要的配置文件为 Nginx.conf
那么下面我们带领你来去详细的解读一下其中的配置详情
#全局属性模块 全局块 (不同的地方叫法不一样大概意思相同)
#user nobody; #设定可以访问的用户或者组 如果不设置默认所有人可以访问 设置可以设置ip 等标识方式
worker_processes 1; #设定工作组数量 理论上越大越好,但是很多原因限制了性能 一般的跟我们
服务器核心数一样就可以了
#error_log logs/error.log;
#日志文件存储的地方 默认是nginx下的logs 注释为释放的话没有日志生成
#error_log logs/error.log notice;
#error_log logs/error.log info;
#日志的级别设置
#pid logs/nginx.pid;
#进程的pid存放以及生成 如果你不释放开那么就不会在logs下生成nginx.pid文件
#events块
#这里设置的属性一般和网络连接有关的 所以没事别瞎折腾他 网络会出现很多莫名其妙的异常
#常用到的有worker_processes的设置 比如是否序列化 是否允许 同时接受多个网络请求
#选取什么样的时间模型等等
events {
worker_connections 1024;
#设置最大的连接数为 一般默认512 但是常用的时候 一般是 1024 -2048
#一般不要超过你的操作系统的最大文件句柄数
accept_mutex off;
#是否开启网络连接的序列化 开启后可以防止多个进程对连接的争夺 防止惊群现象
multi_accept on;
#是否允许多个网络连接同事接入一个工作进程 默认一对一 开启后可以一对多 但是
#你的程序很可能会出现异常
use method;
#事件模型的选择 有很多种模型可以给我们选择 select poll ... 使用默就可以了
#以上指令只能在events块配置 千万别串门了
}
#http块
#这里是 nginx代理服务非常重要的一块我们将在下一节课中给大家详细的带来学习
后续的配置文件解读在后面的课程中会一一带给大家
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
注:近期持续更新有关nginx的知识点,欢迎大家关注!