nginx-编译安装-基础指令-信号

nginx 的编译与安装

nginx目录介绍

如果我们需要整合第三方模块,需要自己编译然此模块编译到nginx里面。apt和yum的安装只具有常用的基础功能。

  • 下载nginx
wget http://nginx.org/download/nginx-1.14.0.tar.gz

/auto 目录
在这里插入图片描述
Changes 描述了一每个版本提供了那些特性 以及修复了那些bug
在这里插入图片描述
/conf 配置文件的示例文件
configure 执行编译前必须执行的脚本,用于生成中间文件,编译会使用到。
contrib 用于显示nginx的配置语法,需要拷贝到我们的vim中

#在profile开启配色,记得配置完成以后source一下
TERM=linux
#在用户下面创建目录
mkdir ~/.vim 
#拷贝文件

拷贝前
在这里插入图片描述
拷贝后,可以看到有颜色了
在这里插入图片描述
/html 错误500 和欢迎页面
在这里插入图片描述
/man 文件帮助文件

 man ./nginx.8 #注意./不能少

在这里插入图片描述
/src 源代码

nginx编译

1 安装第三方库

yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

1.1 第三库的介绍
1) PCRE
PCRE(Perl Compatible Regular Expressions)是一个 Perl 库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库。
注:pcre-devel 是使用 pcre 开发的一个二次开发库。nginx 也需要此库。
2) zlib
zlib 库提供了很多种压缩和解压缩的方式,nginx 使用 zlib 对 http 包的内容进行 gzip,所以需要在 linux 上安装 zlib 库。

3) OpenSSL

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。nginx 不仅支持 http 协议,还支持 https(即在 ssl 协议上传输 http),所以需要在 linux安装 openssl 库。

  • 先看看编译的时候支持那些参数

2 编译准备
1)在编译之前可以查看配置支持那些参数

#查看编译的时候支持那些参数
./configure --help

在这里插入图片描述

通常只需要指定–prefix=Path 所有的文件都会在这个目录下生成
with 和without分别对应了默认编译的时候会不会将这些模块编译进nginx中。

#编译 如果过程中没有任何错误就编译成功了 编译过程中会生成一些中间文件 文件会放到objs文件下
./configure --prefix=/env/liyong/install/nginx

比如更多的配置

./configure \
--prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/nginx.pid \
--lock-path=/usr/local/nginx/nginx.lock \
--error-log-path=/usr/local/nginx/log/error.log \
--http-log-path=/usr/local/nginx/log/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/usr/local/nginx/temp/client \
--http-proxy-temp-path=/usr/local/nginx/temp/proxy \
--http-fastcgi-temp-path=/usr/local/nginx/temp/fastcgi \
--http-uwsgi-temp-path=/usr/local/nginx/temp/uwsgi \
--http-scgi-temp-path=/usr/local/nginx/temp/scgi

可以在objs下面看到编译包含了那些模块每一个extern都是一个模块

cat ./ngx_modules.c

在这里插入图片描述
3 编译
1)在nginx目录下执行make

make #执行以后可以运行的二进制文件都在objs文件下

在这里插入图片描述

cd objs

在这里插入图片描述
2) make install

make install #首次安装执行,如果升级还需要做其他操作

下面就可以到prefix文件中看到安装成功的nginx
在这里插入图片描述
在这里插入图片描述

nginx快速安装
#通过yum安装
sudo yum install -y nginx
#通过whereis 指令查看安装到了哪里
whereis nginx
配置命令行

1 发送信号

#重载配置文件
./nginx -s reload
#停止服务
./nginx -s stop 
#优雅的停止服务
./nginx -s quit

2 热部署,比如升级服务

#热部署
cp nginx nginx.old #备份旧文件  在sbin目录下
#将生产的新文件复制到sbin目录下 并给master发送一个信号
kill -USR2 12734 #master的进程id
kill -WINCH 12734 #优雅的关闭worker进程

3 日志切割(可以参靠日志篇的日志切割)

mv access.log bak.log #先备份日志文件
./nginx -s reopen #重新生成日志文件

4 其它指令

./nginx -h #查看帮助
./nginx -v #查看版本
./nginx -g #指定配置指令
./nginx -p #指定运行目录
./nginx -t #检查配置文件是否含有错误
信号
kill -SIGHUP 12717 #发送SIGHUP信号, 这个也是和reload一的效果 重新加载
kill -SIGTERM 15534 #发送停止信号

