ПРОЕКТЫ 


  АРХИВ 


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?= =?KOI8-R?Q?=DA=D2=C1=DE=CE=D9=CA_=C1=CB=D3=C5=CC=C5=D2=C1=D4=CF=D2?=




Igor Sysoev wrote:


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".

"Флаг PH позволяет передать бэкенду имя хоста в заголовке "Host" неизменным. ... Номер порта при необходимости изменяется."

Меня больше номер порта волнует, а он см.выше




Странность, на мой взгляд, в том что если перехвачен порт 8101
(VirtualHost), то Location не правится, а если порт 80 или 8100 и т.д.
то Location: http://one_back_ip:8109/.... (одинаковая) - правится.

Т.е. вопрос о странности познавательный, что бы понять, где я не прав,
поскольку решить проблему можно прописав имя сервера в AccelPass
или воспользоваться советом выше, а вот как корректировать
порт на тот, на который посылался запрос клиентом или как его
передать бэкэнду для подстановки в скрипт, это вопрос насущный.


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

Я послал три запроса на 8100, 8101 и неперехватываемый на 8109 Во всех трех случаях в location на бекенде http://one_back_ip:8109/.... в %{accel_r}x есть только первые два запроса :) одинаковые POST one_back_ip:8109/..... а клиент получает 1. gw/.... 2. one_back:8101/... 3. one_back:8109/...

Так что все вроде правильно и логично, за исключением правки порта на
80 в первом случае. :(


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



BR Borisenko Ivan


 




Copyright © Lexa Software, 1996-2009.