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.mzph.cn/news/157960.shtml

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

相关文章

【JavaEE初阶】 JavaScript基础语法——贰

文章目录 🌲条件语句🚩if 语句🚩三元表达式🚩switch🚩循环语句🎈while 循环🎈continue🎈break🎈for 循环 🍀数组🚩创建数组🚩获取数组…

vue中使用echarts渐变柱状图 Cannot read properties of undefined (reading ‘graphic‘)解决方法

在使用渐变颜色时报错,Cannot read properties of undefined (reading ‘graphic’) echarts也下载了,引入了,就是报错,用不了new charts, 结果换了一个版本号就可以了,本来用的"echarts": "…

记录一次hiveserver2和namenode进程宕掉的排查

背景 最近发现集群主节点总有进程宕机,定位了大半天才找到原因,分享一下 排查过程 查询hiveserver2和namenode日志,都是正常的,突然日志就不记录了,直到我重启之后又恢复工作了。 排查各种日志都是正常的&#xff0…

Vue3 插槽 v-slot

插槽 视频链接:尚硅谷vue-插槽章节 不使用插槽的情况下 结果: 1 默认插槽 在子组件中只能有一个 结果: 2 具名插槽 #b是v-slot:b 的缩写 顾名思义就是指着名字去插入 结果: 3 作用域插槽 可以传递数据的插槽&#…

分享一些简单的英语问候语

昨天和一个朋友聊天,他问我最近有没有某个国家的客户?我说只有一两个,都已经好久没有联系了,上一次问候还是在九月份。他说从十月底开始就收到很多来自当地的询盘,你不妨问下客户最近是否有新的需求? 于是…

python 实现蚁群算法(simpy带绘图)

这里使用了蚁群算法求解了旅行商问题,同时结合了simpy来绘图 选择下一个食物的函数为: probability[i] pheromone[self.now][self.not_to_foods[i]] ** pheromone_w (1 / distance[self.now][self.not_to_foods[i]]) ** distance_w 该条路概率权重该点…

排序算法--插入排序

实现逻辑 ① 从第一个元素开始,该元素可以认为已经被排序 ② 取出下一个元素,在已经排序的元素序列中从后向前扫描 ③如果该元素(已排序)大于新元素,将该元素移到下一位置 ④ 重复步骤③,直到找到已排序的元…

【数据结构】树与二叉树(十八):树的存储结构——Father链接结构、儿子链表链接结构

文章目录 5.1 树的基本概念5.1.1 树的定义5.1.2 森林的定义5.1.3 树的术语 5.2 二叉树5.3 树5.3.1 树的存储结构1. 理论基础2. 典型实例 5.3.2 Father链接结构a. 定义树节点结构b. 创建新节点c. 主函数d. 代码整合 5.3.3 儿子链表链接结构a. 定义树节点结构b. 创建新节点c. 添加…

为什么录屏没声音?实用技巧大放送!

录屏已成为我们在数字时代记录和分享内容的重要方式之一。但有时,您可能会遇到录制视频却没有声音的问题。这个问题可能出现在不同的录屏软件中,导致许多人感到疑惑。在本文中,我们将探讨为什么录屏没声音,并提供两种解决方案&…

C语言实现堆栈和队列(动态)

行路难!行路难!多歧路,今安在?长风破浪会有时,直挂云帆济沧海。————李白 一 .堆栈 1 什么是堆栈 堆栈是一种特殊的线性表,堆栈中的元素以及元素之间的逻辑关系和线性表完全相同。在操作上的差别是线性…

springboot+jsp+bootstrap+java问卷调查系统

系统功能需求包含业务需求和功能需求,系统功能需求分析是在了解用户习惯、开发人员技术和实力等各个因素的前提下,对其进行深入分析,了解系统基本需求后,基本功能如下: 本课题要求实现优质的问卷调查系统,就…

安全框架springSecurity+Jwt+Vue-2(后端开发)

一、创建项目及配置 ①&#xff1a;创建新的项目及常用包 ②&#xff1a;引入依赖和配置 devtools&#xff1a;项目的热加载重启插件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId&…

如何配置ESB单据集成接口

ESB企业服务总线在实际项目中主要用于各业务系统之间的集成&#xff0c;集成包括数据集成、应用集成以及业务单据集成等&#xff0c;ESB企业服务总线主要包含三部分&#xff1a;ESB设计器、SMC管理控制台以及Server运行环境&#xff0c;ESB设计器用于服务以及集成流程的开发&am…

【C++ 设计模式】面向对象设计原则 Template Method 模式 Strategy 策略模式

一、面向对象设计原则 重新认识面向对象 理解隔离变化 • 从宏观层面来看&#xff0c;面向对象的构建方式更能适应软件的变化&#xff0c; 能将变化所带来的影响减为最小 各司其职 • 从微观层面来看&#xff0c;面向对象的方式更强调各个类的“责任” • 由于需求变化导…

Tesco EDI需求分析

Tesco&#xff0c;成立于1919年&#xff0c;是一家全球领先的综合性零售企业&#xff0c;总部位于英国。公司致力于提供高质量、多样化的商品和服务&#xff0c;以满足客户的需求。Tesco的使命是通过创新和卓越的客户服务&#xff0c;为客户创造更美好的生活。多年来&#xff0…

【idea】解决idea 执行maven build总下载 Downloading maven-metadata.xml文件

可以看到如下日志中打印了执行的命令行&#xff0c;其中包含 --update-snapshots&#xff0c;是强制更新的意思。 日志内容如下&#xff1a; D:\env\jdk1.8.0_261\bin\java.exe --update-snapshots -s D:\env\apache-maven-3.8.6\conf\settings.xml -Dmaven.repo.localD:\env\…

【开源】基于Vue.js的天然气工程业务管理系统的设计和实现

项目编号&#xff1a; S 021 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S021&#xff0c;文末获取源码。} 项目编号&#xff1a;S021&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四…

tomcat (SCI)ServletContainerInitializer 的加载原理

问题&#xff1a;使用WebScoket的时候发现通过ServerEndpoint方式注册上去的url无法访问&#xff0c;报错404 经过排查发现在WsServerContainer这个类中的addEndpoint方法一直没有触发ServerEndpoint注解的扫描 通过该方法来源于StandardContext.startInternal()方法的调用如下…

CSS特效015:7个小球转圈圈加载效果

CSS常用示例100专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS…

ERP对接淘宝/天猫/京东/拼多多商品详情数据API接口

引言 今天&#xff0c;我们时代变化非常快&#xff0c;传统行业做法&#xff0c;已经无法完全适应时代的发展。互联网的发展&#xff0c;造成了一股网购热。京东&#xff0c;天猫&#xff0c;淘宝&#xff0c;易购……网购&#xff0c;给我们生活带来了方便&#xff0c;消费者…