Короче говоря, нам удалось получить более точную ошибку из Varnishlog.
Varnishlog сообщает нам, что мы отправляем
31 TxRequest - POST
31 TxHeader - Content-Type: application/x-www-form-urlencoded
но мы получаем
9 FetchError c backend write error: 11
31 BackendClose - [backend name]
9 VCL_call c error
9 VCL_return c deliver
9 Length c 488
9 VCL_call c deliver
9 VCL_return c deliver
9 TxProtocol c HTTP/1.1
9 TxStatus c 503
Мы до сих пор не знаем, что это именно, но, очевидно, Content-Type: application / x-www-form-urlencoded не проходит должным образом. Помощь еще нужна, пожалуйста!
Исходное сообщение ниже.
Заголовок был «Varnish, не позволяющий пользователям Joomla войти в систему - ошибка медитации гуру 503», но я изменил его, чтобы привлечь больше внимания к проблеме, а не к ее симптомам.
Привет,
У нас есть производственный сайт для местной газеты, который в настоящее время находится за обратным прокси-сервером Apache, в основном сайт на одном сервере, а другой зарезервирован только как обратный прокси-сервер (ну, есть еще кое-что, но это здесь не имеет отношения). Apache как обратный прокси работает, но может быть быстрее.
Мы хотим изменить обратный прокси, чтобы использовать Varnish вместо Apache на сервере Ubuntu 10.4. Varnish - это версия 2.10, установленная непосредственно из репозиториев Ubuntu. Ubuntu 10.4 использует PHP 5.3.2.
Для анонимных посетителей сайт прекрасно работает с Varnish. Пока мы можем получить очень хорошую скорость из Varnish, у нас просто есть несколько проблем с входом или выходом.
Самым большим из них является то, что пользователи не могут войти в систему: они каждый раз получают страницу с ошибкой Varnish 503. Журналы не раскрывают причину. Такое ощущение, что запрос никогда не покинет Varnish. Так что мы просто догадываемся - не очень хорошая отправная точка.
Мы рассмотрели то, что было предложено на различных сайтах в Интернете. Мы увеличили таймауты до
backend xxx {
.host = "xxx.xx";
.port = "http";
.connect_timeout = 60s;
.first_byte_timeout = 60s;
.between_bytes_timeout = 60s;
}
но мы, кажется, получаем страницу ошибки 503 guru намного быстрее, чем это, как в прим. 5 секунд.
Мы увеличили размер заголовков Varnish до 128 в daemon.
В vcl_recv у нас есть
if (req.http.Authenticate || req.http.Authorization) {
return(pass);
}
и в vcl_fetch
## auhtentication handling
if (req.http.Authenticate || req.http.Authorization) {
return(pass);
}
Мы не удаляем файлы cookie.
Мы постарались убедиться, что страницы с ошибками не кэшируются. Как было сказано выше, мы ничего не видим в журналах серверной части Apache, по-видимому, он никогда не запрашивает аутентификацию пользователя Joomla.
В связи с Joomla, Varnish не особо упоминается. (Мы не можем сбросить Joomla, этот выбор был сделан, и мы просто должны жить с тем, что нам дали). Есть ли у кого-нибудь работающая комбинация Varnish - Joomla?
Спасибо за прочтение. Пожалуйста помоги. Нам очень нужны подсказки. Какие-либо предложения?
ompap
Этот отчет об ошибке, кажется, предлагает обходной путь к вашей проблеме; вы должны попробовать.
if (req.http.Authenticate || req.http.Authorization) {
pass;
}
В прошлый раз, когда я работал с Varnish, вы не использовали return(pass);
, просто pass;
Не знаю, вызовет ли это ошибки или, возможно, заставит лак игнорировать эти биты синтаксиса.
Причина в том, что pass;
заставляет механизм лакирования напрямую переключаться в режим передачи, который затем просто передает данные напрямую от бэкэнда к клиенту.
Шутки в сторону. Я все больше и больше начинаю думать, что эти return
заявления просто сбивают с толку.
edit2: Я просто перечитал документы VCL и не смог найти ничего о return
ключевое слово.