Поставил я 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,
например:
В скрипте на бэкенде Location формируется как
Header("Location: http://".$_SERVER['HTTP_HOST'].$local_url_part
а поскольку это был перехват, то в $_SERVER['HTTP_HOST'] сидит ip
Странность, на мой взгляд, в том что если перехвачен порт 8101
(VirtualHost), то Location не правится, а если порт 80 или 8100 и т.д.
то Location: http://one_back_ip:8109/.... (одинаковая) - правится.
Т.е. вопрос о странности познавательный, что бы понять, где я не прав,
поскольку решить проблему можно прописав имя сервера в AccelPass
или воспользоваться советом выше, а вот как корректировать
порт на тот, на который посылался запрос клиентом или как его
передать бэкэнду для подстановки в скрипт, это вопрос насущный.