简介

当初次编译安装nginx时,http_ssl_module 模块默认是不编译进nginx的二进制文件当中,如果需要添加 ssl 证书。也就是使用 https协议。那么则需要添加 http_ssl_module 模块。假设你的nginx安装包目录在/home/johnson/nginx-1.17.5,下面会用到

小知识点:使用/home/johnson/nginx-1.17.5/configure --help 命令,可以看到很多 --with--without 开头的模块选项。

  • --with:默认是不编译进nginx的二进制文件当中
  • --without:默认编译进nginx的二进制文件当中
/home/johnson/nginx-1.17.5/configure --help
...
--with-http_ssl_module enable ngx_http_ssl_module
...
--without-http_gzip_module disable ngx_http_gzip_module
...

可以看到http_ssl_module 模块默认是不编译进nginx的二进制文件当中。

编译添加新模块

当需要添加http_ssl_module模块时,命令如下:

/home/johnson/nginx-1.17.5/configure --with-http_ssl_module

执行完该命令后,可以在/home/johnson/nginx-1.17.5/objs/ngx_modules.c文件中看到哪些模块要安装到nginx中。如下:

ngx_module_t *ngx_modules[] = {
&ngx_core_module,
...
&ngx_http_ssl_module,
...

可以看到http_ssl_module模块要安装到nginx当中,然后使用make命令,把http_ssl_module编译进nginx的二进制文件当中

cd /home/johnson/nginx-1.17.5
make

执行完上述命令后,/home/johnson/nginx-1.17.5/objs/nginx该文件就是编译后的nginx二进制文件,然后咱们就需要进行热部署升级了。

热部署

假设你的nginx安装目录在/usr/local/nginx当中。

  1. 备份正在使用的nginx二进制文件
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
  1. 使用最新的nginx二进制文件替换掉正在使用的nginx二进制文件
cp -r /home/johnson/nginx-1.17.5/objs/nginx /usr/local/nginx/sbin/ -f
  1. 查看正在运行nginx的master进程
ps -ef | grep nginx
root 6503 1 0 Jun23 ? 00:00:00 nginx: master process nginx
ubuntu 26317 19063 0 07:39 pts/0 00:00:00 grep --color=auto nginx
nobody 31869 6503 0 Jun27 ? 00:00:00 nginx: worker process

可以看到,当前nginx的master进程号为 6503。

  1. 告知正在运行的nginx的master进程,需要进行nginx升级
kill -USR2 6503
ps -ef | grep nginx
root 6503 1 0 Jun23 ? 00:00:00 nginx: master process nginx
root 7128 6503 0 08:05 ? 00:00:00 nginx: master process nginx
nobody 7129 7128 0 08:05 ? 00:00:00 nginx: worker process
root 7140 30619 0 08:05 pts/0 00:00:00 grep --color=auto nginx
nobody 31869 6503 0 Jun27 ? 00:00:00 nginx: worker process

可以看到,执行完命令后会启动新的nginx的master进程,新的master进程是由旧的master进程启动的。如果没有启动,那么可以使用nginx -t查看配置文件是否正确,如果没有问题,那么一般是能够启动新的master进程。

  1. 告知旧的nginx master进程,请优雅的关闭所有旧的worker进程
kill -WINCH 6503
root@VM-0-13-ubuntu:/usr/local/nginx# ps -ef | grep nginx
root 6503 1 0 Jun23 ? 00:00:00 nginx: master process nginx
root 7128 6503 0 08:05 ? 00:00:00 nginx: master process nginx
nobody 7129 7128 0 08:05 ? 00:00:00 nginx: worker process
root 9431 30619 0 08:17 pts/0 00:00:00 grep --color=auto nginx

可以看到,旧的worker进程都已经关闭掉。如果发生了错误,则可以使用nginx -s reload命令回退到旧版本当中。

如果发现一切都正常,没有问题,那么你可以关闭掉旧的master进程。kill -9 6503,此时新的master进程的父进程(旧的master进程)被关闭后,那么会把他的父进程改成系统进程,系统进程的进程号为 1。

此时就完美添加了新模块和实现热部署了!!!

总结

因为初次编译nginx,可能没想到要用到其他模块,或许也可能删除某些模块。此时往往就需要使用到nginx的热部署。该文章的热部署命令参考了极客时间Nginx核心知识100讲: 第10讲

参考文章:极客时间Nginx核心知识100讲: 第10讲

个人博客网址: https://colablog.cn/

如果我的文章帮助到您,可以关注我的微信公众号,第一时间分享文章给您

nginx使用热部署添加新模块的更多相关文章

  1. 线上nginx 平滑添加新模块;如(--with-http_realip_module)

    nginx 添加模块1.查看当前nginx信息(配置文件路径,启动用户...) ps aux | grep nginx 2.查看当前nginx已启用的模块(记录模块信息,安装路径)./nginx -V ...

  2. [实战] 给现有的NGINX二进制RPM包加新模块

    [实战] 给现有的NGINX二进制RPM包加新模块 一.前言 在做 wiki 的镜像,这样以后文章就可以使用外链了(链接直接跳转墙内小站). 遇到的问题就是:我的 NGINX 包安装的时候图方便采用 ...

  3. thinkPHP5 添加新模块

    1. 修改build.php文件 , 添加新模块 2. cmd 运行命令 php think build --config build.php

  4. nginx之热部署,以及版本回滚

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

  5. springboot~添加新模块的方法

    在springboot项目框架里,把一个项目两大模块,主项目main和测试项目test,而我们的测试项目根据功能又可以再分,比如可以有单元测试,集成测试,业务测试等等. 对于一个初学者来说,建立模块的 ...

  6. httpd添加新模块

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. Nginx编译添加新模块

    目录 一.简介与思路 一.简介与思路 当前适用于nginx已经在安装过了,如果没安装过,直接在编译时候添加模块即可. Nginx主要程序就是nginx这个二进制脚本,只要在编译一个nginx脚本替换掉 ...

  8. nginx添加新模块

    1.下载模块 git clone https://github.com/agentzh/echo-nginx-module 2.放入指定位置 mv echo-nginx-module-master / ...

  9. Nginx重新编译添加新模块

    找到nginx的安装包目录,如果没有的话去官网重新下载 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录,重新设置nginx ./c ...

随机推荐

  1. WEB前端程序员需要的网站整理

    前端学习资源实在是又多又广,在这样的一个知识的海洋里,我们像一块海绵一样吸收,想要快速提高效率,平时的总结不可缺少,以下总结了一些,排版自我感觉良好,推送出来. 一.插件类网站 jQuery插件库:h ...

  2. 使用Mac的Remote Desktop Manager连接ubuntu16.04 & Win10的远程桌面

    疫情严重,公司实行远程办公.自己只有mac电脑,苦于3个系统间跨平台建立远程桌面. 今天,终于尝试成功!特来记录,以防别人踩坑! Mac远程软件安装 Remote Desktop Manager软件非 ...

  3. Java实现 LeetCode 828 统计子串中的唯一字符(暴力+转数组)

    828. 统计子串中的唯一字符 我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符,并返回唯一字符的个数. 例如:s = "LEETCODE" ...

  4. Java实现 LeetCode 670 最大交换(暴力)

    670. 最大交换 给定一个非负整数,你至多可以交换一次数字中的任意两位.返回你能得到的最大值. 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7. 示例 2 : 输入: ...

  5. Java实现欧拉筛与花里胡哨求质数高级大法的对比

    我也不清楚这是什么高级算法,欧拉筛是昨天有位大佬,半夜无意间告诉我的 欧拉筛: 主要的含义就是我把这个数的所有倍数都弄出来,然后下次循环的时候直接就可以跳过了 import java.text.Sim ...

  6. java实现迷宫走法

    ** 迷宫走法** 迷宫问题 对于走迷宫,人们提出过很多计算机上的解法.深度优先搜索.广度优先搜索是使用最广的方法.生活中,人们更愿意使用"紧贴墙壁,靠右行走"的简单规则. 下面的 ...

  7. Unable to open debugger port (127.0.0.1:55119): java.net.SocketException "Socket closed"

    1.端口问题 排查端口,lsof -i:8080 修改端口等 2.权限问题 端口排查无解的话,查看idea Event Log(View->Tool Window->Event Log) ...

  8. 说出 Servlet 的生命周期,并说出 Servlet 和 CGI 的区别。

    Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派 遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当 ...

  9. [CF914D]Sum the Fibonacci

    题目   点这里看题目. 分析   我们先放宽条件,重新定义五元组\((a,b,c,d,e)\)如下:   1.\(1\le a,b,c,d,e\le n\).   2.\(s_a\&s_b= ...

  10. 2019-02-13 思考:1000瓶药水,1瓶有毒,老鼠毒发24h,如何用最少的老鼠在24h内找出毒药?

    题目: 现在有1000瓶药水,其中一瓶有毒,一只老鼠喝了在24h后会准时死亡,药水无色无味,如何用最少的老鼠在24h内找出毒药? 分析: 时间限制为24h,说明我们只有一次喂老鼠的机会,需要一波找出来 ...