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

如何在Nginx中拒绝所有URI,仅放行指定单个URL?

解决方案:Nginx仅放行指定URL,拦截其余请求

没问题,这事儿在Nginx里很好实现,核心就是精准匹配你要放行的/page?param=something(包括查询参数),剩下的请求直接拦截。给你两种靠谱的方案,按需选择:

方案一:精确匹配+参数校验(最常用)

这种方案逻辑直接,适合单一规则的场景,先精准匹配URI为/page的请求,再校验查询参数param的值是否为something,符合条件就放行,否则和其他所有请求一起拦截。

配置代码如下:

server {
    listen 80;
    server_name your-domain.com; # 替换成你的实际域名

    # 仅放行URI为/page且param=something的请求
    location = /page {
        # 校验查询参数param的值
        if ($arg_param != "something") {
            return 403; # 参数不符,直接拦截(返回403禁止访问)
        }
        # 这里写你正常的业务处理逻辑,比如反向代理到后端或者指向静态文件
        # 示例:proxy_pass http://your-backend-service;
        # 示例:root /var/www/your-site;
    }

    # 拦截所有其他未匹配的请求
    location / {
        return 403; # 也可以改成return 404; 返回未找到
    }
}

关键细节说明:

  • location = /page是精确匹配,只会匹配URI严格等于/page的请求,不会匹配/page/、/page1这类相似路径,保证精准度。
  • $arg_param是Nginx内置变量,直接获取查询参数中param的值,不用自己解析URL。
  • 如果需要忽略大小写(比如允许Param=Something),可以把判断改成if ($arg_param !~* "^something$"),用不区分大小写的正则匹配。

方案二:用map指令统一管理(适合多规则场景)

如果以后可能要添加更多放行规则,用map指令会更清晰,它可以根据完整请求URI(包含查询参数)统一设置是否允许访问的变量。

配置代码如下:

# 在server块外部定义map规则
map $request_uri $allow_access {
    default 0; # 默认不允许访问
    ~^/page\?param=something$ 1; # 匹配到目标URL则允许访问
}

server {
    listen 80;
    server_name your-domain.com;

    # 根据map变量判断是否拦截
    if ($allow_access = 0) {
        return 403;
    }

    # 处理允许的请求
    location = /page {
        # 你的业务处理逻辑
    }
}

配置后必做步骤:

  1. 用nginx -t命令检查配置文件语法是否正确,确保没有拼写错误。
  2. 确认无误后,执行nginx -s reload重启Nginx使配置生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:02:40