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

NGINX多条件if配置需求:满足指定URL参数则允许访问否则返回403

NGINX 403访问控制配置方案

你的需求是仅允许abc.com/abc.m3u8?token=abcd这类请求访问,其余全部返回403。当前的配置逻辑存在错误,无法实现预期效果,下面给出两种可靠的配置方案:

方案一:用Location拆分逻辑(推荐)

这种方式更符合NGINX的配置最佳实践,避免复杂的if嵌套问题:

server {
    server_name abc.com;

    # 精准匹配abc.m3u8请求
    location ~* /abc.m3u8$ {
        # 校验token参数是否为abcd,不匹配则返回403
        if ($arg_token !~* "^abcd$") {
            return 403;
        }
        # 此处添加正常的资源处理逻辑,比如代理到后端或指定文件路径
        # root /path/to/your/files;
        # 或 proxy_pass http://your-backend;
    }

    # 所有其他请求直接返回403
    location / {
        return 403;
    }
}

方案二:单IF逻辑判断

如果想在全局用单个if实现,需要修正逻辑表达式:

server {
    server_name abc.com;

    # 只要不满足「URI是abc.m3u8 且 token是abcd」,就返回403
    if (!($uri ~* "/abc.m3u8$") || !($arg_token ~* "^abcd$")) {
        return 403;
    }

    # 正常处理逻辑
}

原配置无效的原因

你写的条件是$uri !~* "^(.*)/(abc.m3u8)(.*)" && $arg_token !~* "abcd",意思是**同时满足「URI不含abc.m3u8」和「token不是abcd」**才返回403。但以下两种情况会绕过403,不符合需求:

  • URI是abc.m3u8但token不对
  • URI不是abc.m3u8但token是abcd

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:35:39