如何使 Apache 301 重定向与 Varnish 协同工作?

如何使 Apache 301 重定向与 Varnish 协同工作?

我正在尝试添加一些从旧域到新域的重定向,这些重定向之前我已经在我的 vhost 文件中使用简单的 301 重定向完成过,例如:

<VirtualHost *:8080>
  ServerName olddomain.com
  ServerAlias www.olddomain.com
  Redirect 301 / http://www.newdomain.com/
</VirtualHost>

但是这在我的 vhost 文件中不起作用,我猜测这是因为 Varnish 服务器在 Apache 前面运行,但不确定如何修复它。主站点在同一个 vhost 文件中使用相同的端口,例如:

<VirtualHost *:8080>
  ServerName www.newdomain.com
  ...

</VirtualHost>

我遗漏了什么?我尝试使用 varnish 配置文件在其中添加重定向,但遇到了问题 - 这是最好的选择吗?

答案1

我仍然不清楚为什么上面的 apache vhost 无法被识别,也许是因为 varnish vcl 文件中的某些内容拦截了它,但我最终能够通过在那里添加重定向来解决这个问题,按照这里的说明https://www.varnish-cache.org/trac/wiki/VCLExampleRedirectInVCL

sub vcl_recv {
    if (req.http.host ~ "^(www\.)?oldexample\.com$") {
        error 750 "http://www.example.com/newlocation";
    } else if (req.http.host ~ "^(www\.)?ancientexample\.com$") {
        error 750 "http://newsite.com/ancient"
    }
 }

 sub vcl_error {
   if (obj.status == 750) {
       set obj.http.Location = obj.response;
       set obj.status = 302;  
       return(deliver);
   }
 }

相关内容