我正在编写需要代理的 nginx 配置,并且需要原始 ip 地址。Nginx 的 HttpProxyModule 变量$proxy_add_x_forwarded_for
似乎完全适合这项任务,只是我的 Nginx 位于一个负载平衡器后面,该负载平衡器设置的不是X-Forwarded-For
,而是X-Cluster-Client-Ip
。
现在,一种可能性是使用
set X-Forwarded-For $http_x_cluster_client_ip,$proxy_add_x_forwarded_for
但有时是直接访问服务器,这会在标头中留下前导逗号。我考虑过使用if
,但这种情况恰好属于if
使用有问题的情况。
请注意,由于客户端可能已被代理,我确实希望保留X-Forwarded-For
标头中存在的任何数据(如果存在),此外传递数据从X-Cluster-Client-Ip
。
还有其他选择吗?
答案1
您可以使用 nginx HttpRealipModule 来过滤来自 Loadbalancer 的访问:
set_real_ip_from 192.168.0.1;
real_ip_header X-Cluster-Client-Ip;