Re: Определение IP

Pavel V. pavel2000 at ngs.ru
Wed Nov 14 13:16:41 UTC 2012


Здравствуйте, Евгений.

Вы писали 14 ноября 2012 г., 19:35:41:

> Здравствуйте.
> Скажите, как корректно определять ип при использовании связки nginx+php-fpm5 .
> А именно интересует, проталкивает ли энжиникс переменные
> $_SERVER['REMOTE_ADDR'];
> $_SERVER['HTTP_X_REAL_IP'];
> $_SERVER['HTTP_X_FORWARDED_FOR'];
> ?
> т.е такие переменные воопще могут существовать  ?

Nginx работает в соответствии с конфигурацией.  А она может говорить примерно так:

root at server:/etc/nginx/sites-available# cat default |grep -A 4 -B 1 fpm
        location ~ \.php$ {
               # With php5-fpm:
               fastcgi_pass unix:/var/run/php5-fpm.sock;
               fastcgi_index index.php;
               include fastcgi_params;
        }

root at server:/etc/nginx# cat fastcgi_params |grep REMOTE_ADDR
fastcgi_param   REMOTE_ADDR             $remote_addr;


Т.е. переменная REMOTE_ADDR передается как переменная протокола FastCGI, и должна быть принята
php-fpm.


> Сейчас я определяю так:
> function getip(){
>                 if(getenv("HTTP_CLIENT_IP"))
>                         $ip = getenv("HTTP_CLIENT_IP");
>                 elseif(getenv("HTTP_X_FORWARDED_FOR"))
>                         $ip = getenv("HTTP_X_FORWARDED_FOR");
>                 else
>                         $ip = getenv("REMOTE_ADDR");
>                 return $ip;
> }
> Может быть этот способ и не целесообразный для энжиникса вовсе. может
> он для апача только акутален ?

Способ, который берет переменные HTTP_CLIENT_IP и HTTP_X_FORWARDED_FOR вместо REMOTE_ADDR, а в
особенности так, как написано в приведенной вами функции - не актуален и нецелесообразен _нигде_,
т.к. позволяет подставлять произвольный IP-адрес в результат выполнения функции.
Подробности - в гугле.


-- 
С уважением,
 Pavel                          mailto:pavel2000 at ngs.ru



Подробная информация о списке рассылки nginx-ru