remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等...)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。...忽略x_forwarded_fo,其实,当你使用了Nginx的realip模块后,就已经保证了remote_addr里设定的就是客户端的真实IP,再看下这个配置。...下面的配置就是把从192.168.100.0这一网段过来的请求全部使用X-Forwarded-For里的头信息作为remote_addr。...使用这些设置就能保证你的remote_addr里设定的一直都是客户端的真实IP,而x_forwarded_for则可以忽略了。
$remote_addr 代表客户端IP。注意,这里的客户端指的是直接请求Nginx的客户端,非间接请求的客户端。...假设用户请求过程如下: 用户客户端--发送请求->Nginx1 --转发请求-->Nginx2->后端服务器 那么,默认情况下,针对Nginx1而言,remote_addr为用户客户端IP,对Nginx2...而言,remote_addr则为Nginx1的IP。...答案如下: 在Nginx1配置文件中使用proxy_set_header为转发请求设置请求头 proxy_set_header X-Real-IP $remote_addr; // X-Real-IP...做法和上述类似,在Nginx2配置文件中,使用proxy_set_header做同样的配置,即: proxy_set_header X-Real-IP $remote_addr; 然后,“后端服务器”
') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR');...} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR...'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } return $onlineip...') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR');...} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR
") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset(...$_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")..._SERVER['REMOTE_ADDR']同样可以获取到客户端的IP地址.二者的区别在于,getenv不支持IIS的isapi方式运行的php. strcasecmp(string1,string2)...']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown)) { $ip = $_SERVER...["REMOTE_ADDR"] 、$_SERVER["HTTP_X_FORWARDED_FOR"] 获取的值可能是空值也可能是“unknown”值.
获取访客 IP 的正确姿势 Chinese Valentine's Day 1 、先看下教科书上获取 IP 的姿势: $_SERVER["REMOTE_ADDR"] 2 、但是网上很多教程说上面的姿势不完善...$_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $user_IP = ($user_IP) ?...') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $clientip = getenv('REMOTE_ADDR'); } elseif(isset...($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'...我们先来看下 REMOTE_ADDR 、 HTTP_X_FORWARDED_FOR 、 HTTP_CLIENT_IP 是什么。
php //方法1: $ip = $_SERVER["REMOTE_ADDR"]; echo $ip; //方法2: $ip = ($_SERVER["HTTP_VIA"]) ?...$_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $ip = ($ip) ?...$ip : $_SERVER["REMOTE_ADDR"]; echo $ip; //方法3: function getRealIp() { $ip=false; if(!...')) { $onlineip = getenv('REMOTE_ADDR'); } else { $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR']; }...$_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"]; $ip = ($ip) ?
; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr...; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr...; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr...; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr...; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr
V站笔记 REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。...同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。...HTTP_VIA $_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP $_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造...']找咯 以下是网上的资料: 一、没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示...四、使用欺骗性代理服务器的情况:Distorting Proxies REMOTE_ADDR = 代理服务器 IP HTTP_VIA = 代理服务器 IP HTTP_X_FORWARDED_FOR
'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('REMOTE_ADDR...') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR');...} elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR...'], 'unknown')) { $onlineip = $_SERVER['REMOTE_ADDR']; } preg_match("/[\
一、如果没有使用代理服务器 REMOTE_ADDR = 客户端IP HTTP_X_FORWARDED_FOR = 没数值或不显示 $ip = $_SERVER['REMOTE_ADDR']; 二...$ip = $_SERVER['HTTP_X_FORWARDED_FOR']; 三、使用普通匿名代理服务器 REMOTE_ADDR = 最后一个代理服务器 IP HTTP_X_FORWARDED_FOR...因此PHP使用_SERVER["REMOTE_ADDR"] 、 PHP获取ip代码如下: public function ip() { //strcasecmp 比较两个字符,不区分大小写。...') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } else...if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'],
普通建站时,我们可以通过REMOTE_ADDR获取网站访客IP信息。...但是当我们的网站部署在CDN后时,用户的请求到达源站服务器之前需要先通过CDN服务器,此处REMOTE_ADDR获取的就是CDN回源服务器的地址。XFF参数是由CDN服务器转发原始请求时并加上。...')&&strcasecmp(getenv('REMOTE_ADDR'),'unknown')) { $ip=getenv('REMOTE_ADDR'); } elseif(isset($_SERVER...['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')) { $ip=$_...SERVER['REMOTE_ADDR']; } $ip=addslashes(preg_replace("/^([\d\.]+).*/","\\1",$ip)); return $ip; } 另外
做网站时候经常会用到remote_addr和x_forwarded_for 这两个头信息来获取,客户端ip,然而当有反向代理或者CDN的情况下,这两个就不够准确了,需要调整一些配置 remote_addr...等) 就会把remote_addr设为你的机器ip 如果你用了某代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到 网站,这样web服务器就会把remote_addr设为这台代理机器的IP x_forwarded_for...一般的方式是这样: nginx------->>(fastcgi方式)------->>php引擎 nginx把REMOTE_ADDR传递给了php。...nginx配置类似于这样: fastcgi_param HTTP_X_FORWARD_FOR $remote_addr; 目的是,将HTTP_X_FORWARD_FOR的值设置为$remote_addr...$remote_addr是nginx的内置变量,这个变量它得到是用户真实的ip地址(用户使用了代理,则就是代理的ip地址)。
getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR...') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER...['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip...= $_SERVER['REMOTE_ADDR']; } return preg_match("/[\d\.]{7,15}/", $ip, $matches) ?
http://xxx.xxx.xxx.xxx:8080/mobile-auth/; proxy_set_header Host $host; proxy_set_header X-Peal-IP $remote_addr...xxx.xxx.xxx.xxx:8082/microservice-consumer/; proxy_set_header Host $host; proxy_set_header X-Peal-IP $remote_addr...policy-backend/; proxy_set_header Host $host; client_max_body_size 30m; proxy_set_header X-Peal-IP $remote_addr...module-uap-core/; proxy_set_header Host $host; client_max_body_size 30m; proxy_set_header X-Peal-IP $remote_addr...http://xxx.xxx.xxx.xxx:8083/mobile-auth/; proxy_set_header Host $host; proxy_set_header X-Peal-IP $remote_addr
getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR...") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER...['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip =...$_SERVER['REMOTE_ADDR']; else $ip = "unknow"; return($ip); } 沈唁志|一个PHPer的成长之路!
getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR...") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER...['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip =...$_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return $ip; } 将上述代码添加到主题的function中即可,如有bug可在评论区反馈!
怎样正确设置remote_addr和x_forwarded_for 做网站时经常会用到remote_addr和x_forwarded_for这两个头信息来获取客户端的IP,然而当有反向代理或者CDN...什么是remote_addr remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器...(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的...你的浏览器访问的首先是这台反向代理,它再把你的请求转发到后面的web服务器,这就使得web服务器会把remote_addr设为这台反向代理的IP,为了能让你的程序获取到真实的客户端IP,你需要给HAProxy...使用这些设置就能保证你的remote_addr里设定的一直都是客户端的真实IP,而x_forwarded_for则可以忽略了
$_SERVER['REMOTE_ADDR'] : ''; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $list = explode(','...== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'crawl-'....== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'sogouspider-'....== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'msnbot-'....== false){ $解析主机 = gethostbyaddr($_SERVER['REMOTE_ADDR']); if ($解析主机 != 'baiduspider-'.
: %s\n", getenv("REMOTE_ADDR")); printf(" "); return 0; } 测试是在nginx自带配置文件...proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr...8080)配置注释掉“X-Forwarded-For”,输出结果变成: HTTP_X_FORWARDED_FOR: 10.6.81.39 HTTP_X_REAL_IP: 10.6.223.44 REMOTE_ADDR...-> apache(10.6.208.101:80)时,程序输出结果为: HTTP_X_FORWARDED_FOR: 10.6.81.39 HTTP_X_REAL_IP: 10.6.81.39 REMOTE_ADDR...最不可信的是“REMOTE_ADDR”,它的内容完全可以被client指定!总之只要编译和配置正确,“HTTP_X_FORWARDED_FOR”总是包含了client的真实IP。
1.php获取客户端IP 在PHP获取客户端IP时,常使用 _SERVER[“REMOTE_ADDR”] 。...REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。...同样,REMOTE_ADDR也会被替换为这个代理服务器的IP。..._SERVER[‘REMOTE_ADDR’]; //访问端IP(有可能是用户,有可能是代理服务器的,也有可能是反向代理服务器的) _SERVER[‘HTTP_CLIENT_IP’]; //代理端的(有可能存在...:Transparent Proxies REMOTE_ADDR = 最后一个代理服务器 IP HTTP_VIA = 代理服务器 IP HTTP_X_FORWARDED_FOR = 您的真实 IP
领取专属 10元无门槛券
手把手带您无忧上云