在这里插入图片描述
Master:
CHLD 当worker进程结束时,会向Master进行发送CHLD信号,从而监控worker进程。
管理worker进程:
TERM,INT 立刻停止
QUIT 立刻退出
HUP 重载配置文件
USR1 从新打开日志文件,做日志切割
上面这几个命令可以直接用./nginx -s 向master发送
下面这两个命令只能通过kill发送,在热部署的时候使用
USR2
WINCH

Worker:和上面的是对应的,但是通常不用,一般是向Master进程发送停止信号,因为我们希望Master来管理worker进程,当Master收到信号以后会发送到worker进程。
TERM,INT 立刻停止
QUIT 立刻退出
USR1 从新打开日志文件,做日志切割
WINCH

Nginx命令行 -s 发送的四个命令 reload、reopen、stop、quit 分别对应于向master进程发送信号 HUP、USR1、TERM、QUIT。
nginx命令行
启动nginx以后,会讲pid记录到文件中,通常是安装目录下的logs/nginx.pid 记录了Master的进程pid,当我们执行命令行的时候其实就是读取这个pid然后向这个进程发送信号,也就是后面的 reload、reopen、stop、quit这四个是为了方便我们使用更直观。

reload流程:
1 向Master进程发送HUP信号(reload命令)
2 Master进程校验配置语法是否正确
3 Master进程打开新的监听端口
4 Master 进程用新配置启动新的worker进程
5 Master进程向老worker进程发送QUIT信号
6 老worker进程关闭监听句柄,处理完当前连接后结束进程。
在这里插入图片描述
当发送reload命令的时候,Master会启动四个新的worker进程,图中用黄颜色代替。然后新的连接全部会转到新的进程,老连接会继续在老进程处理,处理完毕以后就会自动关闭。还有一种情况就是老连接报错了,倒是老进程一直被占用,比较新的nginx也提供了新的配置worker_shutdown_timeout ,这个配置项设置超时时间,如果超过了一个小时则强制结束。

热升级流程
1 将旧nginx替换成新的nginx文件(注意备份)
2 向Master发送USR2信号
3 Master进程修改pid文件名,加后缀.oldbin
4 master 进程用新nginx文件启动新Master进程
5 向老Master进程发送QUIT信号,关闭Master进程
6 回滚:向老Master发送hub,向新Master发送
在这里插入图片描述

优雅的关闭worker进程:
不能直接关闭连接,会导致错误,我们需要识别当nginx没有处理连接的时候来关闭。但是nginx对于websoket,tcp,udp不识别到底到那个报文才算结束,所以我们优雅的关闭一般是针对HTTP。
1 设置定时器 worker_shutdown_timeout
2 关闭监听句柄
3 关闭空闲连接 连接池会有一些空闲连接
4 在循环中等待全部连接关闭 处理完http以后,会关闭当前使用的连接。
4 退出进程 当等待时间超过前面的配置时会强制关闭。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/199860.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第2关:图的深度优先遍历

任务要求参考答案评论2 任务描述相关知识编程要求测试说明 任务描述 本关任务:以邻接矩阵存储图,要求编写程序实现图的深度优先遍历。 相关知识 图的深度优先遍历类似于树的先序遍历, 是树的先序遍历的推广,其基本思想如下: …

Linux之进程概念(一)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、冯诺依曼体系结构二、操作系统(Operator System)1、概念2、设计OS的目的3、定位4、如何理…

OceanBase:集群常见操作

目录 1.查看 OBD 管理的集群列表 2.查看某个集群状态 3.启动 OceanBase 集群 4.连接 OceanBase 集群 5.停止运行中的集群 6.销毁已部署的集群 7.查看集群配置项 8.修改集群配置项 1.查看 OBD 管理的集群列表 obd cluster list 2.查看某个集群状态 obd cluster displa…

如何利用CHATGPT写主题文章

问CHAT:新课标下畅言智慧课堂助力小学生量感培养,拟解决的关键问题 CHAT回复: 1. 确定智慧课堂在新课标下的正确应用方法:新课标对教育方法、内容等提出了新的要求,需要探讨如何将智慧课堂与新课标相结合,…

OceanBase 4.2.1 LTS 发版 | 一体化数据库首个长期支持版本

在刚刚结束的年度发布会上,OceanBase 沿着“一体化”产品战略思路,发布了一体化数据库的首个长期支持版本 4.2.1 LTS。作为 4.0 系列的第一个 LTS 版本,该版本的定位是支撑客户关键业务稳定长久运行,我们非常认真的打磨了这个版本…

