【问题标题】:Varnish trailing slash rewrite清漆尾部斜线重写
【发布时间】:2018-04-22 13:00:23
【问题描述】:

我正在尝试设置 varnish 来处理我的默认 url,即 example.url.co.uk。

如果它点击 example.url.co.uk 或 example.url.co.uk/,我希望它重定向或重写到 example.url.co.uk/site,在 tomcat 应用程序中将其发送到登录页面.

sub vcl_recv {

if ((req.url ~ "") || (req.url ~"^/")) {
       set req.http.location = "https://example.url.co.uk/site" + req.url;
       return (synth(750, "Found"));
     }

}


sub vcl_synth {
    if (resp.status == 301) {
        set resp.http.Location = req.http.x-redir;
        return (deliver);
    }

    if (resp.status == 750) {
        set resp.http.Location = req.http.location;
        set resp.status = 302;
        return (deliver);
    }

}

但是,当我使用我的尝试时,我得到了 example.url.co.uk/site/site/site/site...

所以我显然陷入了一个循环,我已经为此苦苦挣扎了一周,试图找到正确的解决方案!我敢肯定,请把我从自己的愚蠢中拯救出来!

【问题讨论】:

    标签: varnish-vcl varnish-4


    【解决方案1】:

    问题是req.url ~ "" 匹配一切。因为它被用作正则表达式。你的req.url ~ "^/"也太开放了。

    改成:

    if (req.url == "" || req.url ~"^/$") {

    应该修复它,验证它是空的还是/它自己。

    这是一个简单的 varnishtest 来验证行为:

    varnishtest "Test Redirect"
    
    server s1 {
        rxreq
        txresp
        rxreq
        txresp
    } -start
    
    varnish v1 -vcl+backend { 
    
    
    sub vcl_recv {
    
    if (req.url == "" || req.url ~"^/$") {
           set req.http.location = "https://example.url.co.uk/site" + req.url;
           return (synth(750, "Found"));
         }
    
    }
    
    
    sub vcl_synth {
        if (resp.status == 301) {
            set resp.http.Location = req.http.x-redir;
            return (deliver);
        }
    
        if (resp.status == 750) {
            set resp.http.Location = req.http.location;
            set resp.status = 302;
            return (deliver);
        }
    
    }
    
    
    } -start
    
    client c1 {
        txreq -url "/" 
        rxresp
        expect resp.status == 302
    } -run
    
    
    client c1 {
        txreq -url "/site" 
        rxresp
        expect resp.status == 200
    } -run
    

    你可以用varnishtest test.vtc运行它

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      • 1970-01-01
      • 2016-06-06
      • 2015-01-11
      • 2010-09-19
      • 1970-01-01
      相关资源
      最近更新 更多