Alex Tutubalin wrote:
>>Надо просто, чтобы mod_realip был раньше в списке модулей,
>>чтобы он восстановил нужную переменную REMOTE_IP раньше, чем ее
>>прочитает mod_geo.
>>
>>Т.е. если они static, то надо пересобирать апач так, чтобы mod_realip был
>>раньше, если DSO, то просто загрузить раньше.
>
> mod_geo использует r->connection->remote_addr.sin_addr.s_addr;
>
> Причем делает это дважды - на post-read (добавляя переменную в enviroment,
> дабы все прочие модули могли ее использовать) и на fixup (добавляя аргумент
> к query-string). По прикидкам, patricia lookup быстрее, чем линейный
> поиск в enviroment :)
>
> Если realip правит именно это место, то ваша рекомендация сработает
> (при условии работы realip на post-read, а не позже).
нет, перестановка не помогла, ибо сказано в README к mod_realip:
"Модуль изменяет IP адрес клиента в поле r->connection->remote_ip
..
Нужно заметить, что эта замена никак не влияет на модули mod_access и
mod_status, поскольку они используют поле r->connection->remote_addr."
>
> Если просто выставляет $REMOTE_IP более правильно, то нужно mod_geo
> похачить, заменив вышеупомянутую конструкцию на inet_aton(значение переменной)
mod_realip действительно работает на post-read, но попытка подправить
mod_geo пока не увенчалась успехом, замена
p.add.sin.s_addr = r->connection->remote_addr.sin_addr.s_addr;
на inet_aton(p.add.sin.s_addr , r->connection->remote_ip);
в static int geo_postread(request_rec *r)
приводит к странным результатам, придется учить матчасть :)
>
> Алексей Тутубалин
> mailto: lexa@lexa.ru
> Web: http://www.lexa.ru/lexa
>
BR