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