Nginx技術要點總結

2021-10-05 10:57:57 字數 3307 閱讀 2595

nginx("engine x") 是目前使用最廣泛的web伺服器,同時也是常用的反向**伺服器。本文對nginx基礎功能做一些總結,希望自己加深理解的同時,對需要的朋友有所幫助。

二.nginx的工作模式

nginx是乙個多程序/多執行緒高效能web伺服器,在linux系統中,nginx啟動後會以後臺守護程序(daemon)的方式去執行,後台程序包含乙個master程序和多個worker程序(這個數量可以在nginx.conf配置檔案中worker_processes這個引數設定),可以充分利用多核架構。nginx工作模式是以多程序的方式來工作的,當然nginx也是支援多執行緒的方式的,只是我們主流的方式還是多程序的方式,也是nginx的預設方式。nginx在啟動之後會有乙個master程序和多個worker程序(預設是乙個),多個worker子程序將監聽同乙個埠,並行處理請求。

master主程序主要用來管理worker程序,主要作用是:讀取並驗正配置資訊,管理真正提供服務的worker程序,向各worker程序傳送訊號,監控worker程序的執行狀態,當worker程序退出後(異常情況下),會自動重新啟動新的worker程序。master程序不會對使用者請求提供服務,而使用者的請求則是worker程序來響應的。

worker 程序數應該設定為等於 cpu 的核數(cpu數*核數),高流量併發場合也可以考慮將程序數提高至 cpu 核數 * 2。

三.nginx的訊號控制

nginx是通過linux系統訊號量來控制的。

nginx支援以下幾種訊號選項:

具體語法:

kill -訊號選項 nginx的主程序號

kill -hup 4873

nginx的主程序號,每次查詢有點麻煩。其實nginx會通過nginx.pid檔案記錄主程序號,可以使用如下統一的語法簡化上述操作:

kill -訊號控制 `cat /***/path/log/nginx.pid`

nginx也可以使用./sbin/nginx -s 命令選項,來傳送訊號量。命令方式使用簡單,但沒有直接使用訊號量豐富。

命令選項包括:stop、quit、reopen、reload

四.nginx日誌

1.nginx允許針對不同的虛擬主機server做不同的日誌。

2.nginx日誌切割和備份

將日誌按日期進行切割和備份是常見的運維操作,但nginx日誌不能簡單進行複製操作實現。

在linux中,乙個檔案對應乙個節點叫inode, inode才是檔案在磁碟上真正的位置,而檔名只是表象。

linux系統允許多個檔名可以指向同乙個inode號碼。這意味著,可以用不同的檔名訪問同樣的內容;對檔案內容進行修改,會影響到所有檔名;但是,刪除乙個檔名,不影響另乙個檔名的訪問。這種情況就被稱為"硬鏈結"(hard link)。

由於日誌檔案一直被nginx程序開啟,所以即使使用mv命令改名並新建了同名的新檔案,nginx程序還是開啟原來的檔案描述符指向原來的磁碟空間(node),還是向原來的檔案中寫入。即使執行檔案刪除命令還是向原來的磁碟空間寫入。因此要實現日誌備份、切割等操作,需要使用nginx的usr1訊號量進行操作。

具體指令碼:

#!/bin/bash

base_path='/usr/local/nginx/logs'

log_path=$(date -d yesterday +"%y%m")

day=$(date -d yesterday +"%d")

mkdir -p $base_path/$log_path

mv $base_path/access.log $base_path/$log_path/access_$day.log

#echo $base_path/$log_path/access_$day.log

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

這裡順便說一下軟連線。除了硬鏈結以外,還有一種特殊情況。檔案a和檔案b的inode號碼雖然不一樣,但是檔案a的內容是檔案b的路徑。讀取檔案a時,系統會自動將訪問者導向檔案b。因此,無論開啟哪乙個檔案,最終讀取的都是檔案b。這時,檔案a就稱為檔案b的"軟鏈結"(soft link)或者"符號鏈結(symbolic link)。這意味著,檔案a依賴於檔案b而存在,如果刪除了檔案b,開啟檔案a就會報錯:"no such file or directory"。這是軟鏈結與硬鏈結最大的不同:檔案a指向檔案b的檔名,而不是檔案b的inode號碼,檔案b的inode"鏈結數"不會因此發生變化。

五.location的解析過程

location 是」定位」的意思, 根據uri來進行不同的定位。

location 的語法

location [=|~|~*|^~] patt

中括號可以不寫任何引數,此時稱為一般匹配,也可以寫引數

因此,大型別可以分為3種

location = patt {} [精準匹配]

location patt{}  [一般匹配]

location ~ patt{} [正則匹配]

location的命中過程是這樣的:

1.先判斷精準匹配,如果命中,立即返回結果並結束解析過程。

2.判斷普通匹配,如果有多個命中,記錄下最長匹配的命中結果,只是記錄但不結束。

3.繼續判斷正則匹配的解析結果,按配置檔案的先後順序為準。由上向下開始匹配,如果匹配成功立即返回並結束解析過程。如果沒有命中則返回普通匹配記錄的命中結果。

注意:普通匹配,順序無所謂,按匹配的長短來確定。正則匹配,按配置的先後順序,由上向下開始匹配。

六.rewrite重寫

rewrite重寫功能是nginx服務的乙個非常重要的功能模組,其可以重新修改網域名稱,為企業將動態的url位址偽裝成靜態的位址等。 

1.rewrite語法

rewrite 正規表示式 定向後的位置 模式

例如:將goods-3.html頁面,重寫到id=3的後端程式 goods.php?goods_id=3

rewrite goods-([\d]+)\.html$ /ecshop/goods.php?id=$1; 

注意:用url重寫時, 正則裡如果有」{}」,正則要用雙引號包起來。

2.伺服器內部的rewrite和302跳轉不一樣。302跳轉url變成重新http請求, 而內部rewrite, 上下文沒變。就是說 fastcgi_script_name 仍然是原來的內容。因此要考慮迴圈重定向問題,在需要的地方使用break指令.

七.其它

1.如果頁面或其它靜態檔案做了改動,有時客戶端瀏覽器快取而沒有及時重新整理最新**。為了保證客戶端瀏覽器及時更新最新**,可以通過nginx設定不使用快取。在server段增加以下設定:

add_header cache-control no-cache;

shell技術要點總結!

shell俗稱是 殼 區別於 核 它在linux的系統命令操作中扮演者非常重要的角色。達妹今天為大家系統整理下shell的技術要點。1.學習shell主要在於用,關鍵要靠上機操作。2.單引號 雙引號 括號 花括號及反引號 單引號內所有元字元都失去特殊含義 包括 雙引號內除了變數域 和命令域 以外的元...

mysql的技術要點 Mysql 鎖技術要點

myisam和innodb的區別 mysql預設採用的是myisam。myisam不支援事務,而innodb支援。innodb的autocommit預設是開啟的,即每條sql語句會預設被封裝成乙個事務,自動提交,這樣會影響速度,所以最好是把多條sql語句顯示放在begin和commit之間,組成乙個...

C 實現遠端注入DLL技術要點總結

現將遠端注入dll的實現方法總結如下 steps 2.為你要操作控制的proc 這裡成為目標proc new乙個執行緒,使用windows中的handle createremotethread 具體使用查閱msdn,有很好的說明 但是,在使用createremotethread時要注意對執行緒函式的...