我首先要感谢serverfault的这个伟大的网站,我也来到这个网站,而在谷歌search各种服务器相关的问题和设置。
我今天也有一个问题,所以我在这里发帖,希望老人帮我一把。 前几天我在专用服务器上设置了一个网站,而我在Debian Lenny服务器上使用了Varnish 3作为Apache2的前端,因为stream量有点高。 网站上有几个大约10-20 MB的静态文件下载。 我安装后的最后几天网站看起来很好。 我正在检查从5mbps +宽带连接和文件下载也在几秒钟内完成,工作正常。
但是今天我意识到,在一个缓慢的互联网连接上,文件下载被中断。 当我试图使用浏览器从网站上下载文件时,一分钟左右就中断了。 它一再发生,所以它与互联网连接没有任何关系。 互联网连接大约是512kbps,所以它不会以太高的速度拨号,但速度很快,文件应该很容易下载,虽然速度不是那么快。
然后我想到用Apache的后端端口尝试,并使用端口号来检查是否出现问题。 但后来在静态文件下载url中添加apache端口,文件很容易下载,并没有打破一次。 我试了几次,以确保这不是巧合,但每次我在文件下载url中使用的Apache端口,然后它正在下载罚款,而每次打破正常的链接,通过光油路由通过我想。 所以,看起来Varnish已经以某种方式导致了破损的文件下载。
谁能给出任何想法,为什么发生和如何解决这个问题。
有关更多说明,请参阅以下示例:
在端口8008上设置Apache后端,在端口80上设置Varnish前端
现在当我下载说
http://mywebsite.com/directory/filename.extension
然后下载一分钟左右就中断了。 我不能确定这是由于时间或规模,但我只是假设。 也可能是其他原因。
但是当我下载使用:
http://mywebsite.com:8008/directory/filename.extension
然后文件下载不会中断,它得到下载罚款。
所以,清漆似乎创造了文件下载中断,而不是阿帕奇。 有没有人有任何想法,为什么它发生,如何修复。 任何帮助将不胜感激。
而我的清漆default.vcl是
backend apache { set backend.host = "127.0.0.1"; set backend.port = "8008"; } sub vcl_deliver { remove resp.http.X-Varnish; remove resp.http.Via; remove resp.http.Age; remove resp.http.Server; remove resp.http.X-Powered-By; }
您正在达到Varnish send_timeout限制。 send_timeout的默认值是600s,varnish 3.0被更改为60s。 这可能会影响下载时间超过60s。
您可以使用varnishadm来检查send_timeout参数的值:
varnishadm param.show send_timeout
这将输出像这样的东西:
send_timeout 60 [seconds] Default is 60 Send timeout for client connections. If the HTTP response hasn't been transmitted in this many seconds the session is closed. See setsockopt(2) under SO_SNDTIMEO for more information. NB: This parameter may take quite some time to take (full) effect.
你可以将它设置为600s:
varnishadm param.set send_timeout 600s
要使此设置保持不变,必须将“-p sendtimeout 600”添加到Varnish的启动参数中。 这取决于您正在使用的分配。 在Debian / Ubuntu的情况下你可能想编辑/ etc / default / varnish。