1. SEO优化_织梦仿站[低至599]_网络营销推广服务-一秒搜 > 网站安全 > >

nginx反向代理, PHP获取客户端真实ip

  nginx反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

  1.jpg

一、概念

  正向代理:实现客户端上网

  反向代理:代理访问后端web服务器,

  区别:正向代理的对象是客户端,反向代理的对象是服务器端

二、示例server{listen80;server_namewww.test.com;location/{proxy_passhttp://192.9.191.31:80;proxy_set_headerHost$host;#多级代理需要添加该配置proxy_set_headerX-Real-IP$remote_addr;#只有1级代理获取客户端真实ipproxy_set_headerX-Forwarded-For$remote_addr;#多级代理获取客户端真实ipproxy_http_version1.1;#这两个最好也设置,HTTP协议中对长连接的支持是从1.1版本之后才有的proxy_set_headerConnection"";proxy_redirectoff;proxy_connect_timeout600;}location/forum/{proxy_passhttp://192.168.1.52/bbs/test/;}#访问http://www.nginx.com/forum/代理服务器会把url资源替换成http://192.168.1.52/bbs/对应192.168.1.52的资源路径是/usr/share/nginx/html/bbs/test/index.html#注意:这里的proxy_pass结尾要有/location~*\.(jpg|png|gif)${proxy_passhttp://192.168.1.52;}#注意:如果是正则匹配,proxy_pass的url结尾不能有/或者其他的后缀}

  2.jpg

三、常用指令proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器#常用如下:proxy_set_headerHost$host;#添加HOST到报文头部,其值为客户端的URL,proxy_set_headerX-Real-IP$remote_addr;#把客户端ip地址赋值给变量X-Real-IP,X-Real-IP的值是字符串类型;客户端可以是用户客户端或代理服务器proxy_set_headerX-Forwarded-For$remote_addr;##把客户端ip地址赋值给变量X-Forwarded-For,X-Forwarded-For的值是一个列表,客户端可以是用户客户端或代理服务器proxy_set_headerConnection"";proxy_connect_timeout:配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒proxy_http_version:用于设置nginx提供代理服务的HTTP协议的版本:proxy_redirectoff;四、PHP获取客户端IP地址方式

  1、如果没有使用代理服务器

REMOTE_ADDR=客户端IPHTTP_X_FORWARDED_FOR=没数值或不显示$ip=$_SERVER['REMOTE_ADDR'];REMOTE_ADDR=最后一个代理服务器IP

  2、使用透明代理

HTTP_X_FORWARDED_FOR=客户端真实IP(经过多个代理服务器时,这个值类似:221.5.252.160,203.98.182.163,203.129.72.215)

  这类代理还会将客户真实ip发送到请求对象,无法隐藏真实ip。

$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];

  3、使用普通匿名代理服务器

REMOTE_ADDR=最后一个代理服务器IPHTTP_X_FORWARDED_FOR=代理服务器IP(经过多个代理服务器时,这个值类似:203.98.182.163,203.98.182.163,203.129.72.215)

  这样就隐藏了客户端的真实ip,但服务器会知道客户端是通过代理服务器去访问的。

  4、使用欺骗性代理服务器

REMOTE_ADDR=代理服务器IPHTTP_X_FORWARDED_FOR=随机的IP(经过多个代理服务器时,这个值类似:220.4.251.159,203.98.182.163,203.129.72.215)

  5、使用高匿名代理

REMOTE_ADDR=代理服务器IPHTTP_X_FORWARDED_FOR=没数值或不显示

  使用这种代理时,不同浏览器不同设备会返回不同的ip头信息,因此PHP使用$_SERVER["REMOTE_ADDR"]、$_SERVER["HTTP_X_FORWARDED_FOR"]获取的值可能是空值也可能是“unknown”值。

  PHP获取ip代码如下:

functionget_real_ip(){//判断服务器是否允许$_SERVERif(isset($_SERVER)){if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$realip=$_SERVER['HTTP_X_FORWARDED_FOR'];}elseif(isset($_SERVER['HTTP_X_REAL_IP'])){$realip=$_SERVER['HTTP_X_REAL_IP'];}elseif(isset($_SERVER['HTTP_CLIENT_IP'])){$realip=$_SERVER['HTTP_CLIENT_IP'];}else{$realip=$_SERVER['REMOTE_ADDR'];}}else{//不允许就使用getenv获取if(getenv("HTTP_X_FORWARDED_FOR")){$realip=getenv("HTTP_X_FORWARDED_FOR");}elseif(getenv("HTTP_X_REAL_IP")){$realip=getenv("HTTP_X_REAL_IP");}elseif(getenv("HTTP_CLIENT_IP")){$realip=getenv("HTTP_CLIENT_IP");}else{$realip=getenv("REMOTE_ADDR");}}return$realip;}

免责声明:本文由 一秒搜在https://www.1miaoseo.com发布,不代表SEO优化_织梦仿站[低至599]_网络营销推广服务-一秒搜立场。

本站所发布文章和图片均来自用户分享和网络收集,https://www.1miaoseo.com/anquan/556.html文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。