個人整理資料,轉帖註明出處,謝謝~
Nginx介紹和安裝
一個簡單的配置文件
模塊介紹
常用場景配置
進階內容
參考資料
== Nginx介紹和安裝 ==
Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反轉代理服務器,
其性能與IMAP/POP3代理服務器相當。Nginx以其高性能、穩定、功能豐富、配置簡單及佔用系統資源少而著稱。
Nginx 超越 Apache 的高性能和穩定性,使得國內使用 Nginx 作爲 Web 服務器的網站也越來越多.
*基礎功能
處理靜態文件,索引文件以及自動索引;
反向代理加速(無緩存),簡單的負載均衡和容錯;
FastCGI,簡單的負載均衡和容錯;
模塊化的結構。過濾器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求併發處理;
SSL 和 TLS SNI 支持;
*優勢
Nginx專爲性能優化而開發,性能是其最重要的考量, 實現上非常注重效率 。它支持內核Poll模型,能經受高負載的考驗, 有報告表明能支持高達 50,000 個併發連接數。
Nginx作爲負載均衡服務器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作爲 HTTP代理服務器對外進行服務。
Nginx具有很高的穩定性。其它HTTP服務器,當遇到訪問的峯值,或者有人惡意發起慢速連接時,也很可能會導致服務器物理內存耗盡頻繁交換,失去響應,只能重啓服務器。
例如當前apache一旦上到200個以上進程,web響應速度就明顯非常緩慢了。而Nginx採取了分階段資源分配技術,使得它的CPU與內存佔用率非常低。
nginx官方表示保持10,000個沒有活動的連接,它只佔2.5M內存,就穩定性而言, nginx比lighthttpd更勝一籌。
Nginx支持熱部署。它的啓動特別容易, 並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啓動。你還能夠在不間斷服務的情況下,對軟件版本進行進行升級。
Nginx採用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
*nginx的安裝
開發穩定版: Nginx 0.8.X
當前穩定版: Nginx 0.7.X
歷史穩定版: Nginx 0.6.X
== 一個簡單的配置文件 ==
== 模塊介紹 ==
模塊劃分:
#Core 核心模塊
#Events 事件模塊
#HTTP HTTP模塊
#Mail 郵件模塊
*核心模塊的常用組件
*事件模塊的常用組件
*HTTP模塊的核心組件和變量
*郵件模塊的常用組件(略)
== 常用場景配置 ==
1.多臺服務器配置負載均衡
ip_hash; nginx中的ip_hash技術能夠將某個ip的請求定向到同一臺後端,這樣一來這個ip下的某個客戶端和某個後端就能建立起穩固的session
1.down 表示單前的 server 暫時不參與負載
2.weight 默認爲 1.weight 越大,負載的權重就越大。
3.backup: 其它所有的非 backup 機器 down 或者忙的時候,請求 backup機器。所以這臺機器壓力會最輕。
2.通過手機客戶端的頭信息或者請求的參數轉發到不用目錄
1、正則表達式匹配,其中:
= 完全相等;
~爲區分大小寫匹配;
~*爲不區分大小寫匹配;
!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配。
2、文件及目錄匹配,其中:
-f和!-f用來判斷是否存在文件;
-d和!-d用來判斷是否存在目錄;
-e和!-e用來判斷是否存在文件或目錄;
-x和!-x用來判斷文件是否可執行。
if (-d $request_filename){ ... }
哪些地方會出現正則表達式:
1.location ~* /.(gif|jpg|png|swf|flv)${...}
2.rewrite ^(.*)$ /nginx-ie/$1 break;
正則表達式舉例:
1.多目錄轉成參數 abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2
if ($host ~* (.*)/.domain/.com) {
set $sub_name $1;
rewrite ^/sort//(/d+)//?$ /index.php?act=sort&cid=$sub_name&id=$1 last;
}
2.目錄對換 /123456/xxxx -> /xxxx?id=123456
rewrite ^/(/d+)/(.+)/ /$2?id=$1 last;
3.防盜鏈
4.訪問控制:身份驗證、限制IP
cp /usr/local/apache/apache8001/bin/htpasswd /usr/local/bin/
/usr/local/bin/htpasswd -c htpasswd root
5.查看Nginx的運行狀態
== 進階內容 ==
1.查看Nginx的運行狀態
Active connections: 364
server accepts handled requests
5477919 5477919 17515830
Reading: 10 Writing: 26 Waiting: 328
意思如下:
active connections – 當前 Nginx 正處理的活動連接數。
serveraccepts handled requests -- 總共處理了 5477919 個連接 , 成功創建 5477919 次握手 (證明中間沒有失敗的 ), 總共處理了 17515830 個請求 ( 平均每次握手處理了 3.2 個數據請求 )。
reading -- nginx 讀取到客戶端的 Header 信息數。
writing -- nginx 返回給客戶端的 Header 信息數。
waiting -- 開啓 keep-alive 的情況下,這個值等於 active - (reading + writing),意思就是 Nginx 已經處理完正在等候下一次請求指令的駐留連接。
2.案例分析:
將web server由apache換爲nginx後,卻帶來意想不到的問題.多個頁面顯示模塊顯示"正在加載中..."然後一直停頓,使用FireBug調試前端,XSL文件解析失敗.但載入又是HTTP 200 的正常狀態.
繼續用FireBug調試,發現XSL文件下載時的HTTP響應頭中,
Content-Type是oct/stream ,而在原來的apache中,是text/xml,於是修改/etc/nginx/mime.types文件.將XSL的擴展名加到xml組中.問題解決.
3. 通過系統的信號控制 Nginx
使用信號加載新的配置
平滑升級到新的二進制代碼
4. 使用Nginx限制下載速率和併發數
limit_zone limit_conn limit_rate
5. 使用Nginx進行地址轉發
rewrite
nginx rewrite中last和break的區別: http://blog.sina.com.cn/s/blog_4b01279a0100hd4c.html
6.Nginx Internals: Nginx源代碼、內部機制的分析
http://blog.zhuzhaoyuan.com/2009/09/nginx-internals-slides-video/
== 參考資料 ==
Nginx中文文檔:
http://wiki.nginx.org/NginxChs
服務器系統架構分析日誌:
http://www.sudone.com/
使用 Nginx 提升網站訪問速度:
http://www.ibm.com/developerworks/cn/web/wa-lo-nginx/