目錄
- 一、安裝第三方模塊
- 1、未安裝nginx的情況下安裝第三方模塊
- 2、已安裝nginx的情況下安裝第三方模塊
- 二、平滑升級
- 1、什么是平滑升級?
- 2、信號的接受和處理
- 3、實體
一、安裝第三方模塊
??nginx本身自帶的功能比較少,但之所以nginx仍然這么強大,因為它支持第三方模塊,
??這里我們以安裝echo-nginx-module模塊為例,未安裝echo-nginx-module這個模塊的情況下,在nginx組態檔中如果使用"ehco"命令,就會出現unknown directive "echo"的報錯,起初我也不明白這是什么情況,最后百度才知道是缺少echo-nginx-module這個模塊,
??首先需要下載echo-nginx-module模塊的tar.gz包到本地,點擊這里進入下載界面!
#復制鏈接地址后,使用wget工具下載到本地/usr/local/src目錄下
[root@nginx-server ~]# cd /usr/local/src/ #進入/usr/local/src/目錄下
[root@nginx-server src]# wget https://github.com/openresty/echo-nginx-module/archive/v0.62.tar.gz #下載0.62版本
[root@nginx-server src]# ls
v0.62.tar.gz
??下載完成后,將其解壓,
[root@nginx-server src]# tar xf v0.62.tar.gz #解壓安裝包
[root@nginx-server src]# ls
echo-nginx-module-0.62 v0.62.tar.gz
1、未安裝nginx的情況下安裝第三方模塊
[root@nginx-server nginx-1.18.0]# ./configure \ #配置
> --prefix=/usr/local/nginx \ #指定安裝路徑
> --add-module=/usr/local/src/echo-nginx-module-0.62 #安裝第三方模塊
[root@nginx-server nginx-1.18.0]# make #編譯
[root@nginx-server nginx-1.18.0]# make install #安裝
[root@nginx-server nginx-1.18.0]# /usr/local/nginx/sbin/nginx #啟動nginx
2、已安裝nginx的情況下安裝第三方模塊
[root@nginx-server ~]# nginx -V #查看之前的安裝資訊
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/usr/local/nginx #這條便是上次安裝所配置的引數,可以復制使用哦!
[root@nginx-server nginx-1.18.0]# ./configure \ #重新進行編譯配置
> --prefix=/usr/local/nginx/ \
> --add-module=/usr/local/src/echo-nginx-module-0.62 #安裝第三方模塊
[root@nginx-server nginx-1.18.0]# make #編譯,切記沒有make install
[root@nginx-server nginx-1.18.0]# cp objs/nginx /usr/local/nginx/sbin/nginx #將編譯目錄下objs/nginx檔案直接覆寫老的 nginx檔案
cp:是否覆寫"/usr/local/nginx/sbin/nginx"? y
[root@nginx-server nginx-1.18.0]# /usr/local/nginx/sbin/nginx -s reload #多載nginx
??tips:重新編譯的時候,記得使用nginx -V查看之前的配置,把以前編譯過的模塊一同加到configure引數中,
二、平滑升級
1、什么是平滑升級?
??平滑升級是指在線上業務不停止的情況下,進行nginx的升級,nginx方便的幫助我們實作平滑升級,其程序簡單概括,就是:
????① 在不停掉老行程的情況下,啟動新行程,
????② 老行程負責處理任然沒有處理完的請求,但不在接受處理請求,
????③ 新行程接受新請求,
????④ 老行程處理完所有請求,關閉所有連接后停止,
????⑤ 這樣就很方便的實作了平滑升級,一般有兩種情況下需要升級nginx,一種是確實需要升級nginx的新版本,另一種是要為nginx添加新模塊,
2、信號的接受和處理
① 主行程支持的信號
| 信?號 | 解?釋 |
|---|---|
| TERM,INT | 立即退出 |
| QUIT | 等待作業行程結束后再退出 |
| KILL | 強制終止行程 |
| HUP | 重新加載組態檔,使用新的組態檔啟動行程,并逐步關閉舊行程 |
| USR1 | 重新打開日志檔案 |
| USR2 | 啟動新的主行程,實作熱升級 |
| WINCH | 逐步關閉作業行程 |
② 作業行程支持的信號
| 信?號 | 解?釋 |
|---|---|
| TERM,INT | 立即退出 |
| QUIT | 等待請求結束后在退出 |
| USR1 | 重新打開日志檔案 |
3、實體
??注:本篇以 Nginx-1.14.2 → Nginx-1.18.0 為例進行演示,
??① 處理防火墻
[root@nginx-server ~]# systemctl stop firewalld #關閉firewalld防火墻
[root@nginx-server ~]# systemctl disable firewalld #開機不自啟
[root@nginx-server ~]# setenforce 0 #關閉selinux防火墻(臨時生效)
[root@nginx-server ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #關閉selinux防火墻(永久生效,通常需要重啟生效,這里與臨時生效配合使用,相當于開機不自啟)
??② 編譯安裝nginx-1.14.2
#安裝依賴
[root@nginx-server ~]# yum install gcc-c++ openssl openssl-devel zlib zlib-devel pcre pcre-devel -y
#將rpm包下載到/usr/local/src/目錄下
[root@nginx-server ~]# cd /usr/local/src/ //進入/usr/local/src目錄下
[root@nginx-server src]# [root@localhost ~]# wget http://nginx.org/download/nginx-1.14.2.tar.gz //下載rpm包
#進行安裝前的準備
[root@nginx-server src]# groupadd -r nginx //創建nginx用戶組
[root@nginx-server src]# useradd -r -g nginx nginx //創建nginx用戶
[root@nginx-server src]# tar zxvf nginx-1.14.2.tar.gz -C /usr/local/src //解壓安裝包
#進行安裝
[root@nginx-server src]# cd nginx-1.14.2
[root@nginx-server src]# ./configure --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module //配置
[root@nginx-server nginx-1.14.2]# make && make install //編譯并安裝
#啟動nginx
[root@server03 nginx-1.14.2]# /opt/data/nginx/sbin/nginx
#查看是否啟動成功
[root@server03 nginx-1.14.2]# ps -ef | grep nginx
root 9783 1 0 16:54 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx 9784 9783 0 16:54 ? 00:00:00 nginx: worker process
root 9792 7097 0 16:54 pts/0 00:00:00 grep --color=auto nginx
??③ 查看已安裝nginx的版本及安裝模塊
[root@server03 nginx-1.14.2]# /opt/data/nginx/sbin/nginx -V
nginx version: nginx/1.14.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module
??④ 備份已安裝nginx檔案
[root@nginx-server ~]# cp /opt/data/nginx/sbin/nginx /opt/data/nginx/sbin/nginx_$(date '+%F')
[root@nginx-server ~]# cp /opt/data/nginx/conf/nginx.conf /opt/data/nginx/conf/nginx.conf_$(date '+%F')
??⑤ 模擬作業狀態
#用另一個終端進行腳本回圈測驗,讓nginx一直處于作業狀態
[root@server01 ~]# while true ;do curl 192.168.140.131 ;sleep 5 ;done
??⑥ 編譯安裝nginx-1.18.0
#將rpm包下載到/usr/local/src/目錄下
[root@nginx-server ~]# cd /usr/local/src/ //進入/usr/local/src目錄下
[root@nginx-server src]# wget http://nginx.org/download/nginx-1.18.0.tar.gz //下載rpm包
#進行安裝
[root@nginx-server src]# cd nginx-1.18.0
[root@nginx-server src]# ./configure --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module //配置
[root@nginx-server nginx-1.14.2]# make && make install //編譯并安裝
??⑦ 發送USR2信號
#向主行程發送USR2信號,Nginx會啟動一個新版本的Master行程和作業行程,和舊版本一起處理請求,
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root 9783 1 0 16:54 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx #主行程
nginx 9784 9783 0 16:54 ? 00:00:00 nginx: worker process
[root@nginx-server nginx-1.18.0]# kill -USR2 9783
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root 9783 1 0 16:54 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx 9784 9783 0 16:54 ? 00:00:00 nginx: worker process
root 12462 9783 0 17:11 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx 12463 12462 0 17:11 ? 00:00:00 nginx: worker process
??⑧ 發送WINCH信號
#向原Nginx主行程發送WINCH信號,它會逐步關閉其下的作業行程(主行程不退出),這時所有請求都會由新版本處理,
[root@nginx-server nginx-1.18.0]# kill -WINCH 9783
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep #原nginx的作業行程已經退出
root 9783 1 0 16:54 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
root 12462 9783 0 17:11 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx 12463 12462 0 17:11 ? 00:00:00 nginx: worker process
??⑨ 發送HUP信號(非必須,看情況)
#如果需要回滾操作,可向原Nginx主行程發送HUP信號,它會重新啟動作業行程,仍使用舊版本組態檔,然后可以將新版本Nginx行程殺死(使用QUIT,TERM,或者KIll)
??⑩ 殺死原Nginx主行程,升級結束
[root@nginx-server nginx-1.18.0]# kill 9783 #殺死原Nginx主行程
[root@nginx-server nginx-1.18.0]# ps -ef | grep nginx | grep -v grep
root 12462 1 0 17:11 ? 00:00:00 nginx: master process /opt/data/nginx/sbin/nginx
nginx 12463 12462 0 17:11 ? 00:00:00 nginx: worker process
[root@nginx-server nginx-1.18.0]# /opt/data/nginx/sbin/nginx -V #查看現在的Nginx版本
nginx version: nginx/1.18.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC)
configure arguments: --prefix=/opt/data/nginx --user=nginx --group=nginx --with-http_stub_status_module
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/142265.html
標籤:其他
上一篇:面試進階必備:JVM+Redis+設計模式+SpringBoot.pdf檔案資料
下一篇:LAMP平臺部署及論壇搭建
