在浏览器向nginx发送请求时,nginx会将请求转发给SpringBoot,此时由于是nginx给SpringBoot发送的请求,所以SpringBoot获取到的请求IP是192.168.1.2,而并非是浏览器的192.168.1.1,如果想要获取原始的请求IP,应在nginx的配置文件加上以下配置。
location / {
proxy_pass http://hadoop101:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Uri $request_uri; # 添加这一行来传递原始请求的URI
proxy_set_header X-Forwarded-Url $request_uri; # 添加这一行来传递原始请求的URL
}
nginx常用的内置变量还有
$scheme:当前请求的协议类型,如 “http” 或 “https”。
$http_host:当前请求的域名和端口号,例如 “example.com:80”。
$request_uri:当前请求的 URI。
$proxy_add_x_forwarded_for:如果请求是从代理服务器转发过来的,该变量会包含原始客户端的 IP 地址。
$remote_addr:原始客户端的 IP 地址。
$remote_user:原始客户端的认证用户名(如果已通过身份验证)。
$time_local:当前请求的时间,以本地时间格式表示。
$request:当前请求的行,包括请求方法、URI 和协议类型。
$status:当前请求的响应状态码。
$body_bytes_sent:已发送到客户端的字节数。
$http_referer:当前请求的来源页面 URL。
$http_user_agent:当前请求的用户代理字符串,表示客户端的浏览器信息。