Загрузка статического файла из браузера ломается на лаке, но в Apache работает нормально
Сначала я хотел бы поблагодарить всех в serverfault за этот замечательный веб-сайт, и я также зашел на этот сайт во время поиска в Google различных проблем и настроек, связанных с сервером.
У меня также есть проблема сегодня, и поэтому я публикую здесь и надеюсь, что пожилые люди помогут мне. Несколько дней назад я настроил веб-сайт на выделенном сервере и использовал Varnish 3 в качестве интерфейса к Apache2 на сервере Debian Lenny, поскольку трафик был немного высоким. На сайте имеется несколько загрузок статических файлов размером около 10-20 МБ. Сайт выглядел хорошо в последние несколько дней после установки. Я проверял с широкополосного соединения 5 Мбит / с, и загрузка файлов также была завершена в считанные секунды и работала нормально.
Но сегодня я понял, что при медленном интернет-соединении загрузка файлов прерывается. Когда я пытался загрузить файлы с веб-сайта с помощью браузера, то через минуту он обрывался. Это продолжалось снова и снова, и поэтому не имело никакого отношения к интернету. Интернет-соединение было около 512 кбит / с, поэтому скорость соединения не была слишком высокой, но приличная скорость, когда файлы должны легко загружаться, хотя и не так быстро.
Затем я подумал о том, чтобы попробовать использовать бэкэнд-порт apache, и использовал номер порта, чтобы проверить, возникает ли проблема. Но затем при добавлении порта apache в URL загрузки статического файла, файлы загружались легко и не ломались ни разу. Я пробовал это несколько раз, чтобы убедиться, что это не совпадение, но каждый раз, когда я использовал порт apache в URL-адресе загрузки файла, он скачивал нормально, в то время как он каждый раз ломался с нормальной ссылкой, которая маршрутизировалась через Varnish, я полагаю, Таким образом, кажется, что Varnish каким-то образом привел к загрузке испорченных файлов.
Может ли кто-нибудь дать представление о том, почему это происходит и как решить проблему.
Для большей ясности возьмите этот пример:
Сервер Apache настроен на порт 8008, интерфейс Varnish настроен на порт 80
Теперь, когда я скачать скажу
http://mywebsite.com/directory/filename.extension
Затем загрузка прерывается через минуту или около того. Я не могу быть уверен, что это из-за времени или размера, и я просто предполагаю. Может быть, другая причина тоже.
Но когда я загружаю с помощью:
http://mywebsite.com:8008/directory/filename.extension
Тогда загрузка файла вообще не прерывается, и он скачивается нормально.
Таким образом, кажется, что лак как-то создает нарушение загрузки файла, а не apache. Кто-нибудь имеет представление о том, почему это происходит и как это можно исправить. Любая помощь будет высоко оценен.
И мой лак 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;
}
1 ответ
Вы достигли предела Varnish send_timeout. Значение по умолчанию для send_timeout было 600 с, а для Varnish 3.0 оно было изменено на 60 с. Это может помешать загрузке более 60 секунд.
Вы можете проверить значение параметра send_timeout с помощью varnishadm:
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.
Вы можете установить его на 600 с:
varnishadm param.set send_timeout 600s
Чтобы сделать этот параметр постоянным, вы должны добавить "-p sendtimeout 600" к параметрам запуска Varnish. Это зависит от дистрибутива, который вы используете. В случае Debian/Ubuntu вы можете отредактировать /etc/default/varnish.