• 欢迎来到本博客,希望可以y一起学习与分享

nignx proxy_set_header获取客户端真实ip

Nginx benz 来源:nignx活例说明proxy_set_header的几个指标 2个月前 (04-21) 10次浏览 0个评论 扫描二维码

本文要说明nginx中的Host、X-Real-IP、X-Forwarded-For。

先看一个配置示例:

客户端地址(请求服务的地址):192.168.1.1

nignx服务器地址:192.168.1.2

后端服务器地址:192.168.1.3

首先说明proxy_set_header是用来设置请求头的,设置了请求头后,后端服务器就可以获取到这些变量值。

一、X-Real-IP

是指客户端的真实IP,如果设置了$remote_addr这个值,后端服务器就能获取到客户端的真实IP,也就是此例中的192.168.1.1

二、Host

host的值设置为$proxyhost,是指proxy_pass中设置的host值,也就是192.168.1.3,也就是服务器的IP地址。

若客户端发过来的请求header中有HOST这个字段,$http_host和$host表示的就是原始请求host,比如请求的时候HOST的值是test.com,那么反代后还是test.com

若客户端发过来的请求header中没有HOST这个字段,$host表示nginx代理服务器的地址,也就是此例中的192.168.1.2。

$httphost不是一个固定的变量,他其实是$http_HEADER通配后的结果,这里的HEADER是一个通配符,通配的是请求头里的header属性,例如$http_content_type表示请求头里content-type属性的值,同理,$http_host指的就是请求头里的host属性。

三、X-Forwarded-For

这个变量的值有$proxy_add_x_forwarded_for和$remote_addr,在只有一个代理服务器的转发的情况下,两者的效果貌似差不多,都可以真实的显示出客户端原始ip。

举例说明,用户A的IP是192.168.1.1,请求一个经过两次nginx转发的应用,在第一台nginx中(192.168.1.2),配置如下:

现在$proxy_add_x_forwarded_for变量的”X-Forwarded-For”部分是空的,所以只有$remote_addr,而$remote_addr的值是用户的ip,那么X-Forwarded-For变量的值就是用户的ip:192.168.1.1。

到第二台nginx,配置如下:

现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分包含的是用户的真实ip,$remote_addr部分的值是上一台nginx的ip地址,那么X-Forwarded-For的值就变成了”用户的真实ip,第一台nginx的ip”,也就是“192.168.1.1, 192.168.1.2”

所以还是建议X-Forwarded-For的值设置成$proxy_add_x_forwarded_for。


文章 nignx proxy_set_header获取客户端真实ip 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!