作者回复: 这样的话,realip模块做不到,因为它基于trust ip address设计的,你可以直接用http_X-Forwarded-For变量取到所有的值,再做字符串处理,取第一个IP
作者回复: 你要这么配置:
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角度出发的。
作者回复: 1、proxy_set_header是设置发向上游服务的请求头部的指令,第4部分课程会详细介绍。
X-Forwarded-For是RFC7239定义的头部,所有各大web服务都支持,你改了后就只能自己处理,不能依赖nginx之类的服务自动处理了。这一节课介绍的realip模块,也必须通过这个名称来修改remote_addr变量。
2、通过X-forwarded-for或者x-realip头部。
3、proxy反向代理在第4部分介绍。咱们课程后面内容还很多:-)
作者回复: X-Real-IP是Nginx独有的,不是RFC规范,所以与client间如何还有其他非Nginx软件实现的代理,将取不到X-Real-IP头部
作者回复: 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等变量的值
作者回复: 可以用子网掩码,把一段IP设为可信地址的。
作者回复: 完全正确!
如果启用了环回地址,不一定是最左边的IP,而是从右边开始数,第一个非可信地址的IP
作者回复: 把set_real_ip_from 127.0.0.1放在server{}下,不要放在location{}中,realip工作在find_config阶段之前
作者回复: 从后向前取,没错。你可以看下无菇朋友的留言,这个例子很有代表性
作者回复: 1、没有任何http模块会在find-config阶段生效,因为此阶段仅供Nginx框架使用;
2、变量与HTTP阶段无关,当你取变量值的时候,才是计算出变量的时候,所以,你要考虑你在什么阶段使用变量。
作者回复: 你需要把nginx1的IP,加入到nginx2中的可信地址中,即在nginx2的nginx.conf中加入set_real_ip_from指令
作者回复: 不是倒数第一个,是正数第一个。该头部格式为:X-Forwarded-For: client1, proxy1, proxy2
作者回复: 当realip模块替换了原来remote_port、remote_addr变量的值时(由IP报文头部中获得),为了不让原变量值丢失,才用realip_remote_port来存放原变量值的。
作者回复: 如果nginx与客户端之间没有其他反向代理,可以用remote_port获取到。如果存在其他反向代理,就无法用通用的办法获取到了。
作者回复: :-)