Подсистема балансировки нагрузки-> Лак-> Nginx

У Вас есть 2 опции.

  1. Используйте другой IP, как Вы упомянули.

  2. Необходимо будет вручную отредактировать конфигурацию IIS 7 из командной строки. Я обрисовал в общих чертах шаги здесь: ссылка

Выполнение этого переопределит настройки по умолчанию IIS 7, чтобы позволить тому же сертификату использоваться на различных сайтах с тем же IP. Это - общий шаг, все должны были занять в IIS 6-7 дней.

2
задан 5 September 2012 в 21:17
3 ответа

Так как Varnish работает на каждом сервере, на котором запущен nginx, источник соединения с точки зрения nginx - 127.0.0.1, а не балансировщик нагрузки.

set_real_ip_from 192.168.255.0/24;

Вот в чем проблема; nginx не будет «доверять» заголовку X-Forwarded-For , когда соединение исходит из 127.0.0.1 (процесс Varnish); все, что он доверяет, - это вся сеть 192.168.255.0/24. Добавьте авторизацию, чтобы доверять заголовку, когда Varnish отправляет его.

set_real_ip_from 127.0.0.1;

Edit:

nginx плохо себя ведет при синтаксическом разборе заголовка X-Forwarded-For для "реального" IP-адреса клиента; он ищет последнюю запись в заголовке, которая никогда не является реальным IP-адресом клиента, если имеется более одной записи. См. этот вопрос для получения дополнительной информации об этой проблеме.

I ' г рекомендовать заставить Varnish прекратить добавлять собственный заголовок X-Forwarded-For . Вы захотите удалить эту часть функции vcl_recv :

if (req.restarts == 0) {
    if (req.http.x-forwarded-for) {
        set req.http.X-Forwarded-For =
            req.http.X-Forwarded-For + ", " + client.ip;
    } else {
        set req.http.X-Forwarded-For = client.ip;
    }
}

Укажите текущую конфигурацию vcl, если вам нужна помощь, что нужно изменить для вас, так как это может быть явно настроено или добавлено по умолчанию (или оба).

Edit 2:

Замените это на функцию vcl_recv в вашей конфигурации Varnish; он объединяет настройки, которые вы настроили, с поведением по умолчанию, удаляя при этом обман X-Forwarded-For , который присутствует по умолчанию.

sub vcl_recv {
    call detect_device;
    if (req.request == "PURGE") {
        if (!client.ip ~ purge) {
            error 405 "Not allowed.";
        }
        return(lookup);
    }
    if (req.url ~ "^/$") {
        unset req.http.cookie;
    }
    # Default logic follows; it's normally appended.
    # It'll still be appended, but having the return(lookup)
    # prevents its use. X-Forward-For header behavior removed.
    if (req.request != "GET" &&
      req.request != "HEAD" &&
      req.request != "PUT" &&
      req.request != "POST" &&
      req.request != "TRACE" &&
      req.request != "OPTIONS" &&
      req.request != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }
    if (req.request != "GET" && req.request != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (lookup);
}
4
ответ дан 3 December 2019 в 09:19

Похоже, ваш балансировщик нагрузки не передает IP-адрес клиента ни в одном заголовке. Поскольку вы не сказали, что вы используете для балансировщика нагрузки, невозможно дать конкретное решение, но в целом вы хотите настроить балансировщик нагрузки на размещение IP-адреса клиента в одном из заголовков (например, X-Forwarded-For ). Вы также можете назначить для этого собственный заголовок, если хотите.

Если ваш балансировщик нагрузки устанавливает X-Forwarded-For, то я бы настроил ваши серверы Varnish так, чтобы он устанавливал заголовок, отличный от X-Forwarded-For, чтобы у вас есть полная видимость как IP-адреса клиента, так и того, какой сервер обработал запрос.

2
ответ дан 3 December 2019 в 09:19

Предположим, что ваш балансировщик нагрузки использует заголовок X-Forwarded-For как для HTTP, так и для HTTPS, тогда ...

... в Varnish у вас должно быть это

sub vcl_recv { 
...
  set req.http.X-Forwarded-For = req.http.X-Forwarded-For;

... в Nginx у вас должно быть это

server {
...
  set_real_ip_from 192.168.255.0/24;
  real_ip_header X-Forwarded-For;

Я добавлю , что вы действительно должны запускать только 1 экземпляр Varnish, это лишает смысла иметь несколько кешей (так как балансировщик нагрузки может передавать запрос к экземпляру без грунтовки Varnish). Ваши показатели попадания будут еще хуже, не говоря уже о том, что это просто пустая трата ресурсов.

0
ответ дан 3 December 2019 в 09:19

Теги

Похожие вопросы