成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過配置nginx 抵御不合法請求

安全 應用安全
通過配置nginx 抵御不合法請求,具體方法如下文所示

 ngx_http_limit_conn_module模塊

使用此模塊主要用來限制每秒請求數量,至于依據什么條件限制是由我們來自定義的。

官方文檔 Module ngx_http_limit_req_module

中文翻譯的 nginx限制請求數ngx_http_limit_req_module模塊

文檔講的很詳細了,大致說下:

limit_req_zone $variable zone=name:size rate=rate;

命令的意思是,以$variable變量為條件,起名為name,設置的存儲空間大小為size,設置限定頻率為rate;

我們可以設置**多個,不同條件,不同名稱,不同大小的限制**。

這個定義我們是需要寫在**http配置段中**。

在匹配的location中寫上limit_req zone=name [burst=number] [nodelay];這里burst就是允許的漏桶數,當請求頻率大于rate但是超出的數量不大于burst設置的數量,則nginx會將超出的請求延遲后面返回。如果請求數量超出burst了,則將超出部分直接返回錯誤碼,默認503。至于nodelay就是設置是否要延遲,有它不超過burst的請求才延遲。

網上大多條件都是$binary_remote_addr,其實我們可以根據自己的需求,來定義自身的相應條件,活學活用嘛,下面會有實例。

ngx_http_limit_conn_module模塊

這個模塊主要限制單獨ip同一時間的連接數

官方文檔 Module ngx_http_limit_conn_module。

中文翻譯的 nginx限制連接數ngx_http_limit_conn_module模塊。

各位看文檔吧,我的實戰中沒有使用此模塊。

實戰階段

好了,下面進入實戰階段:

首先我們的初始配置文件時是(不完整):
http { server { listen 8080 default_server; server_name localhost:8080; location ~ .* { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; } } }
我們的需求是,有一批接口被頻繁的不合法訪問,我們要做限制。

第一版:限制為1s一次請求,漏桶數為5

http { limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; server { listen 8080 default_server; server_name localhost:8080; location ~ .* { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; } location ^~ /interface { limit_req zone=one burst=5 nodelay; proxy_pass http://127.0.0.1:8080; } } }這里加了proxy_pass http://127.0.0.1:8080;這里配置了轉發,否則匹配之后會找不到服務器的。

但是這樣會有個問題,目前我們是以ip做的限制,但是有可能網吧或者校內出口就是一個或幾個ip,我們這樣限制的話會把正常用戶也限制到了,得不償失。其實我們可以換一種思路來定位到單一用戶,正常一個請求過來,我們都會設置攜帶一個關于用戶的`token`信息。至于這個`token`是如何生成的,只有服務器知道,那我們加入我們的每次請求中,`header`中帶有這個信息,`token`值,如果一個非法的請求可能沒有這個值,即使有這個值我們也可以以`token`為條件來限制,這樣更合理些。

這里加了proxy_pass http://127.0.0.1:8080;這里配置了轉發,否則匹配之后會找不到服務器的。

但是這樣會有個問題,目前我們是以ip做的限制,但是有可能網吧或者校內出口就是一個或幾個ip,我們這樣限制的話會把正常用戶也限制到了,得不償失。其實我們可以換一種思路來定位到單一用戶,正常一個請求過來,我們都會設置攜帶一個關于用戶的`token`信息。至于這個`token`是如何生成的,只有服務器知道,那我們加入我們的每次請求中,`header`中帶有這個信息,`token`值,如果一個非法的請求可能沒有這個值,即使有這個值我們也可以以`token`為條件來限制,這樣更合理些。

第二版

http { limit_req_zone $http_token zone=two:10m rate=1r/s; server { listen 8080 default_server; server_name localhost:8080; location ~ .* { proxy_pass http://127.0.0.1:8080; proxy_set_header X-Real-IP $remote_addr; } location ^~ /interface { if($http_token=""){ return 403; } limit_req zone=two burst=5 nodelay; proxy_pass http://127.0.0.1:8080; } } }                                                                                                                                                                                                                                                         在nginx中,使用$http_變量名,取的就是header中相應的變量。

前方預警:我特意在這個配置中留了個坑,如果你像我這樣配置的話,重啟會報一個異常nginx: [emerg] unknown directive "if($http_token",很奇怪是不,這個異常我花了很長時間才解決,原因是if和(中間需要個**空格**,沒錯,就是這個空格花了我好幾個小時,血淚的教訓啊,希望各位不要再重蹈覆轍。

這個問題的解決的文章:Nginx unknown directive “if($domain”

這次的配置,多少可以限制住的,對我一個nginx的小白來說,調研一點用一點,也是不錯的。

編輯推薦】

責任編輯:何妍 來源: OSCHINA
相關推薦

2011-01-07 14:55:17

2014-06-09 10:36:00

2018-06-10 15:30:36

2022-04-27 09:40:25

抓包圖四次揮手TCP

2018-02-27 11:08:11

2009-03-18 10:40:50

DHCP工作站安全網絡運行

2009-09-03 15:33:13

RHEL紅帽linux

2010-10-08 10:27:43

2018-08-10 17:11:00

2012-08-21 10:16:15

2009-04-01 08:43:39

IT行業裁員降薪

2024-01-02 00:14:41

2021-08-12 10:31:59

MySQL安全方法

2020-04-27 10:01:17

漏洞惡意網站遠程攻擊

2015-08-12 10:07:05

2010-09-08 12:49:23

2020-03-10 13:13:15

程序員接口參數編程語言

2009-10-10 14:25:08

2014-10-11 11:36:05

2010-09-17 11:04:00

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久人成影片免费观看 | 亚洲视频三区 | 一级毛片色一级 | 国产小视频在线观看 | 亚洲欧洲精品成人久久奇米网 | 一区二区三区视频在线观看 | 一本大道久久a久久精二百 欧洲一区二区三区 | 在线观看中文字幕视频 | 高清一区二区三区 | 伊人免费在线观看高清 | 中文字幕日本一区二区 | 日韩精品免费视频 | 91久久北条麻妃一区二区三区 | 国产精品久久久久无码av | 中文字幕电影在线观看 | 伊色综合久久之综合久久 | 日韩男人天堂 | 色中文在线 | 国产探花在线观看视频 | 欧美aaaaaaaaaa | 天天操人人干 | 色先锋影音 | 日韩欧美一区二区在线播放 | a久久久久久 | 精品欧美视频 | 老司机深夜福利网站 | 久草.com| 国产第二页| 精品国产乱码久久久久久影片 | 99综合网 | 亚洲久在线 | 久久国内 | 国产日韩欧美一区 | 欧美日韩福利视频 | 美女一区二区在线观看 | 最新中文字幕在线 | 欧美专区在线 | 欧美在线观看一区 | h视频在线播放 | 国产精品视频播放 | 欧美成人a |