On Sat, 9 Feb 2002, Alexey Zvyagin wrote:
> 1. Вот немного смутившая фраза из документации (описание директивы
> AccelPass)
>
> "В запрос всегда включается заголовок "Host", содержащий имя и порт (если
> порт не равен 80) сервера, на который перенаправлен запрос."
>
> Как я понимаю, перенаправляется на http://backend/ в примере, значит будет
> "Host: backend" или все таки тоже поле, что было передано клиентом frontend
> серверу? Как я понимаю, последнее должно быть. Иначе, если первое, то если
> несколько виртуальных хостов, то работать не будет.
Передаётся именно "Host: backend", и именно поэтому несколько name-based
виртуальных бэкендов работает. Имя фронтэнда может передаваться в заголовке
"X-Host", но это нужно задавать явно "AccelSetXHost on".
> 2. Есть ли положительный опыт работы скрипта на сервере, где frontend
> крутится на public_IP, а backend крутится на той же машине на 127.0.0.1 и
> backend имеет много виртуальных хостов?
У меня такого опыта нет, но работать должно.
> 3. Можно ли случая, описанного в п.2 описать только одну директиву
> AccelPass / http://backend/
>
> Чтобы она все запросы ко всем виртуальным сайтам транслировала на backend,
> но backend понимал к какому сайту запрашивается из заголовка Host? И на
> frontend должен ли быть описан каждый виртуал-хост или достаточного одного,
> а на backend-е всех перечисленных в конфиге хостов?
Только с помощью mod_rewrite:
RewriteRule ^/(.*)$ http://%{HTTP_HOST}/$1 [P]
> 4. Есть ли простое решение от следующего? Сейчас у многих виртуал-хостов у
> нас есть в конфигах запреты на директории для всех IP кроме такого-то
> (например, для админ-скриптов)... Как я понимаю, в связи с переходом на
> mod_accel, такие запреты надо будет переносить на frontend. То есть конфиг
> надо разносить, так как часть настроек все таки будет на backend.
Мой mod_realip не поможет, поскольку он меняет на бэкенде только
r->connection->remote_ip, но есть модуль (сейчас назвать не могу),
который меняет и r->connection->remote_addr.sin_addr и поэтому
может использоваться для проверки адресов mod_access'ом.
> 5. Если я выбрал схему: на frontend у меня описаны все виртуал-хосты на
> public_IP адресе, а на frontend у меня те же виртуал-хосты, но на 127.0.0.1
> адресе. Для каждого виртуала я описал на frontend директиву AccelPass и
> одинаковую для всех виртуалов.
> AccelPass / http://127.0.0.1/
> Какой HTTP заголовок Host будет в запросе к backend для каждого виртуала?
Host: 127.0.0.1
> 6.Если опция указана директива "AccelAddXForwardedFor off", но клиент
> передал X-Forwarded-For заголовок frontend-у, то передаст ли он этот
> заголовок frontend к backend-у? (наши скрипты очень нуждаются в этом
> заголовке от клиента).
Если он есть, то передаётся всегда. Директива определяет, нужно
ли добавлять адрес, с которого пришли к mod_accel или нет.
То же самое касается "AccelAddVia".
> 7. Ну и вопрос как в п.6, только наоборот, если есть директива директива
> "AccelAddXForwardedFor on", а клиент передал этот заголовок frontend-у, то
> он "перетрет" его для backend-а на свой, либо добавит IP клиента в список к
> существующему, либо перепишет тот IP, который был в оригинальном запросе
> клиента. Наши скрипты нуждаются знать не только реальный IP клиента, но еще
> IP, от которого обращался клиент к прокси, через который он обратился к
> нашему frontend-у
Только добавление. Если же заголовка не было, то он формируется.
Есть другой заголовок - "X-Real-IP", в нём указывается адрес клиента.
Игорь Сысоев
=============================================================================
= Apache-Talk@xxxxxxxxxxxxx mailing list =
Mail "unsubscribe apache-talk" to majordomo@xxxxxxxxxxxxx if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.