nginx basic 利用nginx限制某些特定目录做二次效验
有时候某些网站不知道可能有什么漏洞,防止被扫描的时候,可以简单用这个方法,一定程度上可以杜绝暴露和扫描
但仅限于后台纯浏览器访问,不适合一些接口的二次效验?单纯自己浏览器用,输入二次验证就好了,部分目录防爆破
在server的头部前面放下面代码
# ===== 系统 Basic Auth 条件放行(按原始请求 URI 判断,不受内部 rewrite 影响)=====
map $request_uri $kf_admin_auth {
default off;
# --- 放行 1:pusher 服务端 webhook(POST /admin/event,无凭据)---
~^/admin/event(?![A-Za-z0-9_-]) off;
# --- 放行 2:访客聊天全部接口 /admin/event/* ---
~^/admin/event/ off;
# --- 放行 3:PC 访客 Pusher socket_auth ---
~^/admin/login/auth(?![A-Za-z0-9_-]) off;
# --- 放行 4:兼容 index.php 直连形式的访客接口(防绕过配置的对称放行)---
~^/index\.php\?s=/admin/event off;
~^/index\.php\?s=/admin/login/auth off;
# --- 需要保护 ---
~^/admin/ "KF Admin";
~^/platform/ "KF Admin";
~^/mobile/admin/ "KF Admin";
~^/mapp/admin/ "KF Admin";
# --- 防绕过:通过 /index.php?s=/admin/... 直连后台 ---
~^/index\.php\?s=/(admin|platform)/ "KF Admin";
~^/index\.php/(admin|platform)/ "KF Admin";
}
# 新增链式 map用于限制次数
map $kf_admin_auth $kf_auth_limit_key {
default "";
"KF Admin" $binary_remote_addr;
}
# 新增zone 必须也在 http 级,紧跟在 map 后面
limit_req_zone $kf_auth_limit_key zone=kfauth:1m rate=2r/s;
下面就是放在server块内,然后location前的代码,重要的就是那3行
server {
listen 443 ssl http2;
......
# ===== ④ 放在 443 这个 server 块内,和 auth_basic 两行挨着 =====
auth_basic $kf_admin_auth;
auth_basic_user_file /www/server/nginx/conf/kf_admin.pasd;
limit_req zone=kfauth burst=20 nodelay;
# 下面原有的 location / 伪静态 / PHP 转发全部不动
location / { ... }
} 