繁体   English   中英

清漆/ NGINX基于时间的限制

[英]Varnish / NGINX time based restrictions

我正在尝试为我们的CMS实施基于时间和地理位置的限制。 以下是当前设置的样子

  • Nginx(端口:443):用于SSL终止和URL操作
  • 清漆(端口:80):从后端缓存动态内容
  • Apache,PHP,MySQL:自定义CMS在此堆栈上运行

要求是在特定时间段内,来自特定国家/地区的流量无法访问特定的URL /类别,而来自世界其他地区的流量可以不受限制地访问相同的URL /类别。

地理位置部分似乎并不令人生畏,但我无法找到有关基于时间限制流量的任何信息。

当然,我可以设置两种清漆或nginx配置,一种具有限制,一种没有限制,可以根据我想做什么的时间进行cron作业来替换物理文件,但是我希望有一个更干净的解决方案。

我知道所有这些都可以用PHP来处理,但是我不能从堆栈中删除Varnish,我必须放入5-6台服务器来处理负载,这会增加我无法证明的成本。

救命?

now可以在清漆中使用,然后对清漆中的日期进行正则表达式以生成403或其他值

这里是一个示例varnishtest关于如何使用显示的情况now

varnishtest "Time Gate"

server s1 {
       rxreq
       txresp

} -start

varnish v1 -vcl+backend {
    import std;

    sub vcl_recv {
        //now is in RFC format: Thu, 26 Apr 2018 08:40:22 GMT
        //set it in a "ghost header" to convert it to a STRING otherwise it is a TIME
        // and regex won't work
        set req.http.now_string = now;

        //Check the hour
        if(req.http.now_string ~ "^.* [0-9]{4} 08") {
              // Do stuff when its 08:xx
        } else {
             // Otherwise do something else.
        }


    }

    sub vcl_deliver {
        set resp.http.x-forwarded-for = client.ip;
        set resp.http.now_string = req.http.now_string;
    }
} -start

client c1 {
    txreq  -url "/1"
    rxresp
    expect resp.http.now_string ~  "2018"


} -run

关于地理保护,您也可以使用https://github.com/varnish/libvmod-geoip此vmod在清漆中执行此操作。 (还没有亲自作证)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM