在 Nginx(或openresty) 中拒絕(deny)一個 IP 段可以通過 deny
指令結合 CIDR 表示法(無類別域間路由)來實現。以下是具體操作步驟:
1. 修改 Nginx 配置文件
找到你的 Nginx 配置文件(通常為 nginx.conf
或站點配置文件,如 /etc/nginx/sites-available/default
),在需要限製的 server
或 location
塊中添加規則。
示例配置
server { listen 80; server_name example.com; # 拒絕特定 IP 段(如 192.168.1.0/24) deny 192.168.1.0/24; # 允許其他所有 IP allow all; location / { root /var/www/html; index index.html; } }
2. CIDR 表示法說明
192.168.1.0/24
:表示從192.168.1.0
到192.168.1.255
的所有 IP。10.0.0.0/16
:表示從10.0.0.0
到10.0.255.255
的所有 IP。
3. 規則生效順序
Nginx 的 allow
和 deny
指令按從上到下的順序匹配,遵循“首次匹配優先”原則。
若需拒絕某個 IP 段但允許其中的個別 IP,需將 allow
放在 deny
之後:
# 先允許特定 IP,再拒絕整個段 allow 192.168.1.100; deny 192.168.1.0/24; allow all;
4. 重載 Nginx 配置
保存文件後,檢查語法並重載配置:
# 檢查語法 sudo nginx -t # 重載配置(無需重啟服務) sudo nginx -s reload
5. 驗證規則
通過以下方式測試 IP 是否被拒絕:
- 使用被拒絕的 IP 訪問網站,觀察是否返回
403 Forbidden
。 - 查看 Nginx 訪問日誌:
tail -f /var/log/nginx/access.log
常見場景示例
場景 1:拒絕多個 IP 段
deny 192.168.1.0/24; deny 10.0.0.0/16; allow all;
場景 2:僅拒絕特定路徑
location /admin { deny 192.168.1.0/24; allow all; # 其他配置... }
注意事項
- 防火牆配合:大規模 IP 攔截建議結合防火牆(如
iptables
或ufw
)使用,以減輕 Nginx 負擔。 - 動態 IP 攔截:對於頻繁變化的 IP 攻擊,可結合
fail2ban
工具實現動態封禁。
通過上述步驟,你可以高效地通過 Nginx 拒絕特定 IP 段的訪問。