带端口问题的Apache / varnish尾部斜杠

时间:2014-07-30 01:29:46

标签: apache varnish varnish-vcl

我有一个设置(php应用程序)

:: varnish(port 80) - > apache port(8080)

默认情况下,apache会向目录添加尾部斜杠,但是当它执行时会重定向到端口。 e.g。

http:/www.domain.com/folder重定向到http:/www.domain.com:8080 / folder /

这个带端口的网址会导致问题。

所以我尝试添加指令 Directory.Slash在.htaccess文件中关闭,但应用程序不再使用了。例如断链等等

然后我按照上所述尝试更新VCL http://danielmiessler.com/blog/adding-a-trailing-slash-to-directories-using-varnish/

sub vcl_recv {
if ((req.url ~ "/directory" ) && (! (req.url ~ "index.php"))){
   set req.url = req.url "/";
}
}

但我收到了错误

Message from VCC-compiler:
Expected ';' got '"/"'
(program line 174), at
('input' Line 14 Pos 26)
   set req.url = req.url "/";
-------------------------###-

有人有任何建议吗?

由于

1 个答案:

答案 0 :(得分:1)

我建议将重定向逻辑保留在Varnish之外;基本问题是基于DirectorySlash设置的重定向将在重定向中添加内部Apache端口(8080)。

要修复,请尝试将以下Apache设置添加到Apache配置中(在htaccess中无效):

UseCanonicalName Off

Per Apache's documentation on UseCanonicalName

  

使用UseCanonicalName关闭Apache httpd将使用客户端提供的主机名和端口形成自引用URL(如果有)

这意味着即使执行DirectorySlash重定向,apache也应该尊重Varnish转发的传入客户端端口(80)。