您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Nginx 热部署和日志切割,你学会了吗?

时间:2020-01-22 14:47:25  来源:  作者:

Nginx命令行

  1. 格式:nginx -s stop
  2. 帮助:-? -h
  3. 使用指定的配置文件:-c
  4. 指定配置指令:-g (用途是覆盖配置文件中的指令)
  5. 指定运行目录:-p
  6. 发送信号:-s(立刻停止服务:stop,优雅的停止服务:quit,重新配置文件:reload,重新开始记录日志文件:reopen)
  7. 测试配置文件是否有语法错误:-t -T
  8. 打印 nginx 的版本信息、编译信息等:-v -V

Nginx 命令和大部分的 linux 的命令很相似,都是 nginx 加基本指令,再加指令相关的参数。默认情况下 nginx 会去寻找之前执行 configure 命令时指定位置的配置文件,但是可以通过 -c 来指定配置文件,并且可以通过 -g 来指定配置指令。

nginx 去操作运行中进程的方法一般是通过发送信号,可以通过 linux 通用的 kill 命令,也可以用 nginx 的 -s 命令来发送信号。

接下来,让我们通过几个栗子来熟悉 Nginx 的命令行操作。

重载配置文件

配置文件默认是在安装目录的 conf 文件下,文件名为 nginx.conf,我们可以打开看一下:

worker_processes 1;
events {
 worker_connections 1024;
}
http {
 include mime.types;
 default_type Application/octet-stream;
 sendfile on;
 #tcp_nopush on;
 keepalive_timeout 65;
 #gzip on;
 server {
 listen 80;
 server_name localhost;
 location / {
 root html;
 index index.html index.htm;
 }
 error_page 500 502 503 504 /50x.html;
 location = /50x.html {
 root html;
 }
 }
}

假如我们需要开启 gzip 压缩,我们可以把它前面的注释去掉,当我们在修改完 nginx 配置文件后,我们可以通过 nginx 的命令 ./nginx -s reload 重启 nginx 服务。

Nginx 热部署

当从老版本替换为新版本的 nginx 的时候,如果不热部署的话,会需要取消 nginx 服务并重启服务才能替换成功,这样的话会使正在访问的用户在断开连接,所以为了在不影响用户的体验下进行版本升级,就需要热部署来升级版本。

接下来,让我们一起进行一次热部署吧。

因为进行升级主要是更换二进制文件,所以在升级前先备份旧的二进制文件。

# 备份旧版本的 nginx 二进制文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old

然后下载最新版本的 nginx,解压后进行编译,再把编译好的最新版本的 nginx 二进制文件拷贝到安装目录下的 sbin 目录下。

# 到官网下载最新版本的 nginx
wget http://nginx.org/download/nginx-1.17.2.tar.gz
# 解压
tar -xzvf nginx-1.17.2.tar.gz
cd nginx-1.17.2
./configure --prefix=/usr/local/nginx
# 编译
make
# 替换旧的 nginx 的执行程序
cp -r /usr/local/nginx-1.16.1/objs/nginx /usr/local/nginx/sbin/ -f

通过 ps -ef | grep nginx 来查看 nginx 运行状况:

[root@wupx sbin]# ps -ef | grep nginx

root 1752 1 0 20:39 ? 00:00:00 nginx: master process ./sbin/nginx

nobody 1783 1752 0 20:41 ? 00:00:00 nginx: worker process

root 1787 1 0 20:41 ? 00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz

root 4357 1708 0 21:00 pts/2 00:00:00 grep --color=auto nginx

可以看到目前启动的 nginx 的 PID 为 1752,下面需要给正在运行的 nginx 的 master 进程发送信号,告诉它我们要进行热部署了。

# 发送 USR2 信号给旧版本主进程号,使 nginx 的旧版本停止接收请求,用 nginx 新版本接替
kill -USR2 1752

再通过 ps -ef | grep nginx 来查看 nginx 运行状况:

[root@wupx sbin]# ps -ef | grep nginx

root 1752 1 0 20:39 ? 00:00:00 nginx: master process ./sbin/nginx

nobody 1783 1752 0 20:41 ? 00:00:00 nginx: worker process

root 1787 1 0 20:41 ? 00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz

root 4391 1752 0 21:02 ? 00:00:00 nginx: master process ./sbin/nginx

nobody 4392 4391 0 21:02 ? 00:00:00 nginx: worker process

root 4394 1708 0 21:07 pts/2 00:00:00 grep --color=auto nginx

这个时候我们需要给老的 nginx 发送信号,告诉老的 nginx 请优雅的关闭所有的 worker 进程。

