詳解Nginx服務(wù)器中配置Sysguard模塊預(yù)防高負(fù)載的方案
nginx做為HTTP服務(wù)器,有以下幾項基本特性:
處理靜態(tài)文件,索引文件以及自動索引;打開文件描述符緩沖.
無緩存的反向代理加速,簡單的負(fù)載均衡和容錯.
FastCGI,簡單的負(fù)載均衡和容錯.
模塊化的結(jié)構(gòu)。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務(wù)器處理單頁中存在的多個SSI,則這項處理可以并行運行,而不需要相互等待。
Nginx專為性能優(yōu)化而開發(fā),性能是其最重要的考量,實現(xiàn)上非常注重效率。它支持內(nèi)核ePoll模型,能經(jīng)受高負(fù)載的考驗,有報告表明能支持高達(dá) 50,000個并發(fā)連接數(shù)。
Nginx具有很高的穩(wěn)定性。其它HTTP服務(wù)器,當(dāng)遇到訪問的峰值,或者有人惡意發(fā)起慢速連接時,也很可能會導(dǎo)致服務(wù)器物理內(nèi)存耗盡頻繁交換,失去響應(yīng),只能重啟服務(wù)器。例如當(dāng)前apache一旦上到200個以上進(jìn)程,web響應(yīng)速度就明顯非常緩慢了。而Nginx采取了分階段資源分配技術(shù),使得它的CPU與內(nèi)存占用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M內(nèi)存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩(wěn)定性而言,nginx比lighthttpd更勝一籌。
然而,如果nginx被攻擊或者訪問量突然變大,nginx同樣會因為負(fù)載變高或者內(nèi)存不夠用導(dǎo)致服務(wù)器宕機(jī),最終導(dǎo)致站點無法訪問。今天要談到的解決方法來自淘寶開發(fā)的模塊nginx-http-sysguard,主要用于當(dāng)負(fù)載和內(nèi)存達(dá)到一定的閥值之時,會執(zhí)行相應(yīng)的動作,比如直接返回503,504或者其他的.一直等到內(nèi)存或者負(fù)載回到閥值的范圍內(nèi),站點恢復(fù)可用。簡單的說,這幾個模塊是讓nginx有個緩沖時間,緩緩.
1. 安裝nginx sysguard模塊
1.1 下載文件
# wget http://nginx.org/download/nginx-1.4.2.tar.gz # wget https://github.com/alibaba/nginx-http-sysguard/archive/master.zip \ -O nginx-http-sysguard-master.zip # unzip nginx-http-sysguard-master.zip # tar -xzvf nginx-1.4.2.tar.gz
1.2 打sysgrard補(bǔ)丁
這邊沒找到nginx-1.4.2對應(yīng)的補(bǔ)丁,只有1.2.9和1.3.9的,索性試試1.3.9的吧,應(yīng)該差不多.
# cd nginx-1.4.2 # patch -p1 < ../nginx-http-sysguard-master/nginx_sysguard_1.3.9.patch
1.3 安裝nginx
# ./configure --prefix=/usr/local/nginx-1.4.2 \ --with-http_stub_status_module --add-module=../nginx-http-sysguard # make # make install
2. sysguard指令
語法: sysguard [on | off]
默認(rèn)值: sysguard off
配置段: http, server, location
開關(guān)模塊
語法:
sysguard_load load=number [action=/url]
默認(rèn)值: none
配置段: http, server, location
指定負(fù)載閥值,當(dāng)系統(tǒng)的負(fù)載超過這個值,所有的請求都會被重定向到action定義的uri請求中.如果沒有定義URL action沒有定義,那么服務(wù)器直接返回503
語法:
sysguard_mem swapratio=ratio% [action=/url]
默認(rèn)值: none
配置段: http, server, location
定義交換分區(qū)使用的閥值,如果交換分區(qū)使用超過這個閥值,那么后續(xù)的請求全部被重定向到action定義的uri請求中.如果沒有定義URL action沒有定義,那么服務(wù)器直接返回503
語法:
sysguard_interval time
默認(rèn)值: sysguard_interval 1s
配置段: http, server, location
定義系統(tǒng)信息更新的頻率,默認(rèn)1秒.
語法:
sysguard_log_level info | notice | warn | error
默認(rèn)值: sysguard_log_level error
配置段: http, server, location
定義sysguard的日志級別
3. sysguard使用實例
3.1 nginx配置
server { listen 80; server_name www.dbjr.com.cn www.heytool.com; access_log /data/logs/nginx/www.dbjr.com.cn.access.log main; index index.html index.php index.html; root /data/site/www.dbjr.com.cn; sysguard on; # 為了方便測試,load閥值為0.01,平時大家一般都在5或10+ sysguard_load load=0.01 action=/loadlimit; sysguard_mem swapratio=20% action=/swaplimit; location / { } location /loadlimit { return 503; } location /swaplimit { return 503; } }
3.2 測試
負(fù)載OK的情況下,訪問nginx
# uptime
16:23:37 up 6 days, 8:04, 2 users, load average: 0.00, 0.01, 0.05
# curl -I www.dbjr.com.cn
HTTP/1.1 403 Forbidden Server: nginx Date: Thu, 03 Oct 2013 16:27:13 GMT Content-Type: text/html Content-Length: 162 Connection: keep-alive
因為站點下沒有文件,所以返回了403,實際上沒關(guān)系.
負(fù)載超過閥值的情況下,訪問nginx
# uptime
16:25:59 up 6 days, 8:06, 2 users, load average: 0.05, 0.04, 0.05
# curl -I www.dbjr.com.cn
HTTP/1.1 503 Service Temporarily Unavailable Server: nginx Date: Thu, 03 Oct 2013 16:26:19 GMT Content-Type: text/html Content-Length: 206 Connection: keep-alive
swap超過閥值的功能我就不再測試了。大家回家可以自己動手測試一下.
結(jié)束語
在nginx是realserver的情況下,個人也比較推薦使用這種方法,如果服務(wù)器負(fù)載一旦爬高,一般要比較長的時間才能恢復(fù)到正常水平,在采用這個插件的情況下,負(fù)載達(dá)到閥值,nginx返回503,前段使用故障轉(zhuǎn)移將請求發(fā)往其他服務(wù)器,這臺服務(wù)器在無訪問的情況下,便能很快的恢復(fù)到正常水平,并且能夠立即投入工作。超過閥值的服務(wù)器處理請求速度也會大打折扣,使用這個模塊,巧妙的將請求發(fā)送到了更快速的服務(wù)器上,在一定程度上避免了訪問速度慢的問題. 前面說的是在集群環(huán)境下,在單點環(huán)境下,用不用大家斟酌一下。
- Linux下用Nginx作Perl程序服務(wù)器及其中Perl模塊的配置
- Nginx服務(wù)器中用于生成縮略圖的模塊配置教程
- 詳解Nginx服務(wù)器中map模塊的配置與使用
- 記錄Nginx服務(wù)器的Split Clients模塊配置過程
- 詳解Nginx中的geo模塊與利用其配置負(fù)載均衡的示例
- Nginx配置srcache_nginx模塊搭配Redis建立緩存系統(tǒng)
- 詳解Nginx服務(wù)器的nginx-http-footer-filter模塊配置
- 詳解Nginx服務(wù)器中HTTP Headers相關(guān)的模塊配置使用
- 在Nginx中配置image filter模塊來實現(xiàn)動態(tài)生成縮略圖
- 詳解Nginx的核心配置模塊中對于請求體的接受流程
- Nginx服務(wù)器中的模塊編寫及相關(guān)內(nèi)核源碼初探
- 使用Lua編寫Nginx服務(wù)器的認(rèn)證模塊的方法
- Nginx服務(wù)器基本的模塊配置和使用全攻略
相關(guān)文章
Windows設(shè)置nginx開機(jī)自啟動的方法
這篇文章主要介紹了Windows設(shè)置nginx開機(jī)自啟動的方法,通過兩種方式實現(xiàn)nginx的開機(jī)自啟動:winws和window計劃程序,每種方式給大家介紹的非常詳細(xì)需要的朋友可以參考下2022-11-11Keepalived實現(xiàn)Nginx負(fù)載均衡高可用的示例代碼
這篇文章主要介紹了Keepalived實現(xiàn)Nginx負(fù)載均衡高可用的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04Nginx對網(wǎng)段內(nèi)ip的連接數(shù)限流配置詳解
這篇文章主要介紹了Nginx對網(wǎng)段內(nèi)ip的連接數(shù)限流配置詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03在Linux和Windows系統(tǒng)上安裝Nginx服務(wù)器的教程
這篇文章主要介紹了在Linux和Windows系統(tǒng)上安裝Nginx服務(wù)器的教程,Linux系統(tǒng)這里以CentOS為代表,需要的朋友可以參考下2015-08-08Nginx 路由轉(zhuǎn)發(fā)和反向代理location配置實現(xiàn)
本文主要介紹了Nginx 路由轉(zhuǎn)發(fā)和反向代理location配置實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11