nginx反向代理, PHP获取客户端真实ip_蜘蛛技巧_超级蜘蛛池

2020-06-28 0 95

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

一、概念

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

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

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

二、示例

server {
	listen 80;
	server_name www.test.com;
	 location / {
		proxy_pass http://192.9.191.31:80;
		proxy_set_header Host $host;      #多级代理需要添加该配置          
		proxy_set_header X-Real-IP $remote_addr;  #只有1级代理获取客户端真实ip
		proxy_set_header X-Forwarded-For $remote_addr;   #多级代理获取客户端真实ip
		proxy_http_version 1.1;         #这两个最好也设置,HTTP协议中对长连接的支持是从1.1版本之后才有的
		proxy_set_header Connection ""; 
		proxy_redirect off;  
		proxy_connect_timeout 600;
		}
 
	location /forum/ {
		proxy_pass  http://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_pass http://192.168.1.52;
	}
	#注意: 如果是正则匹配, proxy_pass 的url结尾不能有/ 或者其他的后缀
 
}

   

 三、常用指令

proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器

#常用如下: 
proxy_set_header Host $host;  #添加HOST到报文头部,其值为客户端的URL, 
proxy_set_header X-Real-IP $remote_addr;   #把客户端ip地址赋值给变量X-Real-IP, X-Real-IP的值是字符串类型; 客户端可以是用户客户端或代理服务器    
proxy_set_header X-Forwarded-For $remote_addr;    # #把客户端ip地址赋值给变量X-Forwarded-For, X-Forwarded-For的值是一个列表,客户端可以是用户客户端或代理服务器 
proxy_set_header Connection ""; 

proxy_connect_timeout :配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒
proxy_http_version:用于设置nginx提供代理服务的HTTP协议的版本:
proxy_redirect off;

四、PHP获取客户端IP地址方式

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

REMOTE_ADDR = 客户端IP    
HTTP_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 = 最后一个代理服务器 IP    
HTTP_X_FORWARDED_FOR = 代理服务器 IP (经过多个代理服务器时,这个值类似:203.98.182.163, 203.98.182.163, 203.129.72.215)

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

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

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

5、使用高匿名代理

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

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

PHP获取ip代码如下:

function get_real_ip() {
	//判断服务器是否允许$_SERVER
	if (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;
}

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 搜索优化 nginx反向代理, PHP获取客户端真实ip_蜘蛛技巧_超级蜘蛛池 http://www.20zxx.cn/41858/zdyk/youhua.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务