# 发送 WINCH 信号到旧的主进程,它会通知旧的 worker 进程优雅的关闭,然后退出
kill -WINCH 1752

重新在查看 nginx 状态:

[root@wupx sbin]# ps -ef | grep nginx

root 1752 1 0 20:39 ? 00:00:00 nginx: master process ./sbin/nginx

root 1787 1 0 20:41 ? 00:00:00 wget http://nginx.org/download/nginx-1.17.2.tar.gz

root 4391 1752 0 21:02 ? 00:00:00 nginx: master process ./sbin/nginx

nobody 4392 4391 0 21:02 ? 00:00:00 nginx: worker process

root 4402 1708 0 21:08 pts/2 00:00:00 grep --color=auto nginx

也可以发现老的 nginx maser 进程还存在,它的意义是:如果存在问题,需要退回到老版本中,我们可以给它发送 reload 命令,让他重新把 worker 进程拉起来、把新版本关掉。保留在这里方便我们做版本回退。

如果要退出保留的 master 进程,可以通过 kill -QUIT 命令来完成:

# 发送 QUIT 信号到旧的主进程,它会退出保留的 master 进程
kill -QUIT 1752

执行完后,1752 进程退出,通过 netstat lntup 可以看到 80 端口已经被 4391 进程监听了(新版本 nginx 的进程)。

到此为止,我们就完成了 nginx 的热部署。

日志切割

为了避免日志文件过大不方便查看,因此需要对日志切割。首先将原先的日志进行备份:

# 备份原日志

mv error.log old_error.log

查看日志大小:

[root@wupx logs]# ll

total 20

-rw-r--r-- 1 root root 6789 Nov 6 22:28 access.log

-rw-r--r-- 1 root root 5 Nov 6 22:16 nginx.pid

-rw-r--r-- 1 root root 7831 Nov 6 22:28 old_error.log

接下来进行日志切割:

# 日志切割
/usr/local/nginx/sbin/nginx -s reopen

再次查看:

[root@wupx logs]# ll
total 24
-rw-r--r-- 1 nobody root 6789 Nov 6 22:28 access.log
-rw-r--r-- 1 nobody root 60 Nov 6 22:30 error.log
-rw-r--r-- 1 root root 5 Nov 6 22:16 nginx.pid
-rw-r--r-- 1 root root 7831 Nov 6 22:28 old_error.log

经过上面的操作,我们就完成了日志的切割,以上操作只是为了了解日志切割的操作流程,不建议直接生产这么使用。推荐先写成一个 shell 脚本,通过 shell 脚本去定时执行。

示例脚本:

#!/bin/bash
LOGS_PATH=/usr/local/nginx/logs/history
CUR_LOGS_PATH=/usr/local/nginx/logs
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${CUR_LOGS_PATH}/access.log ${LOGS_PATH}/old_access_${YESTERDAY}.log
mv ${CUR_LOGS_PATH}/error.log ${LOGS_PATH}/old_error_${YESTERDAY}.log
## 向 NGINX 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)

总结

这篇文章主要介绍了 Nginx 命令行相关知识,并介绍了重载配置文件、Nginx 热部署、日志切割等操作,还是需要多实践操作,实践出真知。



Tags:Nginx   点击:()  评论:()
声明:本站部分内容来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除,谢谢。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
  如果我们想通过 HTTP 访问 FastDFS 中保存的图片信息,需要借助其他工具实现,Nginx 就是一个不错的选择,它是一个高性能的 HTTP 和反向代理 Web 服务器。关于 Nginx 更多的...【详细内容】
