# Nginx訪問限制怎么配置
## 前言
在Web服務器管理中,合理配置訪問限制是保障服務穩定性和安全性的重要手段。Nginx作為高性能的Web服務器/反向代理服務器,提供了多種訪問控制功能。本文將詳細介紹Nginx中常見的訪問限制配置方法,包括連接頻率限制、請求速率限制、IP黑白名單等。
---
## 一、基礎訪問控制模塊
### 1.1 allow/deny指令
Nginx通過`ngx_http_access_module`模塊實現基礎的IP訪問控制:
```nginx
location /admin/ {
deny 192.168.1.100; # 禁止特定IP
allow 192.168.1.0/24; # 允許整個子網
deny all; # 默認拒絕其他所有
}
注意事項:
- 規則按順序匹配,遇到第一個匹配項即停止
- 通常最后設置deny all
作為默認規則
- IPv6地址需要用方括號包裹:deny [2001:0db8::1]
對于更復雜的IP分組,可以使用ngx_http_geo_module
:
geo $blocked_ip {
default 0;
192.168.1.100 1;
10.0.0.0/8 1;
include /etc/nginx/conf.d/blocked_ips.conf;
}
server {
if ($blocked_ip) {
return 403;
}
}
ngx_http_limit_req_module
模塊實現漏桶算法限流:
http {
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
server {
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
proxy_pass http://backend;
}
}
}
參數說明:
- zone=api_limit:10m
:定義10MB內存空間存儲狀態
- rate=10r/s
:每秒10個請求的限制
- burst=20
:允許突發20個請求
- nodelay
:不延遲處理突發請求
可以組合多個限制條件:
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=5r/s;
limit_req_zone $server_name zone=per_server:10m rate=100r/s;
server {
limit_req zone=per_ip burst=10;
limit_req zone=per_server burst=50;
}
ngx_http_limit_conn_module
限制單個客戶端的并發連接數:
http {
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
server {
location /download/ {
limit_conn conn_limit 5; # 每個IP最多5個連接
limit_rate_after 10m; # 下載10MB后開始限速
limit_rate 100k; # 限速為100KB/s
}
}
}
limit_conn_zone $binary_remote_addr zone=per_ip:10m;
limit_conn_zone $server_name zone=per_server:10m;
server {
limit_conn per_ip 10;
limit_conn per_server 200;
}
# 阻止常見漏洞掃描
location ~* (wp-admin|phpmyadmin) {
deny all;
}
# 限制User-Agent
if ($http_user_agent ~* (wget|curl|scanbot)) {
return 403;
}
結合Lua腳本實現動態封禁:
http {
lua_shared_dict ip_blacklist 10m;
server {
access_by_lua_block {
local blacklist = ngx.shared.ip_blacklist
if blacklist:get(ngx.var.remote_addr) then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
}
}
http {
limit_req_zone $binary_remote_addr zone=api:10m rate=2r/s;
limit_conn_zone $binary_remote_addr zone=api_conn:10m;
server {
location /api/v1/ {
limit_req zone=api burst=5 nodelay;
limit_conn api_conn 3;
limit_rate 50k;
proxy_pass http://api_backend;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
server {
location /download/ {
limit_conn addr 3;
limit_rate_after 50m;
limit_rate 1m;
# 限制特定文件類型
if ($request_uri ~* \.(zip|rar|tar)$) {
limit_rate 500k;
}
}
}
limit_req_status 429;
limit_conn_status 503;
限流不生效:
內存不足:
nginx -t # 測試配置
dmesg | grep nginx # 查看OOM錯誤
誤封問題:
$http_x_forwarded_for
獲取真實IP(需前端有代理)合理的訪問限制配置能有效防止CC攻擊、暴力破解等安全威脅,同時保障正常用戶的訪問體驗。建議根據實際業務需求組合使用多種限制策略,并定期審查和調整規則。對于高安全要求的場景,建議結合專業的WAF防火墻使用。
注意:所有配置修改后需執行
nginx -s reload
生效 “`
本文共計約1600字,涵蓋了Nginx訪問限制的主要配置方法和實踐建議。實際應用中應根據具體業務需求調整參數值。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。