Назад | Перейти на главную страницу

Проблема POST Varnish «9 FetchError c ошибка записи серверной части: 11» для содержимого application / x-www-form-urlencoded

Короче говоря, нам удалось получить более точную ошибку из 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

Этот отчет об ошибке, кажется, предлагает обходной путь к вашей проблеме; вы должны попробовать.

https://www.varnish-cache.org/trac/ticket/849

if (req.http.Authenticate || req.http.Authorization) {
     pass;
    }

В прошлый раз, когда я работал с Varnish, вы не использовали return(pass);, просто pass; Не знаю, вызовет ли это ошибки или, возможно, заставит лак игнорировать эти биты синтаксиса.

Причина в том, что pass; заставляет механизм лакирования напрямую переключаться в режим передачи, который затем просто передает данные напрямую от бэкэнда к клиенту.
Шутки в сторону. Я все больше и больше начинаю думать, что эти return заявления просто сбивают с толку.

edit2: Я просто перечитал документы VCL и не смог найти ничего о return ключевое слово.