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": "…

C++11的weak_ptr弱引用的智能指针

弱引用指针weak_ptr是用来监视shared_ptr的,不会使引用计数器加1,它不管理shared_ptr内部的指针,主要是为了监视shared_ptr的生命周期,更像是shared_ptr的一个助手。weak_ptr没有重载操作符*和->,因为它不共享指针&…

windows对话框

windows对话框有以下几种: HWND CreateDialogParamA([in, optional] HINSTANCE hInstance,[in] LPCSTR lpTemplateName,[in, optional] HWND hWndParent,[in, optional] DLGPROC lpDialogFunc,[in] LPARAM dwInitParam );HWND Cr…

软信天成:如何利用大数据提高客户体验?

当今社会,市场均势正在发生变化,消费者拥有更多的选择和更高的决定权,传统的市场营销技巧注重提高品牌认知度和吸引潜在客户,现在早已过时。经济不确定性弥漫,数字化转型仍是大多数企业的优先选择,新的竞争…

Go 学习

文章目录 Go 语言中的值类型Go 语言中的引用类型 指针的使用二、使用步骤 1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人…

记录一次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 该条路概率权重该点…

idea pom导入net.sf.json的jar包失败

开始在pom.xml文件中加入依赖如下 <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.2.3</version> </dependency> maven reload project后&#xff0c;项目一直报&#xff1a;…

排序算法--插入排序

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

【python基础】random模块常用方法讲解

文章目录 前言random常用方法random.random()random.uniform(a,b)random.randint(a,b)random.randrange([start], stop[, step])random.choice(sequence)random.shuffle(x,[random])random.sample(sequence,k) 前言 Python标准库中的random函数&#xff0c;可以生成随机浮点数…

【数据结构】树与二叉树(十八):树的存储结构——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. 添加…

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

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

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

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

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

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

安全框架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;面向对象的方式更强调各个类的“责任” • 由于需求变化导…