一、Nginx的簡介
1. Nginx是什么
??Nginx(engine x)是一個具有高性能的【HTTP】和【反向代理】的【Web服務器】,同時也是一個【POP3/SMTP/IMAP代理服務器】,
-
HTTP:是超文本傳輸協議的縮寫,是用于從Web服務器傳輸超文本到本地瀏覽器的傳輸協議,也是互聯網上應用最為廣泛的一種網路協議,HTTP是一個客戶端和服務端請求和應答的標準,客戶端是終端用戶,服務端是網站,通過使用Web瀏覽器、網路爬蟲或其他工具,客戶端發起一個到服務端上指定埠的HTTP請求,
-
正向代理:替真正的client向server申請服務的是正向代理;正向代理是client的行為,目的是為了偽造出client身份,常用在代理ip的使用,
-
反向代理:替真正的server給client提供服務的是反向代理;反向代理是server方的行為,目標是偽造出server身份,反向代理常用于前臺nginx轉發后臺主服務器的架構,
-
Web服務器:也叫做網頁服務器,主要功能是為用戶提供網上資訊瀏覽服務,
-
POP3/SMTP/IMAP代理服務器:POP3(Post Offic Protocol 3)郵局協議的第三個版本;SMTP(Simple Mail Transfer Protocol)簡單郵件傳輸協議;IMAP(Internet Mail Access Protocol)互動式郵件存取協議,Nginx也可以作為電子郵件代理服務器,
2. Nginx的優點
- 速度更快、并發更高
單次請求或者高并發請求的環境下,Nginx都會比其它Web服務器回應的速度更快,Nginx之所以有這么高的并發處理能力和這么好的性能原因在于Nginx采用了多行程和I/O多路復用(epoll)的底層實作, - 配置簡單、擴展性強
Nginx的設計極具擴展性,它本身就是由很多模塊組成,這些模塊的使用可以通過組態檔的配置來添加,這些模塊有官方提供的也有第三方提供的模塊,如果需要完全可以開發服務于自己業務特性的定制模塊, - 高可靠性
Nginx采用的是多行程模式運行,其中有一個master主行程和多個worker行程,worker行程的數量可以手動設定,每個worker行程之間都是相互獨立提供服務,并且master主行程可以在某一個worker行程出錯時,快速去“拉起”新的worker行程提供服務, - 熱部署
互聯網專案需要以7*24小時進行服務的提供,針對于這一要求,Nginx也提供了熱部署功能,即可以在Nginx不停止的情況下,對Nginx進行檔案升級、更新配置和更換日志檔案等功能, - 開源
Nginx是開源的專案,因此可以免費的將其應用在商業領域,而且還可以在專案中直接修改Nginx的原始碼來定制自己的特殊要求,
二、環境準備
1. 獲取原始碼
??通過Nginx官網獲取相應的版本下載,

2. 準備服務器系統
- 確認centos的內核
準備一個內核為2.6及以上版本的作業系統,因為Linux2.6及以上內核才支持epoll,而Nginx需要解決高并發壓力問題時需要用到epoll,

- 確認關閉防火墻
建議關閉防火墻,可以省掉后續諸多問題, - 確認停用selinux
建議關閉selinux,可以省掉后續諸多問題,

如果不是disabled狀態,可以通過修改組態檔vim /etc/selinux/config來進行設定,修改SELINUX=disabled,然后重啟下系統即可生效,

3. Nginx安裝
??原始碼安裝方式需要提前執行yum install -y gcc pcre pcre-devel zlib zlib-devdl openssl openssl-devel這條命令,yum安裝不需要執行,
-
方案一:Nginx的原始碼簡單安裝

