Привет всем!
> mod_realip не подходит для mod_access. Для этого лучше взять
> http://develooper.com/code/mpaf/
Спасибо!
Именно этот модуль и подсказал более элегантное решение для бекенда, на
котором установлен mod_perl
use Apache::Constants ();
sub My::ProxyRemoteAddr ($) {
my $r = shift;
# we'll only look at the X-Forwarded-For header if the requests
# comes from our proxy at localhost
return Apache::Constants::OK unless ($r->connection->remote_ip eq
"127.0.0.1");
if (my ($ip) = $r->header_in('X-Real-IP') =~ /^(\d+\.\d+\.\d+\.\d+)$/o)
{
$r->connection->remote_ip($ip);
}
return Apache::Constants::OK;
}
Этот блок ставится в startup.pl для mod_perl
Далее там где вам надо, можно на весь виртуал поставить
PerlPostReadRequestHandler My::ProxyRemoteAddr
И все запросы к скриптам, к статике выполняются с remote_ip как если бы к
нему обратился напрямую клиент. В логи этого сервера также пишется IP, что
был передан X-Real-IP. Скрипты, которые берут IP из REMOTE_ADDR и
HTTP_FORWARDED_FOR также будут получать те значения, если бы клиенты
заходили на бекенд напрямую. mod_access также работает. Вообщем, ничего
лучшего не придумать :)
Для тех, кто опасается нарушения security - этот handler отрабатывается
только тогда, когда фронтенд зашел на бекенд с адреса 127.0.0.1. То есть
если клиент подставит фиктивный адрес через X-Real-IP или зайдет напрямую на
бекенд - ничего у него не получится. Если бекенд на другом IP, пусть даже
доступном из внешнего мира, надо поменять там только 127.0.0.1 на IP
фронтенда.
Разумеется, ан фронтенда надо написать:
AccelPass / http://127.0.0.1/ [PH]
AccelSetXRealIP on
AccelCacheCookie all
> Игорь Сысоев
>
P.S. Ну теперь вообще наступило полное счастье в mod_accel :)
Алексей Звягин
=============================================================================
= Apache-Talk@lists.lexa.ru mailing list =
Mail "unsubscribe apache-talk" to majordomo@lists.lexa.ru if you want to quit.
= Archive avaliable at http://www.lexa.ru/apache-talk =