一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - Nginx - 基于Nginx實現訪問控制、連接限制

基于Nginx實現訪問控制、連接限制

2020-03-11 15:55架構師日刊 Nginx

Nginx自帶的模塊支持對并發請求數進行限制, 還有對請求來源進行限制。可以用來防止DDOS攻擊。這篇文章主要介紹了基于Nginx實現訪問控制、連接限制的相關資料,需要的朋友可以參考下

前言

Nginx自帶的模塊支持對并發請求數進行限制, 還有對請求來源進行限制。可以用來防止DDOS攻擊。
閱讀本文須知道nginx的配置文件結構和語法。

1. 默認配置語法

基于Nginx實現訪問控制、連接限制

nginx.conf作為主配置文件

include /etc/nginx/conf.d/*.conf讀到這會把該目錄的.conf也讀進來

1.1 全局性的和服務級別的

?
1
2
3
4
user 設置使用用戶
worker_processes 進行增大并發連接數的處理 跟cpu保持一致 八核設置八個
error_log nginx的錯誤日志
pid nginx服務啟動時候pid

1.2 event對事件的模塊

?
1
2
worker_connections一個進程允許處理的最大連接數
use定義使用的內核模型

1.3 server

?
1
2
3
4
5
root 首頁的路徑
index 首頁默認訪問哪個頁面
error_page 500 502 503 504 /50x.html 錯誤頁面 前面的500是**`http狀態碼`**
systemctl restart nginx.service 重啟nginx
systemctl reload nginx.service 不關閉服務柔和地重啟

2. HTTP

基于Nginx實現訪問控制、連接限制

?
1
2
curl-v http://www.baidu.com >/dev/null #-v 同時顯示狀態碼等信息
nginx -V #顯示nginx版本及配置文件等信息

3. 日志

日志類型:error.log和access.log

?
1
2
error.log(記錄處理http請求的錯誤狀態以及nginx本身服務的錯誤狀態)
access.log(每次http請求的訪問狀態)

log_format:設置了日志的記錄格式,定義日志以什么樣的樣式記錄到error.log、access.log中,log_format的配置只能配置在http模塊中。

access_log配置在http中。

4. 變量

基于Nginx實現訪問控制、連接限制

連接限制 limit_conn_module

limit_conn_module:TCP連接頻率限制, 一次TCP連接可以建立多次HTTP請求。
配置語法:

 

limit_conn_module語法 范圍 說明
limit_conn_zone 標識 zone=空間名:空間大小; http 用于聲明一個存儲空間
limit_conn 空間名 并發限制數; http、server或location 用于限制某個存儲空間的并發數量
limit_conn_log_level 日志等級; http、server或location 當達到最大限制連接數后, 記錄日志的等級
limit_conn_status 狀態碼; http、server或location 當超過限制后,返回的響應狀態碼,默認是503

 

limit_conn_zone會聲明一個zone空間來記錄連接狀態, 才能限制數量。
zone是存儲連接狀態的空間, 以鍵值對存儲, 通常以客戶端地址$binary_remote_addr作為key來標識每一個連接。
zone空間被耗盡,服務器將會對后續所有的請求返回503(Service Temporarily Unavailable)錯誤。

請求限制 limit_req_mudule

limit_req_mudule:HTTP請求頻率限制, 一次TCP連接可以建立多次HTTP請求。
配置語法:

 

limit_req_mudule語法 范圍 說明
limit_req_zone key zone=空間名:空間大小 rate=每秒請求數; http 用于聲明一個存儲空間
limit_req zone=空間名 [burst=隊列數] [nodelay]; http、server或location 用于限制某個存儲空間的并發數量

 

這里的zone也是用來存儲連接的一個空間。

burst 和 nodelay

burstnodelay對并發請求設置了一個緩沖區和是否延遲處理的策略。
先假設有如下zone配置。

?
1
2
3
http {
 limit_req_zone $binan_remote_addr zone=req_zone:1m rate=10r/s;
}

情況 1:limit_req zone=req_zone;

  • 1秒發送10個請求, 正常響應。
  • 1秒發送13個請求, 前10個請求正常響應, 后3個請求返回503(Service Temporarily Unavailable)

不加brustnodelay的情況下,rate=10r/s每秒只能執行10次請求, 多的直接返回503錯誤。

 

情況 2:limit_req zone=req_zone brust=5;

  • 1秒發送10個請求, 正常響應。
  • 1秒發送13個請求, 前10個請求正常響應, 后3個請求放入brust等待響應。
  • 1秒發送20個請求, 前10個請求正常響應, 后5個請求放入brust等待響應, 最后5個請求返回503(Service Temporarily Unavailable), 第2秒執行brust中的5個請求。
  • 1秒發送20個請求, 前10個請求正常響應, 后5個請求放入brust等待響應, 最后5個請求返回503(Service Temporarily Unavailable), 第2秒發送6個請求, 執行brust中的5個請求, 將5個請求放入brust等待響應, 剩下的1個請求返回503(Service Temporarily Unavailable)

brust=5不加nodelay的情況下, 有一個容量為5的緩沖區,rate=10r/s每秒只能執行10次請求, 多的放到緩沖區中, 如果緩沖區滿了, 就直接返回503錯誤。而緩沖區在下一個時間段會取出請求進行響應, 如果還有請求進來, 則繼續放緩沖區, 多的就返回503錯誤。

情況 3:limit_req zone=req_zone brust=5 nodelay;

  • 1秒發送10個請求, 正常響應。
  • 1秒發送13個請求,13個請求正常響應。
  • 1秒發送20個請求, 前15個請求正常響應, 后5個請求返回503(Service Temporarily Unavailable)
  • 1秒發送20個請求, 前15個請求正常響應, 后5個請求返回503(Service Temporarily Unavailable), 第2秒發送6個請求, 正常響應。

brust=5nodelay的情況下, 有一個容量為5的緩沖區,rate=10r/s每秒能執行15次請求,15=10+5。多的直接返回503錯誤。

 

基于 IP 的訪問控制

http_access_module: 基于IP的訪問控制, 通過代理可以繞過限制, 防君子不防小人。

 

http_access_module語法 范圍 說明
allow IP地址 | CIDR網段 | unix: | all; http、server、location和limit_except 允許IP地址、CIDR格式的網段、unix套接字或所有來源訪問
deny IP地址 | CIDR網段 | unix: | all; http、server、location和limit_except 禁止IP地址、CIDR格式的網段、unix套接字或所有來源訪問

 

allow和deny會按照順序, 從上往下, 找到第一個匹配規則, 判斷是否允許訪問, 所以一般把all放最后

?
1
2
3
4
5
6
7
location / {
 deny 192.168.1.1;
 allow 192.168.1.0/24;
 allow 10.1.1.0/16;
 allow 2001:0db8::/32;
 deny all;
}

 

基于用戶密碼的訪問控制

http_auth_basic_module: 基于文件匹配用戶密碼的登錄

 

http_auth_basic_module語法 范圍 說明
auth_basic 請輸入你的帳號密碼 | off; http、server、location和limit_except 顯示用戶登錄提示 (有些瀏覽器不顯示提示)
auth_basic_user_file 存儲帳號密碼的文件路徑; http、server、location和limit_except 從文件中匹配帳號密碼

 

密碼文件可以通過htpasswd生成,htpasswd需要安裝yum install -y httpd-tools

?
1
2
3
4
5
6
7
8
# -c 創建新文件, -b在參數中直接輸入密碼
$ htpasswd -bc /etc/nginx/conf.d/passwd user1 pw1
Adding password for user user1
$ htpasswd -b /etc/nginx/conf.d/passwd user2 pw2
Adding password for user user2
$ cat /etc/nginx/conf.d/passwd
user1:$apr1$7v/m0.IF$2kpM9NVVxbAv.jSUvUQr01
user2:$apr1$XmoO4Zzy$Df76U0Gzxbd7.5vXE0UsE0

 

參考資料

limit_conn_module

limit_req_mudule

http_access_module

http_auth_basic_module

總結

以上所述是小編給大家介紹的基于Nginx實現訪問控制、連接限制,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!

原文鏈接:https://mp.weixin.qq.com/s/0u24cnG8L34Bg-oWAKQ2rQ

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 四虎永久在线精品免费影视 | japanhd粗暴video| 四虎4hu永久免费 | 亚洲福利视频在线观看 | 王的视频vk | 超时空要爱国语完整版在线 | 西施打开双腿下面好紧 | 免费二级毛片免费完整视频 | gayxxx视频| 99精品热线在线观看免费视频 | 欧美日韩亚洲另类人人澡 | 日韩精品在线视频观看 | 亚洲 国产精品 日韩 | 波多野结衣之高校教师 | 国产欧美视频在线观看 | 扒开腚眼子视频大全 | 16男男gaygays| 亚洲成年网 | 午夜精品在线 | 亚洲欧美日韩一区成人 | 韩国帅男同gay网站 韩国三级在线播放 | avtt在线观看| 亚洲AV久久久久久久无码 | 欧美日韩国产在线一区 | japan日韩xxxx69hd japanese在线观看 | 国产精品免费久久久久影院小说 | 爱爱小说漫画 | 欧美三级一区 | 日韩激情视频在线观看 | 日本孕妇与黑人xxxxxx | 无人区乱码区1卡2卡三卡在线 | 91久久精品国产一区二区 | 俄罗斯极品h在线 | 亚洲天堂免费看 | 91丝袜足控免费网站xx | 亚洲品质自拍网站 | 关晓彤被调教出奶水的视频 | 女医学护士一级毛片 | 男人操男人 | 女人张开腿让男人桶视频免费大全 | 毛片网站观看 |