作者回复: 你要这么配置: real_ip_recursive on; set_real_ip_from 1.1.1.1; set_real_ip_from 127.0.0.1; Nginx的设计思想就是这样,参见http://nginx.org/en/docs/http/ngx_http_realip_module.html,明确写着last address。Nginx做这种设定更多是从trust ip角度出发的。
作者回复: X-Real-IP是Nginx独有的,不是RFC规范,所以与client间如何还有其他非Nginx软件实现的代理,将取不到X-Real-IP头部
作者回复: 完全正确! 如果启用了环回地址,不一定是最左边的IP,而是从右边开始数,第一个非可信地址的IP
作者回复: 这样的话,realip模块做不到,因为它基于trust ip address设计的,你可以直接用http_X-Forwarded-For变量取到所有的值,再做字符串处理,取第一个IP
作者回复: 1、proxy_set_header是设置发向上游服务的请求头部的指令,第4部分课程会详细介绍。 X-Forwarded-For是RFC7239定义的头部,所有各大web服务都支持,你改了后就只能自己处理,不能依赖nginx之类的服务自动处理了。这一节课介绍的realip模块,也必须通过这个名称来修改remote_addr变量。 2、通过X-forwarded-for或者x-realip头部。 3、proxy反向代理在第4部分介绍。咱们课程后面内容还很多:-)
作者回复: 1、你说的对。 2、视频里要表达的意思是,最左边是客户端的真实地址,也是我们真正需要的地址,右边的是代理服务器地址。为了能够取到最左边地址,依赖于set_real_ip_from设置好可信代理地址。你可以参见无菇朋友的例子。
作者回复: 从后向前取,没错。你可以看下无菇朋友的留言,这个例子很有代表性
作者回复: 不是,是传递X-Forwarded-For头部给上游,但这个头部的值是什么呢?就用proxy_add_x_forwarded_for变量的值吧。proxy_add_x_forwarded_for变量的值是什么呢?参考http://nginx.org/en/docs/http/ngx_http_proxy_module.html#variables
作者回复: 是最左边,视频里也是最左边啊,第一页PPT里举的例子里,115.204.33.1就是最左边
作者回复: nginx与下游间只要有反向代理,那么就无法从IP报文头部取出客户端地址了。通常,符合规范的反向代理会把客户端地方放在X-Forwarded-For头部中。所以,realip模块负责把这些头部中的值,替换掉remote_addr等变量的值