单片机和FreeRTOS上跑机器人ROS的应用

机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。 目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下: 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

《研发效能 100 问》首发,多位专家解读「研效提升」的破局之道?

为了可以帮助更多研发管理者和研发效能负责人,了解构建研发效能体系应从何做起,以及在构建过程中需要解决哪些疑难问题,有哪些最佳实践可以借鉴。2023 年 7 月,思码逸发起,由行业知名研发效能专家张乐老师担任出品人&a…

MFC项目添加CUDA支持

文章目录 前言一、开启项目CUDA支持二、链接CUDA库三、链接cu文件 前言 我目前的项目状况是: 拥有一个MFC项目;拥有现成的 .cuh文件 和 .cu文件。 我想做的是:将.cuh和.cu文件放到我的项目中,并且编译成功跑起来 一、开启项目C…

Redis高可用之持久化

Redis的高可用 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365),99.9%后面的小数点越多说明越可靠。Redis 的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性。 redis中高可用技术种类 1…

硬件驱动为什么要有WHQL数字签名

硬件驱动要有WHQL数字签名才能实现正常安装、启动、运行,并实现驱动静默安装。 目前的桌面操作系统中,Windows系统市场占有率处于优势,Windows 的各个版本的系统加起来几乎占领了大部分市场。所以很多工业和行业的硬件设备都要考虑兼容在Win…

开发仿抖音APP遇到的问题和解决方案

uni-app如何引入阿里矢量库图标/uniapp 中引入 iconfont 文件报错文件查找失败 uni-app如何引入阿里矢量库图标 - 知乎 uniapp 中引入 iconfont 文件报错文件查找失败:‘./iconfont.woff?t1673007495384‘ at App.vue:6_宝马金鞍901的博客-CSDN博客 将课件中的cs…

C#的类型转换

目录 一、简介二、基本类型转换1.整数类型转换1.隐式转换2.显式转换 2.浮点类型转换1.隐式转换2.显式转换 3.字符类型转换1.字符到整数的转换2.整数到字符的转换 4.布尔类型转换1.布尔到整数的转换2.整数到布尔的转换 三、隐式转换和显式转换四、装箱和拆箱五、自定义类型转换六…

IIC通信

通信协议简述 三条线:串行数据线(SDA)、串行时钟线(SCL),地线; 半双工 一问一答 ,主从模式,多设备模式总线协议:支持多个设备进行通信(多主多从) 异步模式(串口&#xf…

起立科技(起鸿)在第25届高交会上展示透明OLED技术创新

第二十五届中国国际高新技术成果交易会 日期:2023年11月15日 地点:福田会展中心7号馆 深圳,2023年11月15日 — 起鸿科技,作为透明OLED领域的引领者,于今日参展了第二十五届中国国际高新技术成果交易会。这一展会将汇…

7 Redis的PipeLine

PipeLine的作用是批量执行命令 redis的性能瓶颈基本上是网络 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.…

数据结构~~~~ [队列] ~~~~

文章目录 队列队列的概念与结构队列的接口实现***队列的初始化******队列的销毁******队列的插入与创建节点******队列的删除******队列的队头数据******队列的队尾数据******队列的判空*** 队列 队列的概念与结构 队列的插入数据在队尾出数据在队头(尾入头出&…

女人感染阴虱什么感觉?皮肤性病科主任谭巍全面解读

阴虱是一种常见的性传播疾病,通常由寄生虫引起,这些虱子寄生在阴部和肛门周围的毛发中。当女性感染阴虱后,可能会经历一系列的身体感觉和症状。 首先,感染阴虱的女性可能会感到阴部和肛门周围的皮肤瘙痒和不适。这种瘙痒可能会持…

MatrixOne完成与麒麟信安、欧拉的兼容互认

近日,超融合异构云原生数据库MatrixOne企业版软件V1.0完成了与欧拉开源操作系统(openEuler简称“欧拉”)、麒麟信安操作系统系列产品和虚拟化平台的相互兼容认证,通过了欧拉兼容性测评,获得了《openEuler技术测评证书》…

Python机器学习、深度学习提升气象、海洋、水文领域实践应用

Python是功能强大、免费、开源,实现面向对象的编程语言,能够在不同操作系统和平台使用,简洁的语法和解释性语言使其成为理想的脚本语言。除了标准库,还有丰富的第三方库,Python在数据处理、科学计算、数学建模、数据挖…