ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 

  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА














     АРХИВ :: Apache-Talk
Apache-Talk mailing list archive (apache-talk@lists.lexa.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [apache-talk] mod_accel =?KOI8-R?Q?=CB=C1=CB_=D0=D2=CF=DA?= =?KOI8-R?Q?=D2=C1=DE=CE=D9=CA_=C1=CB=D3=C5=CC=C5=D2=C1=D4=CF=D2?=



On Thu, 12 Feb 2004, Borisenko Ivan wrote:

> Igor Sysoev wrote:
> 
> > On Thu, 12 Feb 2004, Borisenko Ivan wrote:
> > 
> >>Поставил я mod_accel на шлюз, отдаю ему внешние запросы фаерволом, 
> >>внутренние тяжелые серверы разгружаются и все замечательно, но только 
> >>пока Location в ответе не попадется. Понятно, что правка Location
> >>необходима при запросе к фронтенду, что бы бекэнд не светить.
> >>Но при прозрачном фронтенде задача с точностью наоборот.
> >>Есть ли возможность отключить коррекцию Location разом?
> > 
> > Я не совсем понял, как в данном случае устроено прозрачное прокирсование,
> 
> в фаерволе на шлюзе прописано:
> deny tcp from any to gateway_ip dst-port 80,8100-8109 via ext_if
> fwd 127.0.0.1 tcp from not my_network to my apaches dst-port 80,8100-8108
> 
> т.е. на шлюзе стоит русский апач с перекодировкой по портам и mod_accel
> прямые запросы через внешний интерфейс к нему запрещены.
> Внешние запросы к остальным серверам перехватываются и отдаются этому
> апачу. Порт 8109 не перехватывается для отладочных и иных целей.
> На всех серверах перекодировка по этому порту запрещена.
> 
> настройки апача на шлюзе:
> AccelSetXRealIP on
> AccelDefaultExpire 86400
> AccelIgnoreNoCache on
> AccelIgnoreExpires on
> AccelPassCookie on
> AccelCacheCookie    all  !PHPSESSID !b
> AccelWaitBeforeBodyRead 80
> AccelPass           /       http://one_back_ip:8109/
> AccelNoPass         /img/ /extlogs/
> AccelIgnoreAuth on
> 
> <VirtualHost one_back_ip:8101>
> AccelPass           /       http://one_back_ip:8109/
> AccelNoPass         /img/
> AccelIgnoreAuth on
> 
> <Location /documents/registered_users_only/*>
> AccelRevalidateUser on
> </Location>
>   .....
> часть, которая до виртуального хоста - общая часть и для внутренних 
> запросов принудительно наполняющих кэш.
> 
> > но для того, чтобы Location не переписывался, достаточно в AccelPass
> > указать такое имя бэкенда, которое он никогда не будет возвращать в 
> > Location,
> > например:
> > 
> > AccelPass  /   http://198.169.10.1/
> > 
> > а бэкенд всегда возвращает что-то типа Location: http://some.site/
> 
> В скрипте на бэкенде Location формируется как
> Header("Location: http://".$_SERVER['HTTP_HOST'].$local_url_part
> а поскольку это был перехват, то в $_SERVER['HTTP_HOST'] сидит ip

Можно попрбовать опицию [PH} для сохранения "Host".

> Странность, на мой взгляд, в том что если перехвачен порт 8101
> (VirtualHost), то Location не правится, а если порт 80 или 8100 и т.д.
> то Location: http://one_back_ip:8109/.... (одинаковая) - правится.
>
> Т.е. вопрос о странности познавательный, что бы понять, где я не прав,
> поскольку решить проблему можно прописав имя сервера в AccelPass
> или воспользоваться советом выше, а вот как корректировать
> порт на тот, на который посылался запрос клиентом или как его
> передать бэкэнду для подстановки в скрипт, это вопрос насущный.

А что в логах, если логировать \"%{accel_r}x\" на фронтенде и
\"%{Location}o\" на бекенде для запросов на 8101 ?


Игорь Сысоев
http://sysoev.ru


 




Copyright © Lexa Software, 1996-2009.