varnish - 在 url/page/b Varnish 上显示来自/page/a 的内容

标签 varnish varnish-vcl fastly

我想设置Varnish 2.1.5规则以在某些情况下显示其他页面的内容,同时保持原始URL不变。
例如,当用户请求/page/a时,他/他将改为显示/page/b,但仍在浏览器中看到/page/a URL。
我需要这个特定用例来妥善处理已翻译页面上的404错误。我不确定如何将请求发送回vcl_recv据我了解,生命周期流程和当前逻辑如下所示:

sub vcl_recv {  
  if(req.http.cookie ~ "lang_pref") {
    # Redirect to Preferred Language
    error 999 "i18n cookie";
  }...

sub vcl_deliver {
  if (resp.status == 999 ) {
     set resp.status = 302;
     set resp.response = "Found";
  }... # more i18n logic

sub vcl_fetch {
  # Set Varnish error if backend cant find requested i18n page
  if (beresp.status == 404 && req.url ~ "^\/(en|fr|de)(\/.*)?$") {
    error 494;
  }...

sub vcl_error {
  # Double check i18n pages for English before 404
  if (obj.status == 494) {
    set obj.http.Location = "https://site/page/a";
    }
    set obj.status = 302;

    return(deliver);
  }
我所假设的是,我需要以某种方式将请求发送回set obj.http.Location "https://site/page/a";,而不是vcl_recv,然后使用regsub()
我该怎么办?

最佳答案

应该像这样简单:

sub vcl_error {
    # Double check i18n pages for English before 404
    if (obj.status == 494 && req.url == "/page/a") {
        set req.url = "/page/b";
        return(restart);
    }
}

关于varnish - 在 url/page/b Varnish 上显示来自/page/a 的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45017559/

相关文章:

unit-testing - Mockito - 无法在 HttpEntity 上初始化 Spy

css - 仅 CSS url 更改时如何使缓存页面过期

varnish - Varnish 默认缓存 404s 吗?

kubernetes - 在kubernetes部署中配置Varnish后端

varnish - 调试 VCL 文件的最佳方法是什么?

node.js - 当新代码推送到heroku时,faSTLy是否会自动清除?

php - 使用Varnish缓存的空POST请求

django - 帮助我配置nginx-varnish-uwsgi-django

load-balancing - 如何将 Traefik 服务状态公开为 HTTP 端点?