深入Nginx二:通過Nginx限制連線併發
阿新 • • 發佈:2021-02-16
文章目錄
一、背景
- 在網際網路應用中,大規模的連線及請求會給伺服器巨大的壓力,這時候我們需要考慮對同一個IP的連線數及併發數進行限制。
- 在Nginx的preaccess階段通過http_limit_conn_module 模組限制每個IP連線數,並通過http_limit_req_module 模組限制請求併發處理的頻率。
二、限制連線數
- 限制連線數通過limit_conn 指令進行定義,針對全部worker程序的(工作程序通過共享記憶體中的關鍵鍵值的定義進行限制),並依賴於Nginx取得的真實的IP。
- 首先定義共享記憶體大小及關鍵鍵值
- 其次根據定義配置限制併發連線數
– 格式: limit_conn zone number - 再次記錄日誌及向客戶端返回錯誤碼
– 格式: limit_conn_log_level error|info|warn|notice;limit_conn_status code
- 例項:
http{
...
# 限制連線共享記憶體
limit_conn_zone $binary_remote_addr zone=limit_addr:10m;
server {
listen 80 default_server;
listen [ ::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
limit_conn_status 500;
limit_conn_log_level warn;
# 限制返回速度
limit_rate 50;
# 限制併發連線為1;
limit_conn limit_addr 1;
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
- 測試:
- 在客戶端上發起正常請求
- 在同一客戶端上再次發起請求