在 macOS 下可通过 Nginx 的 if 指令配合 $http_user_agent 变量限制特定 User-Agent 访问,需将规则置于 server 块内,使用 return 403 拦截,注意正则转义与语法校验。

在 macOS 下使用 Nginx 限制特定 User-Agent 访问,核心是通过 if 指令配合 $http_user_agent 变量实现匹配与拦截。操作简单但需注意语法细节和作用域限制。
确认 Nginx 已启用并支持 if 指令
macOS 上常用 Homebrew 安装 Nginx(brew install nginx),默认配置已支持 if。但需注意:if 不能直接写在 server 块外(如 http 块中),必须放在 server 或 location 内;且不建议在 location 中嵌套复杂逻辑,优先放在 server 级处理。
屏蔽指定 User-Agent 的常见写法
在对应 server 块中添加如下配置:
- 屏蔽单个 UA(如 curl):
if ($http_user_agent ~* "curl") { return 403; } - 屏蔽多个 UA(用竖线分隔):
if ($http_user_agent ~* "(curl|wget|httpie)") { return 403; } - 屏蔽含关键词的 UA(如所有带 “scanner” 的):
if ($http_user_agent ~* "scanner") { return 403; } - 区分大小写匹配(去掉
*):if ($http_user_agent ~ "Curl/7\.") { return 403; }
避免常见陷阱
— if 在 location 中可能因重写或内部跳转失效,建议统一放在 server 块顶部。
— 正则表达式中的点号(.)、括号等需转义,例如匹配 Python-urllib/3.9 应写为 "Python-urllib/3\.9"。
— 不要使用 deny all,它对 User-Agent 无效;return 403 是标准做法。
— 修改后务必执行 sudo nginx -t 检查语法,再 sudo nginx -s reload 生效。
验证是否生效
终端中用 curl 模拟请求:curl -I -A "curl/8.0.1" http://localhost → 应返回 403 Forbiddencurl -I -A "Mozilla/5.0" http://localhost → 应正常返回 200 OK
也可在浏览器开发者工具 Network 面板中查看请求头与响应状态。










