Devops實現之 nginx(一)
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狀態碼出現情況原因
-
服務阻止客戶端訪問
-
服務端站點目錄中,沒有指定首頁檔案資訊
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
內如如下:
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
相關文章
- CODING DevOps + Nginx-ingress 實現自動化灰度釋出devNginx
- .Net微服務實戰之DevOps篇微服務dev
- 微服務筆記29:實現DevOps微服務筆記dev
- Kubernetes實戰總結 - DevOps實現(轉載)dev
- 從零手寫實現 nginx-03-nginx 基於 Netty 實現NginxNetty
- 你問我答:DevOps完美實現一定要用容器嗎?dev
- Nginx實現請求的負載均衡 + keepalived實現Nginx的高可用Nginx負載
- Devops 原始思想 所要實現的目標dev
- Nginx實現URL重寫Nginx
- nginx 如何實現 if 巢狀Nginx巢狀
- Nginx 實現 Rewrite 跳轉Nginx
- nginx實現keepalived高可用Nginx
- nginx實現負載均衡Nginx負載
- Nginx-正向代理實現Nginx
- nginx實現平滑升級Nginx
- keepalived + nginx 實現高可用Nginx
- 快速指南:在DevOps中實現持續交付dev
- Azure DevOps (三) 實現和Jenkins的聯動devJenkins
- DevOps 如何幫助實現安全部署dev
- nginx實現常見場景Nginx
- Nginx&Keepalived 實現高可用Nginx
- Nginx反向代理實現跨域Nginx跨域
- Nginx實現原理master和workerNginxAST
- DevOps實戰dev
- DevOps實踐dev
- nginx 實現實用的灰度釋出Nginx
- DevOps最佳實踐之應用開發和部署dev
- Nginx 高階篇(一)反向代理實現動靜分離Nginx
- NGINX LDAP參考實現中的零日漏洞 - nginxNginxLDA
- Azure Data Factory(三)整合 Azure Devops 實現CI/CDdev
- 實現更好DEVOPS,關鍵取決於資料dev
- Java常用中介軟體之 NGINX實現限流功能的官方文件說明JavaNginx
- nginx使用replace-filter-nginx-module實現內容替換NginxFilter
- Linux下玩轉nginx系列(五)---nginx實現負載均衡LinuxNginx負載
- Linux下玩轉nginx系列(七)---nginx如何實現限流功能LinuxNginx
- nginx實現檔案伺服器Nginx伺服器
- nginx+tomcat實現負載均衡NginxTomcat負載
- Nginx(五):http反向代理的實現NginxHTTP