nginx應用技術第二版

紫翼龍王夜發表於2015-02-13
原文: http:///html/85/t-1685.html
目 錄 
一、        Nginx 基礎知識 
二、        Nginx 安裝及除錯 
三、        Nginx Rewrite 
四、        Nginx Redirect 
五、        Nginx 目錄自動加斜線: 
六、        Nginx Location 
七、        Nginx expires 
八、        Nginx 防盜鏈 
九、        Nginx 訪問控制 
十、        Nginx日誌處理 
十一、     Nginx Cache 
十二、      Nginx負載均衡 
十三、        Nginx簡單最佳化        
十四、        如何構建高效能的LEMP環境 
十五、        Nginx服務監控 
十六、        常見問題與錯誤處理. 
十七、        相關資源下載 
一、 Nginx 基礎知識 
1、簡介 
   Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,它已經在該站點執行超過兩年半了。Igor 將原始碼以類BSD許可證的形式釋出。儘管還是測試版,但是,Nginx 已經因為它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名了。 
更多的請見官方wiki:  
 

2、 Nginx的優點 
nginx做為HTTP伺服器,有以下幾項基本特性: 
1)        處理靜態檔案,索引檔案以及自動索引;開啟檔案描述符緩衝. 
2)        無快取的反向代理加速,簡單的負載均衡和容錯. 
3)        FastCGI,簡單的負載均衡和容錯. 
4)        模組化的結構。包括gzipping, byte ranges, chunked responses, 以及 SSI-filter等filter。如果由FastCGI或其它代理伺服器處理單頁中存在的多個SSI,則這項處理可以並行執行,而不需要相互等待。 
5)        支援SSL 和 TLS SNI. 

Nginx專為效能最佳化而開發,效能是其最重要的考量, 實現上非常注重效率 。它支援核心Poll模型,能經受高負載的考驗, 有報告表明能支援高達 50,000 個併發連線數。 
Nginx具有很高的穩定性。其它HTTP伺服器,當遇到訪問的峰值,或者有人惡意發起慢速連線時,也很可能會導致伺服器實體記憶體耗盡頻繁交換,失去響應,只能重啟伺服器。例如當前apache一旦上到200個以上程式,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與記憶體佔用率非常低。nginx官方表示保持10,000個沒有活動的連線,它只佔2.5M記憶體,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩定性而言, nginx比lighthttpd更勝一籌。 
Nginx支援熱部署。它的啟動特別容易, 並且幾乎可以做到7*24不間斷執行,即使執行數個月也不需要重新啟動。你還能夠在不間斷服務的情況下,對軟體版本進行進行升級。 
Nginx採用master-slave模型, 能夠充分利用SMP的優勢,且能夠減少工作程式在磁碟I/O的阻塞延遲。當採用select()/poll()呼叫時,還可以限制每個程式的連線數。 
Nginx程式碼質量非常高,程式碼很規範, 手法成熟, 模組擴充套件也很容易。特別值得一提的是強大的Upstream與Filter鏈。 Upstream為諸如reverse proxy, 與其他伺服器通訊模組的編寫奠定了很好的基礎。而Filter鏈最酷的部分就是各個filter不必等待前一個filter執行完畢。它可以把前一個filter的輸出做為當前filter的輸入,這有點像Unix的管線。這意味著,一個模組可以開始壓縮從後端伺服器傳送過來的請求,且可以在模組接收完後端伺服器的整個請求之前把壓縮流轉向客戶端。 
Nginx採用了一些os提供的最新特性如對sendfile (Linux 2.2+),accept-filter (FreeBSD 4.1+),TCP_DEFER_ACCEPT (Linux 2.4+) 的支援,從而大大提高了效能 
Nginx 啟動:
CODE:
後面文章會寫nginx的編譯安裝,
4、Nginx 配置檔案修改重新載入:
CODE:
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid` 
三、Nginx Rewrite 
1.  Nginx Rewrite 基本標記(flags) 
last - 基本上都用這個Flag。 
※相當於Apache裡的[L]標記,表示完成rewrite,不再匹配後面的規則 
break - 中止Rewirte,不再繼續匹配 
redirect - 返回臨時重定向的HTTP狀態302 
permanent - 返回永久重定向的HTTP狀態301 
       ※原有的url支援正則  重寫的url不支援正規表示式
2.  正規表示式匹配,其中: 
    * ~         為區分大小寫匹配 
    * ~*       為不區分大小寫匹配 
    * !~和!~*   分別為區分大小寫不匹配及不區分大小寫不匹配 

3. 檔案及目錄匹配,其中: 
    * -f和!-f用來判斷是否存在檔案 
    * -d和!-d用來判斷是否存在目錄 
    * -e和!-e用來判斷是否存在檔案或目錄 
    * -x和!-x用來判斷檔案是否可執行 
3.  Nginx 的一些可用的全域性變數,可用做條件判斷:
CODE:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri
 四、 Nginx 代理 
將所有linuxtone.org與netseek.linuxtone.org域名全部自跳轉到 
CODE:
server
{
listen 80;#監聽埠
server_name linuxtone.org netseek.linuxtone.org; #提供服務的主機名
index index.html  index.jsp  index.jhtml;  
root /www/xbnfront
if ($host !~ "^www\.linxtone\.org$") {        #不區分大小寫匹配;
rewrite ^(.*) http://$1 redirect; #
}
 五、 Nginx 目錄自動加斜線:
CODE:
if (-d $request_filename){
           rewrite ^/(.*)([^/])$ permanent;  #$1代表前面的任意字元,$2代表
     }
這樣再對 請求,nginx就會進行判斷了,如果請求的是一個資料夾,會自動在最後加上/符號,如果請求的是一個檔案,則不會改變原有url
接下來對這段程式碼進行一個解釋
1、if (-d $request_filename),如果請求的是一個資料夾,則為真,進到if語句中執行
2、rewrite是執行url重寫操作
3、^/(.*)([^/])$表示以/符號開始並緊跟著任何字元,同時不是以/為結束的字串,在我的url中,(.*)表示的ww,([^/])表示的w
4、
 表示的重寫後的地址,$host是請求的域名,$1是前面第一個括號裡的內容ww,在我的url裡就是wordpres $2是前面第二個括號裡的內容,在我的url裡是w
5、permanent表示,返回永久重定向的HTTP狀態301
六  Nginx Location 
1.基本語法:[和上面rewrite正則匹配語法基本一致] 
location [=|~|~*|^~] /uri/ { … } 
     * ~  為區分大小寫匹配 
    * ~* 為不區分大小寫匹配 
    * !~和!~*分別為區分大小寫不匹配及不區分大小寫不匹配 

示例1: 
location = / { 
# matches the query / only. 
# 只匹配 / 查詢。 
} 
匹配任何查詢,因為所有請求都已 / 開頭。但是正規表示式規則和長的塊規則將被優先和查詢匹配 
示例2: 
location ^~ /images/ { 

# 匹配任何以 /images/ 開頭的任何查詢並且停止搜尋。任何正規表示式將不會被測試。 

示例3: 
location ~* \.(gif|jpg|jpeg)$ { 

} 
# 匹配任何以gif、jpg 或 jpeg 結尾的請求。 





來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30129545/viewspace-1435210/,如需轉載,請註明出處,否則將追究法律責任。

相關文章