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

Лак заболел

У меня проблемы с Varnish, он работает для пары просмотров, а потом просто портится ... Странно то, что он работает примерно для 20 или 30 запросов. Если я вызываю apache напрямую, он работает нормально. Я использую Varnish Version: 3.0.3-1 на Debian Squeeze, а пока Apache на 80-м порту и Varnish на 8080-м на том же сервере.

я использую https://github.com/mattiasgeniar/varnish-3.0-configuration-templates в качестве основы для моих VCL и модифицировал VCL для поддержки Concrete5.

Кто-нибудь знает, как мне отладить это?

backend default {
    .host = "127.0.0.1";
    .port = "80";
    .connect_timeout = 1.5s; 
    .first_byte_timeout = 45s; 
    .between_bytes_timeout = 30s; 
    .probe = {
        .url = "/";
        .timeout  = 1s;
        .interval = 10s;
        .window    = 10;
        .threshold = 8;
    }
}

ЖУРНАЛ

    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791312 1.0
    0 CLI          - Rd ping
    0 CLI          - Wr 200 19 PONG 1353791315 1.0
    0 Backend_health - default Still sick 4--X-R- 0 8 10 0.000689 0.000000 HTTP/1.1 301 Moved Permanently

(301 - это потому, что я проверяю www.)

Ваш серверный модуль отвечает 301 на проверку здоровья; только 200 по умолчанию является ожидаемым "здоровым" ответом. Замените зонд:

.probe = {
    .url = "/";
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
    .expected_response = 301;
}

Редактировать :

Вот причина, по которой журнал возвращался вначале нормально, но через некоторое время он падал один за другим, чтобы в конечном итоге состояние больного: настройки для .interval, .threshold и .window - проверки работоспособности получали "нездоровый" "ответ, но они не считали работника больным, пока не получили достаточно плохих ответов, чтобы снизить количество успехов в окне до уровня ниже порога.

В 301 происходит, потому что зонд отправляет запрос с Host: 127.0.0.1 пока ваш сервер ожидает Host: example.com (ваш домен), поэтому он не соответствует ни одному серверу, поэтому сервер catch all перенаправляет его.

Чтобы избежать этого, вы можете использовать .request вместо .url в зонд

.probe = {
    .request =  "GET / HTTP/1.1"
                "Host: example.com"
                "Connection: close"
                "Accept: text/html" ;
    .timeout  = 1s;
    .interval = 10s;
    .window    = 10;
    .threshold = 8;
}

Вот ссылка на зонды