Загрузка статического файла из браузера ломается на лаке, но в 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.

Другие вопросы по тегам