Nginx_常見應(yīng)用技術(shù)指南[Nginx_Tips]__第二版
IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.orgNginx 常見應(yīng)用技術(shù)指南[Nginx Tips] 第二版作者:NetSeek
IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.org
Nginx 常見應(yīng)用技術(shù)指南[Nginx Tips] 第二版
作者:NetSeek http://www.linuxtone.org (IT運維專家網(wǎng)|集群架構(gòu)|性能調(diào)優(yōu))
歡迎轉(zhuǎn)載, 轉(zhuǎn)載時請務(wù)必以超鏈接形式標明文章原始出處和作者信息及本聲明.
首發(fā)時間: 2008-11-25 更新時間:2009-1-14
目 錄
一、Nginx 基礎(chǔ)知識
二、Nginx 安裝及調(diào)試
三、Nginx Rewrite
四、Nginx Redirect
五、Nginx 目錄自動加斜線:
六、Nginx Location
七、Nginx expires
八、Nginx 防盜鏈
九、Nginx 訪問控制
十、Nginx 日志處理
十一、 Nginx Cache
十二、 Nginx 負載均衡
十三、 Nginx 簡單優(yōu)化
十四、 如何構(gòu)建高性能的 LEMP 環(huán)境
十五、 Nginx 服務(wù)監(jiān)控
十六、 常見問題與錯誤處理.
十七、 相關(guān)資源下載
【前言】:
編寫此技術(shù)指南在于推廣普及NGINX 在國內(nèi)的使用,更方便的幫助大家了解和掌握NGINX 的一些使用技巧。本指南很多技巧來自于網(wǎng)絡(luò)和工作中或網(wǎng)絡(luò)上朋友們問我的問題. 在此對 網(wǎng)絡(luò)上愿意分享的朋友們表示感謝和致意!歡迎大家和我一起豐富本技術(shù)指南提出更好的建 議!請朋友們關(guān)注: http://www.linuxtone.org 技術(shù)分享社區(qū)! 互想學(xué)習(xí)共同進步!
一、Nginx 基礎(chǔ)知識
1、簡介 ("engine x") 是一個高性能的 HTTP 和 反向代理 服務(wù)器,也是一個 IMAP/POP3/SMTPHYPERLINK"http://en.wikipedia.org/wiki/Proxy_server" 務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)的,它已經(jīng)在該站點運行超
過兩年半了。Igor 將源代碼以類BSD 許可證的形式發(fā)布。盡管還是測試版,但是,Nginx 已經(jīng)因為它的穩(wěn) 定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名了。
更多的請見官方wiki:HYPERLINK"http://wiki.codemongers.com/" http://wiki.codemongers.com/
2、 Nginx 的優(yōu)點
nginx 做為 HTTP 服務(wù)器,有以下幾項基本特性:
1) 處理靜態(tài)文件,索引文件以及自動索引;打開文件描述符緩沖.
—————————————————————————————————————————————— 期待您的加入我們! 一起建立最好的技術(shù)分享社區(qū)! Gmail:cnseek@gmail.com/MSN:cnseek@msn.com
, ,IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.org
2)
3)
4) 無緩存的反向代理加速,簡單的負載均衡和容錯. FastCGI ,簡單的負載均衡和容錯. 模塊化的結(jié)構(gòu)。包括 gzipping, byte ranges, chunked responses, 以及 SSI-filter 等 filter 。
如果由 FastCGI 或其它代理服務(wù)器處理單頁中存在的多個 SSI ,則這項處理可以并行運行,而不
需要相互等待。
5) 支持 SSL 和 TLS SNI .
Nginx 專為性能優(yōu)化而開發(fā),性能是其最重要的考量, 實現(xiàn)上非常注重效率 。它支持內(nèi)核 Poll 模型, 能經(jīng)受高負載的考驗, 有報告表明能支持高達 50,000 個并發(fā)連接數(shù)。
Nginx 具有很高的穩(wěn)定性。其它 HTTP 服務(wù)器,當(dāng)遇到訪問的峰值,或者有人惡意發(fā)起慢速連接時, 也很可能會導(dǎo)致服務(wù)器物理內(nèi)存耗盡頻繁交換,失去響應(yīng),只能重啟服務(wù)器。例如當(dāng)前 apache 一旦上到
200 個以上進程,web 響應(yīng)速度就明顯非常緩慢了。而 Nginx 采取了分階段資源分配技術(shù),使得它的 CPU 與 內(nèi)存占用率非常低。nginx 官方表示保持 10,000 個沒有活動的連接,它只占 2.5M 內(nèi)存,所以類似 DOS 這 樣的攻擊對 nginx 來說基本上是毫無用處的。就穩(wěn)定性而言, nginx 比 lighthttpd 更勝一籌。
Nginx 支持熱部署。它的啟動特別容易, 并且?guī)缀蹩梢宰龅?7*24 不間斷運行,即使運行數(shù)個月也不 需要重新啟動。你還能夠在不間斷服務(wù)的情況下,對軟件版本進行進行升級。
Nginx 采用 master-slave 模型, 能夠充分利用 SMP 的優(yōu)勢,且能夠減少工作進程在磁盤 I/O 的阻 塞延遲。當(dāng)采用 select()/poll()調(diào)用時,還可以限制每個進程的連接數(shù)。
Nginx 代碼質(zhì)量非常高,代碼很規(guī)范, 手法成熟, 模塊擴展也很容易。特別值得一提的是強大 的 Upstream 與 Filter 鏈。 Upstream 為諸如 reverse proxy, 與其他服務(wù)器通信模塊的編寫奠定了很好的 基礎(chǔ)。而 Filter 鏈最酷的部分就是各個 filter 不必等待前一個 filter 執(zhí)行完畢。它可以把前一個 filter 的輸出做為當(dāng)前 filter 的輸入,這有點像 Unix 的管線。這意味著,一個模塊可以開始壓縮從后端服務(wù)器 發(fā)送過來的請求,且可以在模塊接收完后端服務(wù)器的整個請求之前把壓縮流轉(zhuǎn)向客戶端。
Nginx 采用了一些 os 提供的最新特性如對 sendfile (Linux 2.2 ),accept-filter (FreeBSD
4.1 ),TCP_DEFER_ACCEPT (Linux 2.4 ) 的支持,從而大大提高了性能
二、Nginx 安裝及調(diào)試
1、Pcre 安裝
./configure
make && make install
cd ../
2. nginx 編譯安
裝 --user=www --group=www --prefix=/usr/local/nginx/ --with-http_stub_status_module /configure
--with-openssl=/usr/local/openssl
make && make install
更詳細的模塊定制與安裝請參照官方 wiki.
—————————————————————————————————————————————— 期待您的加入我們! 一起建立最好的技術(shù)分享社區(qū)! Gmail:cnseek@gmail.com/MSN:cnseek@msn.com
, ,IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.org
3、Nginx 配置文件測試:
# /usr/local/nginx/sbin/nginx -t //Debug 配置文件的關(guān)鍵命令需要重點撐握.
2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
2008/12/16 09:08:35 [info] 28412#0: the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully
3、 Nginx 啟動:
# /usr/local/nginx/sbin/nginx
4、 Nginx 配置文件修改重新加載:
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid
`
三、Nginx Rewrite
1. Nginx Rewrite 基本標記(flags)
last - 基本上都用這個 Flag 。
※相當(dāng)于 Apache 里的[L]標記,表示完成 rewrite ,不再匹配后面的規(guī)則
break - 中止 Rewirte ,不再繼續(xù)匹配
redirect - 返回臨時重定向的 HTTP 狀態(tài) 302
permanent - 返回永久重定向的 HTTP 狀態(tài) 301
※原有的 url 支持正則 重寫的 url 不支持正則
2. 正則表達式匹配,其中:
* ~
* ~*
* !~和!~* 為區(qū)分大小寫匹配 為不區(qū)分大小寫匹配 分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配
3. 文件及目錄匹配,其中:
* -f 和!-f 用來判斷是否存在文件
* -d 和!-d 用來判斷是否存在目錄
* -e 和!-e 用來判斷是否存在文件或目錄
* -x 和!-x 用來判斷文件是否可執(zhí)行
3. Nginx 的一些可用的全局變量,可用做條件判斷:
$args
$content_length —————————————————————————————————————————————— 期待您的加入我們! 一起建立最好的技術(shù)分享社區(qū)! Gmail:cnseek@gmail.com/MSN:cnseek@msn.com
, ,IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.org $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 Redirect
將所有l(wèi)inuxtone.org 與netseek.linuxtone.org 域名全部自跳轉(zhuǎn)到HYPERLINK"http://www.linuxtone.org/"
server
{
listen 80;
server_name linuxtone.org netseek.linuxtone.org;
index index.html index.php;
root /data/www/wwwroot;
if ($host !~ "^www.linxtone.org$") {
rewrite ^(.*) http://www.linuxtone.org$1 redirect;
}
........................
}
五、Nginx 目錄自動加斜線:
if (-d $request_filename){
rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;
}
—————————————————————————————————————————————— 期待您的加入我們! 一起建立最好的技術(shù)分享社區(qū)! Gmail:cnseek@gmail.com/MSN:cnseek@msn.com
, ,IT 運維專家網(wǎng) 【推廣 Nginx 之基礎(chǔ)應(yīng)用教程】 http://www.linuxtone.org
六、Nginx Location
1.基本語法:[和上面 rewrite 正則匹配語法基本一致]
location [=|~|~*|^~] /uri/ { ? }
* ~ 為區(qū)分大小寫匹配
* ~* 為不區(qū)分大小寫匹配
* !~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配
示例 1:
location = / {
# matches the query / only.
# 只匹配 / 查詢。
}
匹配任何查詢,因為所有請求都已 / 開頭。但是正則表達式規(guī)則和長的塊規(guī)則將被優(yōu) 先和查詢匹配
示例 2:
location ^~ /images/ {
# matches any query beginning with /images/ and halts searching,
# so regular expressions will not be checked.
# 匹配任何已 /images/ 開頭的任何查詢并且停止搜索。任何正則表達式將不會被測試。
示例 3:
location ~* .(gif|jpg|jpeg)$ {
# matches any request ending in gif, jpg, or jpeg. However, all
# requests to the /images/ directory will be handled by
}
# 匹配任何已 gif 、jpg 或 jpeg 結(jié)尾的請求。
七、Nginx expires
1.根據(jù)文件類型 expires
# Add expires header for static content
location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
root /data/www/wwwroot/bbs;
expires
break;
}
} 1d;
—————————————————————————————————————————————— 期待您的加入我們! 一起建立最好的技術(shù)分享社區(qū)! Gmail:cnseek@gmail.com/MSN:cnseek@msn.com
,