2020-10-28   Nginx  点击:(5)  评论:(0)  加入收藏
有时候我们需要将服务器上的某些目录共享出来,让其他人可以直接通过浏览器去访问、浏览或者下载这些目录里的一些文件。最近我就正好需要将一些静态的 HTML 页面部署到服务器...【详细内容】
2020-10-23   Nginx  点击:(10)  评论:(0)  加入收藏
报告编号:B6-2020-090302报告来源:360CERT报告作者:360CERT更新日期:2020-09-030x01 漏洞简述2020年09月03日,360CERT监测发现 phpstudy 发布了 phpstudy 安全配置错误漏洞 的风...【详细内容】
2020-09-04   Nginx  点击:(13)  评论:(0)  加入收藏
概述这两天在写 go 项目, 一个 HTTP 服务器. 之前写的是 php 项目, nginx 监听80端口, 根据域名将请求分配给不同项目. 现在换了 go, 自然也想延续这个操作, 毕竟都是跑在同...【详细内容】
2020-08-15   Nginx  点击:(6)  评论:(0)  加入收藏
Nginx前提准备首先是对于linux环境下的安装(本地机器是Windows版本,大家可以使用Vmware,但是需要配置网络连接等,这里就不在展示虚拟机上的演示。这里使用到个人的阿里云云服...【详细内容】
2020-08-10   Nginx  点击:(5)  评论:(0)  加入收藏
什么是Nginx?Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来...【详细内容】
2020-07-21   Nginx  点击:(3)  评论:(0)  加入收藏
一、试验目的无论是阿里云,还是腾讯云,无论是华为云,还是天翼云……无论是“哪朵云”,肯定都会有“负载均衡”这个服务,这究竟是个什么东东呢?产品介绍、功能特性等信...【详细内容】
2020-07-17   Nginx  点击:(7)  评论:(0)  加入收藏
什么是Nginx?Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来...【详细内容】
2020-07-06   Nginx  点击:(10)  评论:(0)  加入收藏
相对于Apache的同步IO模型,Nginx由于采用了NIO的缘故,性能上碾压前者。Nginx是轻量级的,占用的系统资源更少,天然支持高并发。今天我们就简单的讨论一下nginx的线程模型。注意不...【详细内容】
2020-07-01   Nginx  点击:(10)  评论:(0)  加入收藏
上一篇文章我写了 Nginx 的 11 个阶段,很多人都说太长了。这是出于文章完整性的考虑的,11 个阶段嘛,一次性说完就完事了。今天这篇文章比较短,看完没问题。过滤模块的位置之前我...【详细内容】
2020-06-25   Nginx  点击:(3)  评论:(0)  加入收藏
技术编辑:宗恩丨发自 SiFou Office作者:SegmentFault 思否报道转发链接: https://mp.weixin.qq.com/s/IRWTloT_nMSIezZiwUEGZg前言去年12月,俄罗斯警方搜查了商业服务器公司 N...【详细内容】
2020-06-21   Nginx  点击:(9)  评论:(0)  加入收藏
简单有效的防盗链手段场景如果做过个人站点的同学,可能会遇到别人盗用自己站点资源链接的情况,这就是盗链。说到盗链就要说一个 HTTP 协议的 头部,referer 头部。当其他网站通...【详细内容】
2020-06-15   Nginx  点击:(8)  评论:(0)  加入收藏
没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器。基于REST架构风格,以统一资源描述符(Uniform Resources Identifier)URI或者统一资源定位...【详细内容】
2020-06-06   Nginx  点击:(10)  评论:(0)  加入收藏
nginxWebUINginxWebUI是一款方便实用的 nginx 网页配置工具,可以使用 WebUI 配置 Nginx 的各项功能,包括端口转发,反向代理,ssl 证书配置,负载均衡等,最终生成「nginx.conf」配置...【详细内容】
2020-05-14   Nginx  点击:(20)  评论:(0)  加入收藏
说到 大名鼎鼎的 Nginx, 大家肯定都不陌生,不管是做运维,做开发,还是做网络的都应该对他很熟悉。Nginx的功能很多,很强大,今天我主要是分享一下 Nginx 反向代理的常见用法。 什么...【详细内容】
2020-05-08   Nginx  点击:(7)  评论:(0)  加入收藏
基础篇一、环境 服务器版本:CentOS 7.2为了保证学习阶段不遇到奇怪的事情,请保证以下四点(大神选择性无视) 确认系统网络 确认yum可用 确认关闭iptables 确认停用selinux#查看ip...【详细内容】
2020-05-05   Nginx  点击:(5)  评论:(0)  加入收藏
安全优化-隐藏版本号server_tokensSyntax: server_tokens on | off | build | string;Default: server_tokens on;Context: http, server, location在主配置文件nginx.co...【详细内容】
2020-05-01   Nginx  点击:(20)  评论:(0)  加入收藏
今天,再给大家讲讲Nginx的整体架构,以及进程模型。Nginx是一个免费的,开源的,高性能的HTTP服务器和反向代理。以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。Nginx是一个Web服务器,也可以用作负载均衡器和HTTP...【详细内容】
2020-04-28   Nginx  点击:(1)  评论:(0)  加入收藏
一、正则表达式匹配 ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~ 和 !~* 分别为区分大小写不匹配及不区分大小写不匹配二、文件及目录匹配 -f 和 !-f 用来判断是否存在文...【详细内容】
2020-04-25   Nginx  点击:(6)  评论:(0)  加入收藏
1. 需求将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能; 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访...【详细内容】
2020-03-12   Nginx  点击:(12)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条