-
方案二:Nginx的原始碼復雜安裝
這種安裝方式和簡單安裝的區別在于通過./configure來對編譯引數進行設定./configure --prefix=/usr/local/nginx \ --sbin-path=/usr/local/nginx/sbin/nginx \ --modules-path=/usr/local/nginx/modules \ --conf-path=/usr/local/nginx/conf/nginx.conf \ --error-log-path=/usr/local/nginx/logs/error.log \ --http-log-path=/usr/local/nginx/logs/access.log \ --pid-path=/usr/local/nginx/logs/nginx.pid \ --lock-path=/usr/local/nginx/logs/nginx.lock命令 解釋 --prefix=PATH 指向Nginx的安裝目錄,默認值為/usr/local/nginx --sbin-path=PATH 指向(執行)程式檔案(nginx)的路徑,默認值為prefix+/sbin/nginx --modules-path=PATH 指向Nginx動態模塊安裝目錄,默認值為prefix+/modules --conf-path=PATH 指向組態檔(nginx.conf)的路徑,默認值為prefix+/conf/nginx.conf --error-log-path=PATH 指向錯誤日志檔案的路徑,默認值為prefix+/logs/error.log --http-log-path=PATH 指向訪問日志檔案的路徑,默認值為prefix+/logs/access.log --pid-path=PATH 指向Nginx啟動后行程ID的檔案路徑,默認值prefix+/logs/nginx.pid --lock-path=PATH 指向Nginx鎖檔案的存放路徑,默認值為prefix+/logs/nginx.lock -
方案三:yum安裝

nginx.repo
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true
4. Nginx的卸載
- 將nginx行程關閉:
./nginx -s stop - 將安裝的nginx進行洗掉:
rm -rf /usr/local/nginx - 如果設定了Nginx開機自啟的話,需要執行下面命令:
chkconfig nginx off和rm -rf /etc/init.d/nginx - yum清理:
yum remove nginx
三、目錄結構分析
1. 原始碼目錄結構
- 解壓Nginx的原始碼檔案后可以看到下面的結構:
目錄/檔案 解釋 auto 存放的是編譯相關的腳本 CHANGES 版本變更記錄 CHANGES.ru 俄羅斯文的版本變更記錄 conf Nginx默認的組態檔 configure Nginx軟體的自動腳本程式,作用為:檢測環境及根據環境檢測結果生成C代碼;生成編譯代碼需要的 Makefile檔案 contrib 存放的是幾個特殊的腳本檔案,其中README中對腳本有著詳細的說明 html 存放的是Nginx自帶的兩個html頁面,訪問Nginx的首頁和錯誤頁面 LICENSE 許可證的相關描述檔案 man Nginx的man手冊 README Nginx的閱讀指南 src Nginx的源代碼
2. Nginx的目錄結構
-
Nginx的目錄結構如下

主要目錄/檔案 解釋 conf Nginx所有組態檔目錄 mine.types 記錄的是HTTP協議中的Content-Type的值和檔案后綴名的對應關系 nginx.conf Nginx的核心組態檔 html 存放Nginx自帶的兩個html頁面 50x.html 訪問失敗后的失敗頁面 index.html 訪問成功后的默認首頁 logs 日志檔案存放地,當Nginx啟動后,這里會有acess.log、error.log和nginx.pid檔案 sbin 存放執行程式檔案nginx nginx 用來控制Nginx的啟動和停止等相關的命令
四、Nginx服務器啟停命令
??在學習Nginx啟停命令之前先簡單了解一下Nginx是如何作業的,
- Nginx的高性能和其架構模式有關,Nginx默認采用的是多行程的方式來作業的,當在組態檔中進行配置后Nginx即可以一個master行程和多個worker行程的方式來作業,
- master行程主要用來管理worker行程,包含接收外界的資訊并將接收到的資訊發送給各個worker行程,監控worker行程的狀態,當worker行程出現例外退出后,會自動重新啟動新的worker行程,
- worker行程是專門用來處理用戶請求的,各個worker行程之間是平等的且相互獨立,處理請求的機會也是一樣的,
1. Nginx服務的信號控制

