2013-04-08 2 views
0

У меня возникает проблема, когда лак не отправляет посреднический IP-адрес прокси или публичный IP-адрес в конкретном случае. Сценарий, как показано ниже:Varnish удаляет общедоступный IP-адрес от X-Forwarded-for

  • Некоторые гостиницы/Компания кальмара прокси настроен и весь трафик Интернет направляется через Squid.

  • пользователя доступ к сайту моей компании первый хит Балансировщик Нагрузки затем Varnish & затем Apache

  • Apache настроен с mod_geoip. Код на моем сайте перенаправляет страну на основе IP-адреса.

Проблема:

  • Когда пользователь (За этим кальмара прокси) доступ к веб-сайт моей компании за Load Balancer -> ЛАК -> Apache - Здесь апач получает только внутренний IP (His Private IP) & нагрузки Балансировщик Внутренний IP как X-forwarded-for и, следовательно, перенаправление на основе IP-адресов FAILS!

В журналах Apache (Настраивается для входа X-Forwarded-IP) Я вижу, что пользователи Private IP & затем My Load Балансировщиках Private IP.

172.10.5.10, LoadBalancerIP - - [.......]

  • тот же пользователь получает доступ, когда другой сайт, который не имеет Varnish, ударяется Load Balancer -> Apache - Здесь апач получает Пользователи Частный IP & Пользователи Публичный IP как переадресация на переадресацию X и переадресация на IP-интерфейс работают отлично.

В журналах Apache (настроено для регистрации X-Forwarded-IP) Я вижу, что пользовательский IP-адрес и его публичный IP-адрес также регистрируются.

172.10.5.10, PublicIP - - [.......]

My Varnish Config, как показано ниже.

 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; 
        } 
      } 

PS: Я уже Google'd всех ссылок я мог бы найти и каждое звено дает следующий лак Config

Сейчас, чтобы получить этот вопрос решен, я должен был обойти лак и теперь веб-сайт трафик прямо поражает Apache, но мне нужно вернуть Лак на место на серверный контент из Cache и Speedy.

Поймите, если кто-то поможет мне решить, как решить эту проблему.

Спасибо!

+0

Здравствуйте, я собрал журналы ЛАКА для упомянутых выше проблем и приклеил @ http://pastebin.ca/2353444 – KeyurM

ответ

1

Вышеупомянутая проблема решена. Кредит отправляется на канал IRC Mithrandir @ Varnish. Благодаря! Ниже перечислены изменения, необходимые для решения проблемы.

В начале default.vcl оных:

import std; 

Ниже "если (req.http.х-пересылаются-за) "добавить:.

std.collect(req.http.x-forwarded-for); 
  • ли лак configtest & перезарядку Это должно начать показывать Общественный IP

  • Ниже приводится объяснение из документации vmod_std:.

собирать

Prototype 
      collect(HEADER header) 

    Return value 
      Void 

    Description 
      Collapses the header, joining the headers into one. 

    Example 
      std.collect(req.http.cookie); This will collapse several Cookie: 
      headers into one, long cookie header.