国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > Nginx > 正文

Nginx防止流量攻擊的配置詳解

2024-08-30 12:23:17
字體:
供稿:網(wǎng)友
這篇文章主要給大家分享了Nginx防止流量攻擊的配置方法,文中給出了詳細(xì)的介紹和配置示例代碼,對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。

使用場景

最近在工作中遇到一個(gè)問題,項(xiàng)目中報(bào)告查詢系統(tǒng)負(fù)載均衡集群相關(guān)配置已經(jīng)完成,兩種實(shí)現(xiàn)方式分別是基于Ehcache和Redis的session管理策略。

大家都知道服務(wù)器資源有限的,但是客戶端來的請求是無限的(不排除惡意攻擊), 為了保證大部分的請求能夠正常響應(yīng),不得不放棄一些客戶端來的請求,所以我們會(huì)采用Nginx的限流操作, 這種操作可以很大程度上緩解服務(wù)器的壓力, 使其他正常的請求能夠得到正常響應(yīng)。

如何使用Nginx實(shí)現(xiàn)基本的限流,比如單個(gè)IP限制每秒訪問50次。通過Nginx限流模塊,我們可以設(shè)置一旦并發(fā)連接數(shù)超過我們的設(shè)置,將返回503錯(cuò)誤給客戶端。這樣可以非常有效的防止CC攻擊。再配合 iptables防火墻,基本上CC攻擊就可以無視了。下面來看看詳細(xì)的介紹:

如何使用

conf配置

#統(tǒng)一在http域中進(jìn)行配置#限制請求limit_req_zone $binary_remote_addr $uri zone=api_read:20m rate=50r/s;#按ip配置一個(gè)連接 zonelimit_conn_zone $binary_remote_addr zone=perip_conn:10m;#按server配置一個(gè)連接 zonelimit_conn_zone $server_name zone=perserver_conn:100m;server {  listen  80;  server_name report.52itstyle.com;  index login.jsp;  location / {    #請求限流排隊(duì)通過 burst默認(rèn)是0    limit_req zone=api_read burst=5;    #連接數(shù)限制,每個(gè)IP并發(fā)請求為2    limit_conn perip_conn 2;    #服務(wù)所限制的連接數(shù)(即限制了該server并發(fā)連接數(shù)量)    limit_conn perserver_conn 1000;    #連接限速    limit_rate 100k;    proxy_pass  http://report;  }}upstream report {  fair;  server 172.16.1.120:8882 weight=1 max_fails=2 fail_timeout=30s;  server 172.16.1.120:8881 weight=1 max_fails=2 fail_timeout=30s;}

配置503錯(cuò)誤

默認(rèn)情況,超出限制額度,將會(huì)報(bào)503錯(cuò)誤,提示:

503 Service Temporarily UnavailableThe server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later. Sorry for the inconvenience.Please report this message and include the following information to us.Thank you very much!

這樣顯示沒毛病,但是不夠友好,這里我們自定義503錯(cuò)誤。

error_page 500 502 503 504 /50x.html;location = /50x.html { root html;#自定義50X錯(cuò)誤}

配置說明

limit_conn_zone

是針對每個(gè)IP定義一個(gè)存儲(chǔ)session狀態(tài)的容器。這個(gè)示例中定義了一個(gè)100m的容器,按照32bytes/session,可以處理3200000個(gè)session。

limit_rate 300k;

對每個(gè)連接限速300k. 注意,這里是對連接限速,而不是對IP限速。如果一個(gè)IP允許兩個(gè)并發(fā)連接,那么這個(gè)IP就是限速limit_rate×2。

burst=5;

這相當(dāng)于在檢查站req旁邊放5個(gè)座位。如果某個(gè)請求當(dāng)時(shí)超過速度限制被攔了,請他在空座位上坐著,等排隊(duì),如果檢查站空了,就可以通過。如果連座位都坐滿了,那就抱歉了,請求直接退回,客戶端得到一個(gè)服務(wù)器忙的響應(yīng)。所以說burst跟request_rate一點(diǎn)關(guān)系都沒有,設(shè)成10000,就是1萬個(gè)請求可以等著排隊(duì),而檢查站還是1秒鐘放行5個(gè)請求(龜速)。而且也不能一直排隊(duì),所以nginx還設(shè)了超時(shí),排隊(duì)超過一定時(shí)間,也是直接退回,返回服務(wù)器忙的響應(yīng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 库尔勒市| 南乐县| 当雄县| 日照市| 西华县| 长白| 宜都市| 大城县| 黄冈市| 阿图什市| 合作市| 临安市| 渭源县| 剑河县| 昌宁县| 汉寿县| 崇信县| 西平县| 安达市| 河间市| 宜丰县| 张北县| 江华| 南岸区| 罗甸县| 郓城县| 平遥县| 灵武市| 庄浪县| 施甸县| 通河县| 杂多县| 黄陵县| 江西省| 岱山县| 延长县| 靖宇县| 潞城市| 社旗县| 丽江市| 黔南|