環境:centos7 nginx1.16.1(原始碼安裝)
一、下載nginx原始碼包
地址:http://nginx.org/en/download.html
Mainline version(主線版本)Stable version(穩定版本)Legacy versions(傳統老版本)
下載穩定版:nginx-1.16.1.tar.gz
二、安裝相關依賴
gcc gcc-c++ zlib zlib-devel openssl openssl-devel pcre pcre-devel
gcc,gcc-c++ #c,c++編譯器,用來編譯安裝
zlib,zlib-devel #壓縮和解壓的函式庫,網頁檔案壓縮要用到它
openssl,openssl-devel #網路通信安全協議庫,包含眾多的密碼演算法、公鑰基礎設施標準以及SSL協議
三、安裝Nginx
(1).解包
[root@izm5e8nyz28va3a786y465z src]# tar -zxvf nginx-1.16.1.tar.gz
(2).編譯配置(進入到解壓的檔案夾)./configure --選項
./configure --prefix=/usr/local/nginx/ --sbin-path=/usr/local/nginx/sbin/ --conf-path=/usr/local/nginx/conf/ \
--error-log-path=/usr/local/nginx/logs/error.log --pid-path=/usr/local/nginx/run/nginx.pid --http-log-path=/usr/local/nginx/logs/access.log \
--http-client-body-temp-path=/usr/local/nginx/tmp/client/ --http-proxy-temp-path=/usr/local/nginx/tmp/proxy/ \
--http-fastcgi-temp-path=/usr/local/nginx/tmp/fcgi/ --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module \
--with-http_stub_status_module --with-http_realip_module --with-pcre --user=nginx --group=nginx
注意:1 若設定了用戶名,用戶組,則安裝前先創建用戶:useradd -M -s /sbin/nologin
2 若設定了檔案路徑,則先創建相關目錄,并將目錄用戶所有者,所屬組設為配置的值,路徑是目錄則最后以'/'結尾,以免出錯,
如 =/usr/local/nginx/conf/ 如果結尾沒/,conf會被當做檔案
1. 路徑配置(不設定則為默認路徑)
--prefix=/usr/local/nginx1.16.1 #nginx的安裝路徑,所有其它路徑都要依賴該選項
--sbin-path=/usr/sbin/nginx #指定nginx二進制檔案的路徑,不指定則:/usr/local/nginx/sbin/nginx
--conf-path=/etc/nginx/nginx.conf #nginx組態檔路徑,不指定則:/usr/local/nginx/conf/nginx.conf
--error-log-path=/var/log/nginx/error.log #nginx錯誤日志路徑,不指定則:/usr/local/nginx/logs/error.log
--pid-path=/var/run/nginx/nginx.pid #pid檔案路徑,不指定則:/usr/local/nginx/logs/nginx.pid
--http-log-path=/var/log/nginx/access.log #http訪問日志路徑
--http-client-body-temp-path=/var/tem/nginx/client #存盤客戶端請求主主體的臨時目錄
--http-proxy-temp-path=/var/tem/nginx/proxy #存盤代理服務器接收資料的臨時檔案
--http-fastcgi-temp-path=/var/tem/nginx/fcgi # 設定存盤HTTP fastcgi的臨時檔案的路徑
2.模塊配置
--http_v2_module #用于支持http2協議
--with-http_ssl_module #用于支持https協議
--with-http_flv_module #視頻直播模塊
--with-http_gzip_module #是nginx默認編譯的模塊,對網頁檔案壓縮
--with-http_gzip_static_module #加載gz靜態快取模塊,開啟后服務器優先回傳gz檔案
--with-http_stub_status_module #http服務狀態模塊
3. 其它功能啟用
--with-pcre #設定pcre庫原始碼路徑,若是yum安裝則是默認路徑不用寫,用以開啟對正則運算式支持
--with-openssl #啟用OpenSSL(安全套接字層密碼庫)啟用后可支持https,ssl證書
3.用戶,用戶組配置
--user=www #nginx作業行程的用戶名,默認:user為 nobody;
nobody 是系統用戶,是一個不能登陸的帳號,一個特殊用途的用戶 ID,uid<500一般都是系統ID
--group=www #nginx作業行程的用戶組,默認:group nogroup
nginx 只有一個主行程和多個作業行程,主行程主要讀取和評估組態檔正確性,以及管理作業行程
作業行程是真正的網路請求處理的行程
(3)編譯
make
(4)安裝
make install
四、nginx服務控制
1. 啟動nginx
[root@izm5e8nyz28va3a786y465z tmp]# nginx
nginx: [emerg] mkdir() "/var/tem/nginx/client" failed (2: No such file or directory)
原因:缺少這個檔案夾,nobody默認用戶沒有權限穿件這個檔案夾
創建:mkdir -p /var/tem/nginx/
修改所有者:chown nobody /var/tem/nginx/
之后,nginx能正常啟動
若要訪問到nginx主頁,則需要開放80埠,或直接關閉防火墻
關閉防火墻:(不推薦)
1. firewall-cmd --state #查看防火墻狀態,running / no running
2. systemctl stop firewalld.service #關閉防火墻
3. systemctl disable firewalld.service #禁止開機啟動
開放80埠:
1. firewall-cmd --list-port #查看開放的埠資訊
2. firewall-cmd --query-port=80/tcp #查看80埠是否開放
3. firewall-cmd --zone=public --add-port=80/tcp --permanent #開放80埠(--permanent永久生效)
4. firewall-cmd --reload #重啟防火墻
2. 服務控制
nginx指令官方檔案:https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/#upgrading-to-a-new-binary-on-the-fly
nginx服務在運行時,會保持一個主行程和一個或多個 worker process 作業行程,可以通過給Nginx服務的主行程發送信號來控制服務
2種發送信號的方式:
一、nginx二進制檔案自帶的命令(信號控制,向nginx主程式發送信號,執行相應的操作)
二、kill 命令(系統通過pid控制行程)
nginx命令:
注:如果沒有設定路徑,則要進入/usr/local/nginx/sbin/nginx/ 目錄后才能使用下列命令,否則無法識別nignx命令
nginx –s stop/start/reload/quit #/停止/啟動/重啟/請求結束后退出
nginx -t #檢測組態檔是否正確
nginx -V #查看編譯時配置資訊和版本號
nginx -v #查看nginx版本號
nginx -h #查看nginx命令幫助
nginx -p #設定nginx安裝路徑
nginx -c filename #用指定的組態檔啟動Nginx服務
nginx -g directives #nginx啟動時執行的指令
kill命令:kill single 主行程號 (實際使用中多用此種方式)
注:pid 可以通過cat /usr/local/nginx/logs/nginx.pid 命令查看(前提設定過pid位置),nginx對linux信號的處理如下: QUIT #停止服務(子行程全部結束后關閉主行程) TERM或INT #直接停止服務(不管子行程是否結束) HUP #平緩重啟(不多載組態檔) USR1 #重讀日志檔案 USR2 #平滑升級 常用組合命令: nginx -g -c conffile pid #以指定組態檔,平滑重啟,若啟動失敗,則以老的組態檔啟動nginx nginx -tc filename #檢測指定nginx組態檔,并啟動 kill -QUIT $(cat /usr/local/nginx1.16.1/logs/nginx.pid) #免去手動查詢pid 判斷nginx是否啟動的方式: 1. ps -ef |grep nginx //查看行程串列,過濾出nginx 2. 3. nginx平滑升級的實作相關解釋: 平滑重啟:當WorkerMan主行程收到平滑重啟信號時,主行程會向其中一個子行程發送安全退出(讓對應行程處理完畢當前請求后才退出)信號,當這個行程 退出后,主行程會重新創建一個新的子行程(這個子行程載入了新的PHP代碼),然后主行程再次向另外一個舊的行程發送停止命令,這樣一個行程一個行程的 重啟,直到所有舊的行程全部被置換為止,(只有子行程加載的檔案支持平滑重啟) 平滑升級:在不停止nginx服務,不丟失任何請求的情況下,更新nginx版本或服務模塊, 當需要更新nginx版本,nginx模塊時,可以進行平滑升級,實作步驟如下:
(1)用新的nginx二進制檔案(/usr/local/nginx/sbin)替換舊的 (2)kill -URS2 $(cat /usr/local/nginx1.16.1/logs/nginx.pid) #向nginx主行程發送USR2信號 nginx主行程接收到USR2信號,將nginx.pid改名為nginx.pid.oldbin,然后執行nginx啟動腳本,啟動一個新的nginx主行程和若干新作業行程 (3)kill -WINCH $(cat /usr/local/nginx1.16.1/logs/nginx.pid.oldbin) #優雅地結束舊行程的子行程
nginx主行程接收到WINCH信號,讓舊行程的子行程停止接受請求,并在完成請求后退出,舊行程的請求轉到新行程, (4)選擇使用新的nginx還是舊的nginx服務(如果新的不穩定可以退回舊的) 一段時間后,舊的子行程會全部退出,只保留舊的主行程和新nginx服務 a:選擇回到舊的nginx kill -HUP oldpid #舊的主行程開啟作業行程,啟動舊的nginx服務(不會重讀組態檔) kill -QUIT newpid #優雅停止新的nginx行程 當新的nginx主行程和作業行程全部停止后,nginx老的作業行程會改回原來的pid檔案,一切恢復到未升級狀態 b:選擇新的nginx行程 kill -QUIT oldpid #直接結束舊的nginx主行程就OK了
注意:如果新的nginx行程和舊的nginx安裝路徑不同,nginx -p newpath 指定新行程的啟動腳本位置后,再發送USR2信號,
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/156780.html
標籤:Linux
上一篇:Shell—各種括號的用法
下一篇:Rsync實作檔案的同步
