新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT百科 > 站长技术 > 服务器

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

时间:2019-11-27 16:19:21  来源:  作者:

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   点击:()  评论:()
声明:本站部分内容来自互联网,内容观点仅代表作者本人,如有任何版权侵犯请与我们联系,我们将立即删除。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
nginx命令行 格式:nginx -s stop 帮助:-? -h 使用指定的配置文件:-c 指定配置指令:-g (用途是覆盖配置文件中的指令) 指定运行目录:-p 发送信号:-s(立刻停止服务:stop,优雅的停止服务:qu...【详细内容】
2019-11-27   Nginx  点击:(0)  评论:(0)  加入收藏
相关链接:Apache+WordPress部署SSL加密服务,全站开启https访问第一步、部署SSL加密服务准备工作1.在VPS已部署好LNMP一键安装包;2.申请SSL证书(百度免费SSL证书),我以阿里云提过...【详细内容】
2019-11-27   Nginx  点击:(0)  评论:(0)  加入收藏
前言接触到CDN的起因:我自己搭建的网站https://price.monitor4all.cn/网页打开的速度一直比较慢,经查证是我的网站有很多静态js大文件,通过浏览器读取这些js比较耗时间。最近...【详细内容】
2019-11-26   Nginx  点击:(2)  评论:(0)  加入收藏
模块配置结构基本上每个模块都会提供一些配置指令,以便于用户可以通过配置来控制该模块的行为。那么这些配置信息怎么存储呢?那就需要定义该模块的配置结构来进行存储。大家...【详细内容】
2019-11-26   Nginx  点击:(2)  评论:(0)  加入收藏
Nginx现在是非常火爆的web服务器,她使用更少的资源,支持更多的并发连接数,实现了linux的epoll模型。Nginx采用的是多进程单线程和多路IO复用模型。使用了I/O多路复用技术的Ng...【详细内容】
2019-11-26   Nginx  点击:(3)  评论:(0)  加入收藏
互联网从90年代开始席卷全球,现如今基本上所有业务都可以在互联网上完成,互联网已经成为我们生活中不可或缺的一部分。那么互联网web协议是怎样的呢?可以概括为访问者从给定的W...【详细内容】
2019-11-25   Nginx  点击:(3)  评论:(0)  加入收藏
简介今天要给大家分享的事如何配置nginx记录access log和error log到systemd journal日志中去需求在前面的文章我们讲道,我们可以不需要容器化,直接部署nginx到裸服务器,那么传...【详细内容】
2019-11-22   Nginx  点击:(5)  评论:(0)  加入收藏
Nginx 是一个免费、开源、高性能、可伸缩、可靠、功能全面且流行的 HTTP和反向代理服务器,一个邮件代理服务器,以及通用的 TCP/UDP 代理服务器。Nginx 的配置很简单,资源消耗低...【详细内容】
2019-11-21   Nginx  点击:(2)  评论:(0)  加入收藏
前面的话如果服务器只需要放置一个网站程序,解析网站到服务器的网站,网站程序监听80端口就可以了。如果服务器有很多应用,借助nginx不仅可以实现端口的代理,还可以实现负载均衡...【详细内容】
2019-11-19   Nginx  点击:(6)  评论:(0)  加入收藏
1、实现效果打开浏览器,在地址栏输入www.123.com,显示linux系统中tomcat的主页面。具体操作详解:进入到nginx安装目录的配置文件中下:vim /usr/local/nginx/conf/nginx.conf编辑...【详细内容】
2019-11-18   Nginx  点击:(8)  评论:(0)  加入收藏
Nginx 现在几乎是众多大型网站的必用技术,大家应该都知道 Nginx 被 F5 收购的大事件,章亦春也在专心维护 OpenResty 项目构建和谐家园,无论你选择 Nginx 还是 OpenResty,都需要...【详细内容】
2019-11-14   Nginx  点击:(5)  评论:(0)  加入收藏
搭建思路:1. 采用nginx+nginx-rtmp-module搭建rtmp服务端2. ffmpeg作为推送端,将视频流转为adobe flash flv格式封装后推送到nginx rtmp服务Nginx服务端:nginx下载: nginx-rtmp-...【详细内容】
2019-11-11   Nginx  点击:(11)  评论:(0)  加入收藏
两种实现方式分别是基于Ehcache和Redis的session管理策略。大家都知道服务器资源有限的,但是客户端来的请求是无限的(不排除恶意攻击), 为了保证大部分的请求能够正常响应,不...【详细内容】
2019-11-07   Nginx  点击:(14)  评论:(0)  加入收藏
Location语法location [=|~|~*|^~] /uri/ { … }= 开头表示精确匹配^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/sta...【详细内容】
2019-11-07   Nginx  点击:(4)  评论:(0)  加入收藏
Nginx 同 Apache 一样都是一种 Web 服务器。基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Uniform Resources Locator)URL 作为沟通依据,通过 HTTP 协议提供各种网络服务。...【详细内容】
2019-11-06   Nginx  点击:(7)  评论:(0)  加入收藏
这篇文章给大家介绍的内容是关于 Nginx作为静态资源web服务并进行静态资源压缩,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。...【详细内容】
2019-11-04   Nginx  点击:(7)  评论:(0)  加入收藏
关于Nginx部署、配置的文章网上已经发布过很多,包括我自己也私藏了不少还发布过两篇: 后端必备 Nginx 配置 前端必备 Nginx 配置整理出来为的就是需要的时候,复制、粘贴就能使...【详细内容】
2019-11-04   Nginx  点击:(6)  评论:(0)  加入收藏
HTTP 协议的 Cache -Control 指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control 并不会影响另一个消息处理过程中的缓存处理过程。请求时的缓存指令...【详细内容】
2019-11-01   Nginx  点击:(6)  评论:(0)  加入收藏
Nginx从2004年10月发布至今,已经趋于成熟和完善。在连接高并发的情况下,Nginx是Apache服务不错的替代品,作为一款分布式轻量级的中间件Nginx也是存在大量的漏洞的。下面我们针...【详细内容】
2019-10-30   Nginx  点击:(12)  评论:(0)  加入收藏
一、前言1.1 正向代理功能比较简单,但是原生nginx不支持https代理,如果访问https网站,会报错。# nginx代理不支持http CONNECT方法:curl: (56) Received HTTP code 400 from pro...【详细内容】
2019-10-30   Nginx  点击:(68)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条