Nginx 訪問(wèn)控制的多種方法
一、IP 白名單與黑名單
1. 允許/拒絕指定IP
location /admin/ {
allow 192.168.1.100; # 僅允許該IP訪問(wèn)
allow 10.0.0.0/24; # 或允許整個(gè)網(wǎng)段
deny all; # 其他全部拒絕
}2. 全局黑名單
http {
geo $block_ip {
default 0;
1.2.3.4 1;
5.6.7.0/24 1;
}
server {
if ($block_ip) {
return 403;
}
...
}
}geo模塊適合大規(guī)模黑名單。
二、基于路徑、方法、參數(shù)的訪問(wèn)控制
1. 路徑限制
location /private/ {
deny all;
}2. 方法限制
location /api/ {
if ($request_method !~ ^(GET|POST)$) {
return 405;
}
}3. 參數(shù)限制
location /api/ {
if ($arg_token = "") {
return 403;
}
}三、HTTP 基本認(rèn)證(Basic Auth)
1. 啟用賬號(hào)密碼訪問(wèn)控制
location /secure/ {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}.htpasswd文件可用htpasswd工具生成。
四、Referer/UA 防盜鏈與防刷
1. 防盜鏈(Referer控制)
location /static/ {
valid_referers none blocked *.example.com;
if ($invalid_referer) {
return 403;
}
}2. 防刷(UA控制)
if ($http_user_agent ~* "curl|bot|spider") {
return 403;
}五、客戶端證書校驗(yàn)(mTLS)
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_client_certificate /etc/nginx/ssl/ca.crt;
ssl_verify_client on;
...
}適用于金融、政企等高安全場(chǎng)景。
六、限速限流(流量控制)
1. 單IP限速
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=5r/s;
location /api/ {
limit_req zone=req_limit burst=10 nodelay;
}2. 連接數(shù)限制
limit_conn_zone $binary_remote_addr zone=conn_limit:10m; limit_conn conn_limit 10;
七、地理位置訪問(wèn)控制(GeoIP)
需安裝第三方模塊(如 ngx_http_geoip_module),可按國(guó)家/地區(qū)控制訪問(wèn):
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default 0;
CN 1; # 僅允許中國(guó)
}
server {
if ($allowed_country = 0) {
return 403;
}
}八、API 安全與精細(xì)控制
1. 精細(xì)化路徑/參數(shù)/方法控制
location /api/admin/ {
allow 127.0.0.1;
deny all;
}
location ~* /api/(delete|update)/ {
if ($request_method != "POST") {
return 405;
}
}2. 配合 OpenResty/Lua 動(dòng)態(tài)訪問(wèn)控制
可以根據(jù)業(yè)務(wù)邏輯、數(shù)據(jù)庫(kù)、Redis等動(dòng)態(tài)判斷是否允許訪問(wèn)。
九、企業(yè)級(jí)訪問(wèn)控制建議
- 重要接口建議多重保護(hù)(IP+密碼+限流+Referer)
- 敏感路徑建議只對(duì)內(nèi)網(wǎng)或特定用戶開放
- 日志記錄所有被拒絕的訪問(wèn),便于審計(jì)和溯源
- 定期更新黑名單、白名單,防止失效
- 結(jié)合 WAF、API 網(wǎng)關(guān)、堡壘機(jī)等安全產(chǎn)品提升防護(hù)等級(jí)
十、訪問(wèn)控制常見(jiàn)問(wèn)題排查
- 控制未生效?
- 檢查 location 優(yōu)先級(jí)、正則匹配順序。
- 誤封正常用戶?
- 檢查 IP/Referer/UA 規(guī)則,避免誤傷。
- 限流后接口不可用?
- 合理設(shè)置 burst,允許偶發(fā)高峰。
- 黑名單太大影響性能?
- 用 geo、map 或 Lua 動(dòng)態(tài)判斷,避免配置膨脹。
十一、完整訪問(wèn)控制配置示例
http {
geo $block_ip {
default 0;
1.2.3.4 1;
5.6.7.0/24 1;
}
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
server {
listen 80;
server_name www.example.com;
if ($block_ip) { return 403; }
location /admin/ {
allow 192.168.1.100;
deny all;
auth_basic "Admin";
auth_basic_user_file /etc/nginx/.htpasswd;
}
location /static/ {
valid_referers none blocked *.example.com;
if ($invalid_referer) { return 403; }
}
location /api/ {
limit_req zone=req_limit burst=20 nodelay;
if ($request_method !~ ^(GET|POST)$) { return 405; }
if ($arg_token = "") { return 403; }
}
}
}十二、多級(jí)訪問(wèn)控制策略
1. 服務(wù)全局、Server級(jí)、Location級(jí)控制
- http塊:全局黑名單/限流/Geo
- server塊:站點(diǎn)級(jí)白名單/認(rèn)證
- location塊:路徑級(jí)精細(xì)控制
示例:
http {
geo $block_ip { ... }
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=20r/s;
server {
if ($block_ip) { return 403; }
location /admin/ {
allow 10.0.0.0/8;
deny all;
}
location /api/ {
limit_req zone=req_limit burst=10 nodelay;
}
}
}建議高優(yōu)先級(jí)規(guī)則(如黑名單)放在上層,局部規(guī)則覆蓋全局。
十三、基于Header的訪問(wèn)限制
1. 按Header內(nèi)容限制訪問(wèn)
常用于API簽名、Token、特定應(yīng)用接入。
location /api/secure/ {
if ($http_x_token != "your-secret-token") {
return 403;
}
}2. 按Referer、Origin防止CSRF
if ($http_origin !~* ^https://trusted\.example\.com$) {
return 403;
}十四、按時(shí)間段控制訪問(wèn)
適用于限時(shí)活動(dòng)、夜間維護(hù)、灰度發(fā)布等。
map $time_iso8601 $block_time {
default 0;
~T02:..:.. 1; # 02點(diǎn)整點(diǎn)到02:59:59 拒絕
}
server {
if ($block_time) {
return 403;
}
}也可用 Lua/定時(shí)腳本實(shí)現(xiàn)更復(fù)雜的時(shí)間控制。
十五、灰度/AB測(cè)試的訪問(wèn)控制
1. 按用戶ID、Cookie、IP分流
map $cookie_abtest $upstream_group {
default "old";
"A" "new";
}
server {
location / {
proxy_pass http://$upstream_group;
}
}可結(jié)合 Lua 實(shí)現(xiàn)更靈活的灰度策略。
十六、動(dòng)態(tài)黑白名單(與外部系統(tǒng)結(jié)合)
1. 結(jié)合 Redis/MySQL 實(shí)現(xiàn)動(dòng)態(tài)名單
- 用 OpenResty/Lua 讀取 Redis/MySQL,將名單實(shí)時(shí)更新到共享內(nèi)存,支持熱更新。
- 適合大規(guī)模名單、頻繁變更場(chǎng)景。
示例:
access_by_lua_block {
local redis = require "resty.redis"
local red = redis:new()
red:connect("127.0.0.1", 6379)
local is_blocked = red:get("ip:" .. ngx.var.remote_addr)
if is_blocked == "1" then
ngx.exit(403)
end
}十七、日志、告警與審計(jì)
1. 記錄被拒絕訪問(wèn)的請(qǐng)求
log_format rejectlog '$remote_addr $request $status $http_user_agent $time_local'; access_log /var/log/nginx/reject.log rejectlog if=$access_denied;
$access_denied 可用 map/Lua 動(dòng)態(tài)賦值。
2. 集成告警
- 結(jié)合 ELK、Prometheus、Zabbix,監(jiān)控 403/405 等異常請(qǐng)求,自動(dòng)觸發(fā)告警。
十八、自動(dòng)化管理與集中策略
1. 配置集中管理
- 采用 include 引入統(tǒng)一黑白名單、認(rèn)證配置,便于多站點(diǎn)維護(hù)。
include /etc/nginx/whitelist.conf; include /etc/nginx/blacklist.conf;
2. 自動(dòng)化工具
- 配合 Ansible/SaltStack/Puppet 實(shí)現(xiàn)名單、限流、認(rèn)證等策略的自動(dòng)分發(fā)和熱更新。
十九、與WAF/堡壘機(jī)/認(rèn)證系統(tǒng)集成
1. WAF防護(hù)
- 可用 Nginx+OpenResty/Lua-resty-waf 或接入云WAF,實(shí)現(xiàn)SQL注入、XSS等攻擊防護(hù)。
2. 堡壘機(jī)/認(rèn)證系統(tǒng)
- 重要接口后端部署堡壘機(jī)或認(rèn)證代理,前端Nginx只允許堡壘機(jī)IP訪問(wèn)。
3. 第三方認(rèn)證(OAuth2、JWT等)
- 可用 Lua 動(dòng)態(tài)解析JWT、OAuth2 Token,按業(yè)務(wù)規(guī)則控制訪問(wèn)。
二十、常見(jiàn)安全場(chǎng)景實(shí)戰(zhàn)
1. 管理后臺(tái)只允許公司IP+二次認(rèn)證
location /admin/ {
allow 10.0.0.0/8;
deny all;
auth_basic "Admin Only";
auth_basic_user_file /etc/nginx/.htpasswd;
}2. API接口防刷+簽名校驗(yàn)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=5r/s;
location /api/ {
limit_req zone=api_limit burst=20 nodelay;
if ($http_x_sign = "") { return 403; }
}3. 靜態(tài)資源防盜鏈+限速
location /static/ {
valid_referers none blocked *.example.com;
if ($invalid_referer) { return 403; }
limit_rate 100k;
}二十一、訪問(wèn)控制優(yōu)化建議
- 分層分級(jí)設(shè)計(jì),重要資源多重防護(hù)
- 動(dòng)態(tài)名單、限流、認(rèn)證與自動(dòng)化結(jié)合,提升響應(yīng)和運(yùn)維效率
- 日志與監(jiān)控全覆蓋,異常及時(shí)告警
- 定期安全審計(jì)和回溯,防止策略失效或被繞過(guò)
到此這篇關(guān)于Nginx 訪問(wèn)控制的多種方法的文章就介紹到這了,更多相關(guān)Nginx 訪問(wèn)控制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx下WordPress鏈接(url偽靜態(tài))301永久重定向?qū)崿F(xiàn)方法
在幾個(gè)blog程序中折騰的結(jié)果,導(dǎo)致url連續(xù)二次變化。這是第三次了。 nginx 通過(guò)rewrite 使用 permanent; 參數(shù) 成301永久url重定向2012-09-09
Nginx+keepalived雙機(jī)熱備技術(shù)實(shí)踐
在互聯(lián)網(wǎng)的高可用性 服務(wù)中,單一的服務(wù)節(jié)點(diǎn)往往無(wú)法滿足業(yè)務(wù)對(duì)穩(wěn)定性和可用性的要求,雙機(jī)熱備是一種常見(jiàn)的高可用性解決方案,它通過(guò)兩臺(tái)服務(wù)器同時(shí)運(yùn)行相同的服務(wù),本文將詳細(xì)介紹如何在 Nginx 環(huán)境中部署雙機(jī)熱備方案,需要的朋友可以參考下2025-01-01
nginx實(shí)現(xiàn)動(dòng)靜分離的案例詳解
nginx 和 Tomcat 是兩個(gè)不同的服務(wù)器軟件,在分離部署方面有著各自的優(yōu)勢(shì)和適用場(chǎng)景,一般來(lái)說(shuō),Nginx 適合作為反向代理和負(fù)載均衡服務(wù)器,用于處理靜態(tài)文件和高并發(fā)請(qǐng)求,本文將大家介紹一下nginx實(shí)現(xiàn)動(dòng)靜分離的案例,需要的朋友可以參考下2023-08-08
Nginx反向代理如何到訪問(wèn)者機(jī)器上(后端調(diào)試)
這篇文章主要介紹了Nginx反向代理如何到訪問(wèn)者機(jī)器上(后端調(diào)試),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
nginx中g(shù)zip_types匹配content-type的方式
這篇文章主要介紹了nginx中g(shù)zip_types匹配content-type的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

