Re: proxy_set_header для req->remote_host

Sergey Shepelev temotor at gmail.com
Thu Jul 9 18:32:56 MSD 2009


Вам не надо использовать mod_realip на nginx. Вам надо написать аналог
mod_realip для вашего демона на libevent.

Что делает любой mod_realip. Он читает заголовок X-Real-IP и заменяет
адрес клиента на значение этого заголовка. В дальнейшем, все кто
обрабатывает запрос, думают, что он пришёл не от прокси, а от
реального клиента.

Вам на nginx надо сделать

proxy_set_header X-Real-IP $remote_addr;

и всё. Уберите set_real_ip_from и real_ip_header. Это надо
имплементить на вашем бекенде.

При этом nginx будет добавлять заголовок X-Real-IP с адресом клиента.
А ваш демон на libevent должен читать этот заголовок (и, если хотите,
подставлять его значение в req->remote_host).

Еще раз. mod_realip в nginx вам не поможет. Единственное, что надо
настроить в nginx это proxy_set_header, чтоб он добавлял заголовок.
Всё.
Еще раз. Вы должны написать код в бекенде, который будет читать
заголовок X-Real-IP, если хотите читать реальный адрес клиента из
req->remote_host. Как это ни странно, вы должны записать в
req->remote_host, если хотите читать оттуда.

2009/7/9 Rauan Maemirov <rauan at maemirov.com>:
> Что тут не так?
>
>        location /v {
>
>            set_real_ip_from 0.0.0.0/0;
>            real_ip_header X-Real-IP;
>
>            proxy_pass http://127.0.0.1:8789;
>        }
>
>
>
> 2009/7/9 Rauan Maemirov <rauan at maemirov.com>:
>> Спасибо, начал смотреть realip.
>> А что означает написать свое? Я ведь проксирую туда через nginx?
>>
>> 2009/7/9 Maxim Dounin <mdounin at mdounin.ru>:
>>> Hello!
>>>
>>> On Thu, Jul 09, 2009 at 05:25:19PM +0600, Rauan Maemirov wrote:
>>>
>>>> Здравствуйте. Что именно нужно писать, если я проксирую запрос на
>>>> демон (libevent), чтобы он передавал туда ip-address запроса
>>>> (remote_addr).
>>>>
>>>> Пробую вот так:
>>>> proxy_set_header Host $remote_addr;
>>>
>>> Вообще-то заголовок Host предназначен для другого, но не в этом
>>> суть.
>>>
>>>> но в req->remote_host все равно приходит 127.0.0.1 (демон на том же
>>>> хосте, что и nginx).
>>>
>>> Для того чтобы remote_host изменился на то что пришло в заголовке
>>> - его должен кто-то изменить.  Для nginx'а это делается с помощью
>>> модуля realip, для Apache - mod_realip/mod_rpaf/mod_rpaf2.  Если у
>>> вас свой демон на libevent'е - надо соответственно написать своё.
>>>
>>> Maxim Dounin
>>>
>>>
>>
>


More information about the nginx-ru mailing list