You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx配置:拦截Firefox/Chrome User-Agent,设置IP与Referer白名单

Nginx 配置实现指定UA拦截+IP/Referer白名单

完整配置示例

# 初始化拦截标记变量,默认不触发拦截
set $block "";

# 第一步:识别需要检查的User-Agent
if ($http_user_agent ~ (Firefox|Chrome)) {
    set $block "${block}A";
}

# 第二步:校验请求IP是否在白名单内
if ($remote_addr !~ ^(44\.221\.341\.44|44\.221\.342\.33)$) {
    set $block "${block}B";
}

# 第三步:校验Referer是否在白名单内
if ($http_referer !~* ^https?://(test\.com|test\.nl|test\.de)/) {
    set $block "${block}C";
}

# 只有三个条件同时满足时,才返回403拦截
if ($block = "ABC") {
    return 403;
}

配置逻辑说明

  • 用$block变量累计拦截条件标记,初始为空,只有满足对应条件才追加标记。
  • 先锁定需要拦截的UA(Firefox/Chrome),标记A——只有这类请求才需要后续白名单校验。
  • 如果请求IP不在指定的两个白名单IP里,追加标记B;如果Referer不在允许的域名列表里,追加标记C。
  • 最终只有当$block等于ABC时,才会返回403:
    • 只要是白名单IP的请求,不管UA是什么都能访问;
    • 只要Referer符合白名单,不管UA是什么都能访问;
    • 只有UA是Firefox/Chrome、IP不在白名单、Referer也不在白名单的请求,才会被拦截。

补充注意事项

  • Nginx不推荐嵌套if,用变量拼接的方式是最稳妥的多条件判断方案。
  • Referer匹配用~*实现不区分大小写,^https?://确保匹配完整的域名前缀,避免被类似xtest.com的域名绕过。
  • 如果需要允许空Referer的请求,把Referer判断条件改成!~* ^https?://(test\.com|test\.nl|test\.de)/|^$即可。

内容的提问来源于stack exchange,提问作者user19744349

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:41:13