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時要注意對執行緒函式的...