我的nginx配置是-
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
set_real_ip_from 55.55.55.1;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
我想知道我是否正确理解了此配置。假设用户有一台计算机-
1.在ip 11.11.11.11
处
2.用户位于IP为22.22.22.22
的代理之后
3.用户发送一个请求,该请求到达55.55.55.1
上的负载平衡器,负载平衡器将请求路由到nginx。
然后,一旦nginx完成了它的工作,请求将具有以下到达服务器的报头-
a. X-Forwarded-For: [11.11.11.11, 22.22.22.22, 55.55.55.1]
B(因为nginx将在X-Forwarded-For
上从数组的末尾到数组的开头递归,并且找到第一个不受信任的IP)
c.如果X-Forwarded-For
不存在于请求中,则在X-Real-IP
报头中使用$remote_addr
值,否则考虑set_real_ip_from
规则,通过在X-Forwarded-For
报头数组上递归来覆盖它。
请让我知道"a“、”B“和”c“是否正确。如果不正确,我想知道原因。
1条答案
按热度按时间h22fl7wq1#
您对配置的理解基本正确。以下是需要考虑的几点:
a. X-转发-用于:此标头将包含一个IP地址列表(以逗号分隔)。列表中的第一个IP将是客户机的IP地址(11.11.11.11),后面是转发请求的任何中介(如IP为www.example.com的代理22.22.22.22)。列表中的最后一个IP将是负载平衡器的IP(55.55.55.1)。
B. X-真实IP:如果未通过任何中介转发请求,则此标头将包含客户机的IP(11.11.11.11)。如果通过中介转发请求,则X-Real-IP标头将包含最后一个可信中介的IP(由set_real_ip_from指令指定)。在这种情况下,最后一个可信中介是www.example.com上的负载平衡器55.55.55.1,因此X-Real-IP报头将包含其IP(55.55.55.1)。
c.如果X-Forwarded-For报头不存在于请求中,真实的_ip_recursive指令无效,$remote_addr变量的值将被用于X-Real-IP报头中;如果X-Forwarded-For报头存在,real_ip_recursive指令告诉Nginx使用列表中的第一个不可信IP(客户端的IP,11.11.11.11)作为X-Real-IP报头的值。set_真实的_ip_from指令指定哪些IP是可信的(在本例中,是www.example.com上的负载平衡器55.55.55.1)。