Devops實現之 nginx(一)

weixin_35688430發表於2020-09-25

1.手動安裝部署

1.0 檢查軟體安裝的系統環境

[root@web01 ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[root@web01 ~]# uname –r

3.10.0-693.2.2.el7.x86_64

安裝nginx的依賴包(pcre-devel openssl-devel)

yum install -y pcre-devel openssl-devel ###安裝依賴包

pcre:相容perl語言正規表示式,perl compatible regular expressions

rewirte模組 引數資訊(perl方式定義正規表示式)

openssl:ssh—openssh/openssl—https

總結:所有安裝依賴軟體,後面都要加上-devel

2.0 下載nginx軟體

wget http://nginx.org/download/nginx-1.10.2.tar.gz

解壓軟體

tar xf nginx-1.10.2.tar.gz

建立管理使用者 www

useradd -M -s /sbin/nologin www

3.0 nginx軟體編譯安裝過程

1、配置軟體,在軟體的解壓目錄中

[root@web01 nginx-1.10.2]# ./configure --prefix=/application/nginx-1.10.2
–user=www --group=www --with-http_stub_status_module --with-http_ssl_module

編譯引數說明:

官網查詢地址

–prefix 表示指定軟體安裝到哪個目錄中,指定目錄不存在會自動建立

–user/–group nginx工作程式由哪個使用者執行管理

–with-http_stub_status_module 啟動nginx狀態模組功能(使用者訪問nginx的網路資訊)

–with-http_ssl_module 啟動https功能模組

通過軟體編譯過程中的返回值是否正確,確認配置是否正確

[root@web01 nginx-1.10.2]# echo $?

0

2、編譯軟體

[root@web01 nginx-1.10.2]# make

3、編譯安裝

[root@web01 nginx-1.10.2]# make install

3.1.6 建立軟連線

[root@web01 application]# ln -s /application/nginx-1.10.2/ /application/nginx

3.1.7 精簡化nginx.conf 主配置檔案內容

[root@web01 conf]# egrep -v “#|^$” nginx.conf.default >nginx.conf

3.1.8 啟動程式

[root@web01 application]# /application/nginx/sbin/nginx

檢查是否啟動

[root@web01 application]# ps -ef |grep nginx

root 26548 1 0 20:13 ? 00:00:00 nginx: master process
/application/nginx/sbin/nginx

www 26549 26548 0 20:13 ? 00:00:00 nginx: worker process

root 26551 23431 3 20:13 pts/0 00:00:00 grep –color=auto nginx

檢查埠資訊

[root@web01 application]# netstat -lntup |grep 80

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 26548/nginx

服務部署完成

nginx命令簡化方法

echo ‘export PATH=/application/nginx/sbin:$PATH’ >>/etc/profile

source /etc/profile

which nginx

安裝後的nginx 目錄結構

[root@web01 nginx]# ll

total 36

drwxr-xr-x 2 root root 4096 Oct 21 19:34 conf #配置檔案儲存目錄

drwxr-xr-x 2 root root 4096 Oct 21 19:34 html #站點目錄

drwxr-xr-x 2 root root 4096 Oct 21 20:26 logs #nginx
服務相關日誌檔案儲存目錄(錯誤日誌訪問日誌)

drwxr-xr-x 2 root root 4096 Oct 21 19:34 sbin #
服務命令目錄(只有一個nginx檔案)

2.nginx軟體的編譯安裝常見錯誤說明

2.0.1 nginx軟體安裝過程中遇到的問題

軟體依賴包未正確安裝問題—PCRE依賴包沒有安裝

./configure: error: the HTTP rewrite module requires the PCRE library.

You can either disable the module by using –without-http_rewrite_module

option, or install the PCRE library into the system, or build the PCRE library

statically from the source with nginx by using –with-pcre= option.

解決方法:yum install pcre pcre-devel -y

軟體依賴包未正確安裝問題—OPENSSL依賴包沒有安裝

./configure: error: SSL modules require the OpenSSL library.

You can either do not enable the modules, or install the OpenSSL library

into the system, or build the OpenSSL library statically from the source

with nginx by using –with-openssl= option.

解決方法:yum install openssl openssl-devel -y

2.0.2 nginx軟體啟動過程中遇到的問題

nginx軟體重複啟動產生的錯誤資訊

[root@web01 nginx-1.10.2]# /application/nginx/sbin/nginx

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

nginx: [emerg] still could not bind()

解決方法:

nginx軟體已經啟動無需反覆啟動,如果需要重新啟動需要停止nginx程式或者用reload方式進行重啟

2.0.3 啟動 Nginx 時如下報錯“nginx:[emerg]getpwnam(“nginx”〉failed”

解答這是因為沒有對應的Nginx服務使用者,執行useradd
nginx-s/sbin/no丨ogin-M建立 Nginx

使用者即可。為了讓讀者理解問題,重現上述錯誤過程,命令如下:

[root@web01 tools]# pkill nginx

[root@web01 tools]# userdel nginx

[root@web01 tools]# /application/nginx/sbin/nginx

nginx: [emerg] getpwnam(Mnginx”) failed

[root@web01 tools]# useradd nginx -s /sbin/nologin -M

[root@web01 tools]# /application/nginx/sbin/nginx

2.0.4 編譯安裝pcre編譯軟體時,gcc不全導致報錯(本文使用yum安裝不存在此問題)。

報錯資訊如下:

[root@gjlin2 pcre-8.30]# make && make install

make all-am

make[l] : Entering directory 7home/gjlin/tools/pcre-8.30′

CXX pcrecpp.lo

libtool : compile : unrecognized option ‘-DHAVE_CONFIG_H’

libtool : compile : Try ‘libtool –help* for more information.

make[l】:*** [pcrecpp.lo】錯誤 1

make[l] : Leaving directory Vhome/gjlin/tools/pcre-8.30′

make : *** [all]錯誤 2

解答:執行“yum -y install gcc-c++”命令安裝gcc-c++依賴包。

2.0.5 nginx軟體編譯安裝後,看不到程式目錄(/application)

說明:編譯安裝步驟不對(配置 編譯 編譯安裝生成/appliation)

2.0.6 nginx軟體排查問題三部曲說明

  a 在客戶端上ping伺服器端IP,檢查鏈路是否通暢

  b 在客戶端上telnet伺服器端IP、埠,檢查鏈路訪問是否通暢

  c 在客戶端上wget檢測模擬頁面訪問是否正常

2.0.7 【注意】403狀態碼出現情況原因

  1. 服務阻止客戶端訪問

  2. 服務端站點目錄中,沒有指定首頁檔案資訊

3.nginx軟體使用命令引數

官網地址:http://nginx.org/en/docs/switches.html

3.0.1 nginx 啟動方法

[root@web01 application]# /application/nginx/sbin/nginx

3.0.2 nginx 停止方法

[root@web01 application]# /application/nginx/sbin/nginx -s stop

3.0.3 nginx 重啟方法 (平滑重啟)

[root@web01 application]# /application/nginx/sbin/nginx -s reload

3.0.4 檢查配置檔案語法是否正確

[root@web01 application]# /application/nginx/sbin/nginx -t

nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax
is ok

nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test is
successful

3.0.5 顯示配置引數 -V (大寫V)

[root@web01 application]# /application/nginx/sbin/nginx -V

nginx version: nginx/1.10.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: –prefix=/application/nginx-1.10.2 –user=www –group=www
–with-http_stub_status_module –with-http_ssl_module

3.0.6 nginx軟體使用過程中深入說明

①. nginx軟體語法檢查方法:

nginx -t

②. nginx軟體訪問測試過程:

curl -v www.baidu.com

③. nginx軟體編譯引數檢視:

nginx -V <— 檢視原有的編譯引數資訊

4.設定nginx開機自啟動(centos7.x)

第一步:進入到/lib/systemd/system/目錄

[root@iz2z init.d]# cd /lib/systemd/system/

第二步:建立nginx.service檔案,並編輯

# vim nginx.service

內如如下:

Unit

Description=nginx service

After=network.target

[Service]

Type=forking

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/local/nginx/sbin/nginx -s reload

ExecStop=/usr/local/nginx/sbin/nginx -s quit

PrivateTmp=true

[Install]

WantedBy=multi-user.target

Description:描述服務

After:描述服務類別

[Service]服務執行引數的設定

Type=forking是後臺執行的形式

ExecStart為服務的具體執行命令

ExecReload為重啟命令

ExecStop為停止命令

PrivateTmp=True表示給服務分配獨立的臨時空間

注意:[Service]的啟動、重啟、停止命令全部要求使用絕對路徑

[Install]執行級別下服務安裝的相關設定,可設定為多使用者,即系統執行級別為3

儲存退出。

第三步:加入開機自啟動

# systemctl enable nginx

如果不想開機自啟動了,可以使用下面的命令取消開機自啟動

# systemctl disable nginx

第四步:服務的啟動/停止/重新整理配置檔案/檢視狀態

# systemctl start nginx.service  啟動nginx服務

# systemctl stop nginx.service  停止服務

# systemctl restart nginx.service  重新啟動服務

# systemctl list-units --type=service 檢視所有已啟動的服務

# systemctl status nginx.service 檢視服務當前狀態

# systemctl enable nginx.service 設定開機自啟動

# systemctl disable nginx.service 停止開機自啟動

一個常見的錯誤

Warning: nginx.service changed on disk. Run ‘systemctl daemon-reload’ to reload
units.

直接按照提示執行命令systemctl daemon-reload 即可。

5.Nginx的平滑升級

1、檢視原先系統Nginx版本和編譯引數並記錄

[root@localhost ~]# nginx -v

nginx version: nginx/1.13.12

[root@localhost ~]# nginx -V

nginx version: nginx/1.13.12

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)

configure arguments: --with-http_realip_module --with-http_sub_module
–with-http_gzip_static_module --with-http_stub_status_module
–with-http_addition_module --with-http_xslt_module --with-pcre

2、下載最新版本Nginx並解壓

[root@localhost ~]# wget http://nginx.org/download/nginx-1.14.1.tar.gz

–2018-11-15 02:24:36-- http://nginx.org/download/nginx-1.14.1.tar.gz

Resolving nginx.org (nginx.org)… 95.211.80.227, 206.251.255.63,
2001:1af8:4060:a004:21::e3, …

Connecting to nginx.org (nginx.org)|95.211.80.227|:80… connected.

HTTP request sent, awaiting response… 200 OK

Length: 1014040 (990K) [application/octet-stream]

Saving to: ‘nginx-1.14.1.tar.gz’

100%[==================================================================================================================================>]
1,014,040 117KB/s in 7.6s

2018-11-15 02:24:44 (130 KB/s) - ‘nginx-1.14.1.tar.gz’ saved [1014040/1014040]

[root@localhost ~]# tar -zxf nginx-1.14.1.tar.gz

3、編譯Nginx 1.14.1

[root@localhost ~]# cd nginx-1.14.1

[root@localhost nginx-1.14.1]# ./configure --with-http_realip_module
–with-http_sub_module --with-http_gzip_static_module
–with-http_stub_status_module --with-http_addition_module
–with-http_xslt_module --with-pcre

[root@localhost nginx-1.14.1]# make #到make這一步即可,不需要執行make install

4、備份原來的nginx啟動指令碼

[root@localhost nginx-1.14.1]# cd /usr/local/nginx/sbin/

[root@localhost sbin]# mv nginx nginx_old

5、拷貝nginx-1.14.1目錄下的obj目錄下的nginx到nginx的sbin目錄下

[root@localhost sbin]# cp /root/nginx-1.14.1/objs/nginx /usr/local/nginx/sbin/

6、回到nginx-1.14.1目錄下執行make upgrade

[root@localhost sbin]# cd /root/nginx-1.14.1

[root@localhost nginx-1.14.1]# make upgrade
#這一步會將結束舊程式,並開啟新的程式進行管理nginx的任務,從而達到平滑升級的效果

/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

sleep 1

test -f /usr/local/nginx/logs/nginx.pid.oldbin

kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

這裡需要注意的是,使用make
upgrade進行平滑升級時,會預設傳送USR2訊號到/usr/local/nginx/logs/nginx.pid,但是如果你的pid檔案位置不一致,就會出現檔案不存在的ERROR

而我們需要做的是,放棄使用make
upgrade,而是直接使用以下命令,假設nginx.pid的路徑為:/var/run/nginx.pid

[root@localhost nginx-1.14.1]# /usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost nginx-1.14.1]# kill -USR2 `cat /var/run/nginx.pid`

此時會在/var/run/下生成一個nginx.pid.oldbin的pid檔案

[root@localhost nginx-1.14.1]# kill -QUIT `cat /var/run/nginx.pid.oldbin`
#退出舊程式

7、檢視nginx的最新版本

[root@localhost nginx-1.14.1]# nginx -v

nginx version: nginx/1.14.1

[root@localhost nginx-1.14.1]# nginx -V

nginx version: nginx/1.14.1

built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)

configure arguments: --with-http_realip_module --with-http_sub_module
–with-http_gzip_static_module --with-http_stub_status_module
–with-http_addition_module --with-http_xslt_module --with-pcre

Nginx1.12升級到Nginx1.16穩定版本

環境說明

伺服器中最開始使用的是Nginx1.3.14版本,目前正在執行Nginx1.12版本,現在想將當前執行的Nginx服務的版本進行升級到最新的穩定版,(從1.12升級到1.16,版本的跨度不要太大,容易造成服務的崩潰),且在服務不停止的前提下經行升級。

1. 在不停掉老程式的情況下,啟動新程式。

2. 老程式負責處理仍然沒有處理完的請求,但不再接受處理請求。

3. 新程式接受新請求。

4. 老程式處理完所有請求,關閉所有連線後,停止。

實現步驟:

1、獲取nginx的安裝目錄

[root@XiaoFeng logs]# ps -ef | grep nginx | grep master | awk -F" "
‘{print $11}’

/usr/local/nginx/sbin/nginx

2、檢視升級之前的nginx版本,同時獲取舊nginx版本的編譯引數

[root@XiaoFeng sjd]# /usr/local/nginx/sbin/nginx -V #注意是大寫的V

nginx version: nginx/1.12.2

built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)

built with OpenSSL 1.0.1e-fips 11 Feb 2013

TLS SNI support enabled

configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx/
–with-http_v2_module --with-http_ssl_module --with-http_sub_module
–with-http_stub_status_module --with-http_gzip_static_module --with-pcre
–with-http_realip_module

3、到官網下載1.16.0版本的nginx (下載地址:http://nginx.org/en/download.html)

[root@XiaoFeng sjd]# wget http://nginx.org/download/nginx-1.16.0.tar.gzCopy

4、解壓下載好的檔案,並進入資料夾進行編譯(只編譯不安裝)

[root@XiaoFeng sjd]# tar xf nginx-1.16.0.tar.gz

[root@XiaoFeng sjd]# cd nginx-1.16.0

[root@XiaoFeng nginx-1.16.0]# ./configure --user=nginx --group=nginx
–prefix=/usr/local/nginx/ --with-http_v2_module --with-http_ssl_module
–with-http_sub_module --with-http_stub_status_module
–with-http_gzip_static_module --with-pcre --with-http_realip_module

[root@XiaoFeng nginx-1.16.0]# make

5、備份舊版本的nginx的執行程式

[root@XiaoFeng nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx12.old

6、替換舊的Nginx的執行程式

[root@XiaoFeng nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/

[root@webserver nginx-1.16.0]# cd /usr/local/nginx/sbin/

[root@XiaoFeng sbin]# ls

nginx nginx12.old nginx.old

7、傳送USR2訊號給舊版本主程式號,使nginx的舊版本停止接收請求,用nginx新版本接替,且老程式處理完所有請求,關閉所有連線後,停止

[root@webserver sbin]# cd …

[root@webserver nginx]# cd logs/

[root@XiaoFeng logs]# ls

access.log error.log nginx.pid shunjie.access.log

[root@XiaoFeng logs]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

8、檢視nginx pid目錄,多了個nginx.pid.oldbin檔案,存放了舊版本nginx的pid號

[root@XiaoFeng logs]# ls

access.log error.log nginx.pid nginx.pid.oldbin

#檢視服務執行狀態

[root@XiaoFeng logs]# netstat -aupt | grep nginx

tcp 0 0 *:http *? LISTEN 793/nginx

9、從容關閉舊程式

[root@XiaoFeng logs]# kill -QUIT `cat nginx.pid.oldbin`

[root@XiaoFeng logs]# ls

access.log error.log nginx.pid shunjie.access.log

10、檢視升級後的版本

[root@XiaoFeng logs]# /usr/local/nginx/sbin/nginx -v

nginx version: nginx/1.16.0

平滑升級完畢!

附:如果是yum安裝的nginx,升級就很簡單了,直接yum update
nginx即可安裝到倉庫有的最新版,不過通常庫更新的比較慢。

rpm包安裝的話,就直接rpm -Uvh nginx-1.16.0.rpm即可

6.Nginx新增Lua擴充套件模組

編譯安裝LuaJIT

wget http://luajit.org/download/LuaJIT-2.0.4.tar.gz

tar xf LuaJIT-2.0.4.tar.gz

cd LuaJIT-2.0.4

make PREFIX=/usr/local/luajit

make install PREFIX=/usr/local/luajit

下載擴充套件模組

cd /usr/local/src/

wget https://github.com/simpl/ngx_devel_kit/archive/v0.3.0.tar.gz

tar -xf v0.3.0.tar.gz

wget https://github.com/openresty/lua-nginx-module/archive/v0.10.8.tar.gz

tar xf v0.10.8.tar.gz

編輯安裝nginx

yum groupinstall -y “Development Tools”

yum install -y libxml2-devel curl-devel pcre-devel openssl-devel siege
traceroute vim openssl

cd /usr/local/src

wget http://nginx.org/download/nginx-1.10.3.tar.gz

export LUAJIT_LIB=/usr/local/luajit/lib

export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

tar xf nginx-1.10.3.tar.gz && cd nginx-1.10.3

./configure \

–prefix=/usr/local/nginx-1.10.2 \ # nginx安裝目錄

–with-http_ssl_module \ # 支援 SSL

–with-http_stub_status_module \ # nginx狀態模組

–add-module=/usr/local/src/ngx_devel_kit-0.3.0 \ # lua模組

–add-module=/usr/local/src/lua-nginx-module-0.10.8 # lua擴充套件模組

make && make install

mkdir /usr/local/nginx-1.10.2/conf/vhost

ln -s /usr/local/nginx-1.10.3/sbin/nginx /bin/nginx

重新編譯nginx

# 檢視之前的編譯引數

nginx -V

# 設定環境變數

export LUAJIT_LIB=/usr/local/luajit/lib

export LUAJIT_INC=/usr/local/luajit/include/luajit-2.0

# 進入原始碼包目錄

cd /opt/software/nginx-1.10.2/

./configure \

–prefix=/usr/local/nginx-1.10.2 \ # nginx安裝目錄

–with-http_ssl_module \ # 支援 SSL

–with-http_stub_status_module \ # nginx狀態模組

–add-module=/usr/local/src/ngx_devel_kit-0.3.0 \ # lua模組

–add-module=/usr/local/src/lua-nginx-module-0.10.8 # lua擴充套件模組

make

make install

遇到的報錯:

# nginx -t

nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open
shared object file: No such file or directory

# 解決: 查詢檔案,建立軟連線
find / -name “libluajit-5.1.so.2”

ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/

第一個lua指令碼

在server塊中新增

location /lua {

default_type ‘text/html’;

content_by_lua_file conf/lua/test.lua;    # 相對於nginx安裝目錄

}

# 編寫lua指令碼

[root@yunwei-test conf]# pwd

[root@yunwei-test conf]# /usr/local/nginx-1.10.2/conf

[root@yunwei-test conf]# mkdir lua && cd lua

[root@yunwei-test conf]# vim test.lua

ngx.say(“hello world”);

# 啟動nginx

[root@yunwei-test conf]# nginx -t

[root@yunwei-test conf]# nginx

瀏覽器訪問:10.0.3.56/lua

顯示 hello world,表示正常

nginx + lua獲取url請求引數

有個需求就是獲取 url 中 clientId

引數的值,根據clientid中的引數upstream到不同伺服器,url有GET和POST請求。

程式碼如下:

upstream sdk_proxy {

server 127.0.0.1:188;

keepalive 64;

}

upstream default_sdk {

server 127.0.0.1:288;

keepalive 64;

}

server {

listen 6443;

server_name 127.0.0.1;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

location / {

default_type text/plain;

access_by_lua ’

local request_method = ngx.var.request_method

local clientids = {“112”,“113”,“114”}

if (request_method == “GET”) then

local arg = ngx.req.get_uri_args()[“clientId”] or 0

for i,clientid in ipairs(clientids) do

if (arg == clientid) then

ngx.exec("@sdk")

end

end

elseif (request_method == “POST”) then

ngx.req.read_body()

local arg = ngx.req.get_post_args()[“clientId”] or 0

for i,clientid in ipairs(clientids) do

if (arg == clientid) then

ngx.exec("@sdk")

end

end

end

';

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_pass http://default_sdk;

}

location @sdk {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_pass http://sdk_proxy;

}

}

7.自動化安裝指令碼

#!/bin/bash

# info : 執行時 後面更上升級的壓縮包名(sh ngxup.sh nginx-1.18.0.tar.gz)

myfile=$1 # 定義升級時所需的版本壓縮包名

date=`date +%Y%m%d%H%M%S` # 獲取當前系統日期

pid=`ps aux | grep -Ev “grep|$0” | grep nginx: | awk ‘NR==1{print $2}’`
# 獲取當前執行 nginx 的 PID

nginxpath=`ls -l /proc/$pid/cwd 2>1 | awk ‘{print $NF}’` # 通過 PID
獲取安裝目錄

ck_status(){

if [ $? -eq 0 ];then

echo ‘正在進行,請稍等。。。’

else

echo ‘失敗,請檢視日誌( ~/nginx_up.log 升級日誌,~/nginx_install.log
安裝日誌,~/nginx_add.log 新增模組日誌)’

fi

} # 狀態檢查函式

jys(){

cd /tmp/

if [ ! -f $myfile ];then

echo “請將升級壓縮包放在 /tmp 目錄下”

else

read -p ‘請指定安裝目錄:’ path

tar -xf $myfile -C $path

fi

} # 升級版本判斷包和解壓縮函式

file_if(){ # 判斷當期環境是否存在 nginx 函式

if [ ! -n “$pid” ];then # 如果不存在則進行安裝

read -p “沒有檢測到 nginx 程式是否安裝[Y/n]?” x

case $x in

[yY][eE][sS]|[yY])

mkdir $path/nginx # 以下為安裝流程

newyspath=`tar -tf $myfile | head -1`

cd $newyspath

./configure --prefix=$path/nginx --with-http_stub_status_module
–with-http_ssl_module >> ~/nginx_install.log

ck_status

make >> ~/nginx_install.log && make install >> ~/nginx_install.log

ck_status && echo “安裝完成”

;;

[yY][eE][sS]|[yY])

echo “退出指令碼”

exit

;;

esac

else # 存在則進行升級

ngx_up

versionif

fi

}

ngx_up(){ # nginx 升級指令碼

yspath=`tar -tf $myfile | head -1` # 獲取解壓縮目錄

cd $yspath # 以下為升級流程

./configure --prefix=$nginxpath --with-http_stub_status_module
–with-http_ssl_module >> ~/nginx_up.log

ck_status

make >> ~/nginx_up.log

ck_status

mv $nginxpath/sbin/nginx $nginxpath/sbin/nginx$date

cp objs/nginx $nginxpath/sbin/

make upgrade >> ~/nginx.up.log

#ck_status

cd $nginxpath && oldversion=`./sbin/nginx-bak -V 2>&1 | awk -F":"
‘NR==1{print $2}’`

}

versionif(){

cd $nginxpath # 版本判斷函式,升級之前同升級之後版本號是否相同

version=`./sbin/nginx -V 2>&1 | awk -F":" ‘NR==1{print $2}’`

if [ $version != $oldversion ];then

echo “升級成功”

else

echo “升級失敗”

fi

}

ngx_add(){ # nginx 新增 nginx 自帶模組

read -p ‘請輸入 nginx 編譯路徑:’ inpath # 輸入獲取 nginx
的編譯目錄(解壓縮目錄)

cd $inpath # 以下為新增流程

read -p ‘請輸入重新編譯的引數(如:–prefix=/home/nginx
–with-http_stub_status_module --with-http_ssl_module):’ cs #
獲取要新增的模組選項

./configure --prefix=$nginxpath $cs >> ~/nginx_add.log

ck_status

make >> ~/nginx_add.log

ck_status

mv $nginxpath/sbin/nginx $nginxpath/sbin/nginx$date

cp $inpath/objs/nginx $nginxpath/sbin/

}

read -p “請選擇執行操作(輸入序號): 1.安裝nginx,2.新增模組,3.升級版本:” i #
相當於主

case $i in

“1”)

jys

file_if

;;

“2”)

ngx_add

;;

“3”)

jys

file_if

;;

esac

相關文章