网站轮播图片制作,上海产品网站建设,江苏网站建设流程,网站建设 深圳 凡科$remote_addr
代表客户端IP。注意#xff0c;这里的客户端指的是直接请求Nginx的客户端#xff0c;非间接请求的客户端。假设用户请求过程如下#xff1a;
用户客户端--发送请求-Nginx1 --转发请求--Nginx2-后端服务器那么#xff0c;默认情况下#xff0c;…$remote_addr
代表客户端IP。注意这里的客户端指的是直接请求Nginx的客户端非间接请求的客户端。假设用户请求过程如下
用户客户端--发送请求-Nginx1 --转发请求--Nginx2-后端服务器那么默认情况下针对Nginx1而言$remote_addr为用户客户端IP对Nginx2而言$remote_addr则为Nginx1的IP。此时如果希望Nginx2也可以获取用户客户端IP那要怎么处理呢答案如下
在Nginx1配置文件中使用proxy_set_header为转发请求设置请求头
proxy_set_header X-Real-IP $remote_addr; // X-Real-IP 为请求头名称可自定义然后在Nginx2 配置文件中通过$http_x_real_ip来获取X-Real-IP请求头的值来获取真实客户端IP.
此时如果要求“后端服务器”也要获取用户客户端IP咋处理呢做法和上述类似在Nginx2配置文件中使用proxy_set_header做同样的配置即
proxy_set_header X-Real-IP $remote_addr; 然后“后端服务器”获取请求头“X-Real-IP”的值即为用户客户端IP。
很多HTTP代理会在HTTP协议头中添加X-Forwarded-For头用来追踪请求的来源。X-Forwarded-For的格式如下
X-Forwarded-For包含多个IP地址每个值通过逗号空格分开最左边client1是最原始客户端的IP地址中间如果有多层代理每一层代理会将连接它的客户端IP追加在X-Forwarded-For右边。
$proxy_add_x_forwarded_for
代表附加$remote_addr变量的客户端请求头X-Forwarded-For 其值如果包含多个地址用逗号空格分隔标准格式如下
X-Forwarded-For: clientIP, proxyIP1, proxyIP2 # 最左边的clientIp即为客户端真实IP如果X-Forwarded-For字段没出现在客户端请求头$proxy_add_x_forwarded_for 等同于$remote_addr 变量。
这里假设用户请求过程和上文所述一样如下
用户客户端--发送请求-Nginx1 --转发请求--Nginx2-后端服务器假设仅在Nginx1配置文件中进行了以下配置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;那么Nginx2配置的X-Forwarded-For请求头的值即为clientIP当然这个结论的前提是客户端IP没有配置X-Forwarded-For请求头因为如上所述客户端没有出现这个请求头时$proxy_add_x_forwarded_for 的值即为$remote_addr 变量的值否则则是客户端为X-forwarded-for请求头的实际值。
接着假设Nginx2配置文件也进行以下配置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;那么“后端服务器”获取的X-Forwarded-For请求头的值将为clientIP, Nginx1IP。也就是说以上命令的执行是个叠加的过程类似Python的列表的append方法的处理过程可以简单理解为如果存在上级代理执行以上命令时会把上级代理IP追加到X-Forwarded-For请求头总否则把客户端IP $remote_addr、或者客户端X-Forwarded-For请求头的值(如果有的话)追加到X-Forwarded-For请求头中。
参考连接
Module ngx_http_core_module
Module ngx_http_proxy_module