首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清漆/ NGINX时间限制

清漆/ NGINX时间限制
EN

Stack Overflow用户
提问于 2018-04-25 11:37:15
回答 1查看 163关注 0票数 2

我试图实现时间和地理位置的限制,我们的CMS。下面是当前设置的样子

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

这种要求是,在一段时间内,来自特定国家的流量不能访问特定的URL /类别,但来自世界其他地区的流量可以不受任何限制地访问相同的URL /类别。

地理位置部分似乎并不令人望而生畏,但我一直未能找到任何关于限制流量的时间。

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

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

帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-26 08:57:11

您可以在清漆中使用now,并在清漆日期上做一个regex以生成403或其他任何东西。

下面是一个关于如何使用varnishtest的示例now案例

代码语言:javascript
复制
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。(还没有亲自测试)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50021315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档