??通過上面的Nginx的行程模型可以看出,我們作為管理員,只需要通過給master行程發送信號就可以來控制Nginx,這個時候我們需要有兩個前提條件,一個是要操作的master行程,一個是信號,
- 要想操作Nginx的master行程,就需要獲取到master行程的ID,可以通過以下兩種方式來獲取:
方式一:通過ps -ef|grep nginx命令獲取;
方式二:在上述關于Nginx的./configure的配置引數時,有一個引數是--pid-path=PATH默認是/usr/local/nginx/logs/nginx.pid,可以通過查看該檔案來獲取Nginx的master行程ID, - 呼叫命令為
kill -single PID信號 作用 TERM/INT 立即關閉整個服務 QUIT master行程會控制所有的worker行程不再接收新的請求,等所有請求處理完后,再把行程都關閉掉 HUP master行程會控制舊的worker不再接收新的請求,等處理完請求后將舊的worker行程關閉掉,然后根據Nginx的組態檔重新啟動新的worker行程 USR1 重新打開日志檔案,可以用來進行日志切割 USR2 告訴master要平滑升級,這時會重新開啟對應的master行程和worker行程,整個系統中將會有兩個master行程,并且新的master行程的PID會被記錄在 /usr/local/nginx/logs/nginx.pid,而之前舊的master行程PID會被記錄在/usr/local/nginx/logs/nginx.pid.oldbin檔案中,接著再次發送QUIT給舊的master行程,讓其處理完請求后進行關閉WINCH 所有worker不再接收處理新連接,相當于給worker行程發送QUIT指令,注意master行程不會被關閉
2. Nginx的命令列控制
??此方式是通過Nginx安裝目錄下的sbin下的可執行檔案nginx來進行Nginx狀態的控制,可以通過 ./nginx -h查看幫助,

五、Nginx配置
1. Nginx配置成系統服務
??把Nginx應用服務配置設定成系統服務,方便對Nginx服務的啟動和停止等相關操作,具體實作步驟為:
- 在/usr/lib/systemd/system目錄下添加nginx.service,內容如下:
nginx.service
[Unit]
Description=nginx web service
Documentation=http://nginx.org/en/docs/
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=default.target
- 添加完成后如果權限有問題需要進行權限設定
chmod 755 /usr/lib/systemd/system/nginx.service - 使用系統命令來操作Nginx服務
啟動:systemctl start nginx
停止:systemctl stop nginx
重啟:systemctl restart nginx
重新加載組態檔:systemctl reload nginx
查看nginx狀態:systemctl status nginx
開機啟動:systemctl enable nginx
2.nginx命令配置到系統環境
??在之前執行Nginx的相關命令時都需要進入到sbin目錄下去執行,很是麻煩,在此處可以通過將Nginx命令配置到系統環境中的方式來使得執行Nginx命令可以在任何目錄下進行,
- 修改/etc/profile檔案,在最后一行添加
export PATH=$PATH:/usr/local/nginx/sbin - 使之立即生效
source /etc/profile
六、Nginx的版本升級和新增模塊
??如果想對Nginx的版本進行更新或者應用新的模塊,最簡單的做法就是停止當前Nginx服務,然后開啟新的Nginx服務,但是這樣會導致在一段時間內用戶無法訪問服務器,為了解決這個問題就需要借助Nginx提供的平滑升級功能,這里有兩種方案可以完成不中斷Nginx服務的情況下進行升級,
- 環境準備
(1)先準備兩個版本的Nginx分別是1.14.2和1.16.1
(2)使用Nginx原始碼安裝的方式將1.14.2版本安裝成功并能正確訪問到Nginx頁面
(3)將Nginx1.16.1進行引數配置和編譯,不需要進行安裝(不需要執行make install) - 方案一:使用Nginx服務信號進行升級
(1)將1.14.2版本的sbin目錄下的nginx進行備份
(2)將Nginx1.16.1安裝目錄編譯后的objs目錄下的nginx檔案,copy到原來/usr/local/nginx/sbin目錄下
(3)發送信號USR2給nginx的1.14.2版本對應的master行程
(4)發送信號QUIT給nginx的1.14.2版本對應的master行程
(5)查看是否更新成功并在Nginx啟動情況下是否能正常訪問 - 方案二:使用Nginx安裝目錄的make命令完成升級
(1)將1.14.2版本的sbin目錄下的nginx進行備份
(2)將1.16.1安裝目錄編譯后的objs目錄下的nginx檔案copy到原來/usr/local/nginx/sbin目錄下
(3)進入安裝目錄,執行make upgrade
(4)查看是否更新成功并在Nginx啟動情況下是否能正常訪問
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499337.html
標籤:其他
上一篇:Java面向物件(六)
