【问题标题】:extract value of a query parameter in varnish在清漆中提取查询参数的值
【发布时间】:2012-11-21 23:41:43
【问题描述】:

我有这个网址:

http://my.api.com/v1/{api_key}/{user_token}/?someparam=hello&force=true&someotherparam=world

其中api_keyuser_token 是uuid

如何提取force 查询参数的值,如果缺少强制参数或将其设置为假,则从清漆缓存中进行查找。如果它设置为 true,我需要访问我的后端服务器。查询参数可以是任意顺序。

【问题讨论】:

    标签: regex caching varnish query-parameters


    【解决方案1】:

    我建议你颠倒逻辑:

    sub vcl_recv { 
        if (req.url ~ "(?i)force=(true|yes)") {
            return(pass);
        }
        // other values will fall through to the safe default VCL that will do return(lookup).
    }
    

    【讨论】:

    【解决方案2】:

    与 Ikarsten 的回答类似,但与 xxxtoken 参数不匹配。

    sub vcl_recv { 
        if (req.url ~ "(\?|\&)token=") {
            return(pass);
        }
    }
    

    【讨论】:

      【解决方案3】:

      在您的 vcl_recv 中,您可以使用以下内容检查不存在的 force= 或 force=true:

       if(!req.url ~ "&|\?force=" || req.url ~ "&|\?force=true") {
           return(pass);
       }
      

      【讨论】:

      • 这种强制查找跳过了在默认 VCL 中完成的授权和 cookie 检查,因此如果其中任何一个正在使用,则有点危险。您最终可以使用此缓存用户特定的数据。始终建议使用默认 VCL。
      • 我并没有假装写一个完整的 vcl_recv 配置,而是尝试回答提出的问题。应该很好地使用任何规则,无论是否是默认规则,都应该自然考虑。在不知道当前配置的情况下尝试编写完整的安全配置是不可能的。
      猜你喜欢
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多