我一直在努力让这件事正常工作,但似乎无论我做什么,X-Country
都会获得值“US”,因为这是X-Forwarded-To
标题中最后一个 IP 地址的国家/地区。这是 Google 的负载平衡器之一。
我似乎也找不到很多在线正确配置的示例,我发现的大多数源代码都是针对 GeoIP v1 的。
文件 /usr/share/GeoIP/GeoLite2-Country.mmdb 存在,并且已经过验证,可以为我正在测试的 IP 地址返回正确的国家/地区。Sentry Python SDK 还根据标头中的第一个 IP 将 IP 地址解析为瑞典。
http {
...
geoip2_proxy 130.211.0.0/22;
geoip2_proxy 35.191.0.0/16;
geoip2_proxy_recursive off;
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_data_country_code default=SE country iso_code;
auto_reload 5m;
}
...
}
server {
...
location / {
...
proxy_set_header X-Country $geoip2_data_country_code;
...
}
}
有任何想法吗?
如果我删除所有 GeoIP2 配置,这是 Nginx 变量的状态:
GET /foobar HTTP/1.1
remote_addr: 130.211.0.x
http_x_forwarded_for: <my.real.ip>, 130.211.38.x
realip_remote_addr: 130.211.0.x
http_x_real_ip: -
proxy_add_x_forwarded_for: <my.real.ip>, 130.211.38.x, 130.211.0.x
似乎没有任何组合set_real_ip_from
等会分配任何变量,<my.real.ip>
以便我可以使用它。
编辑:以下似乎可行,但我认为它可以欺骗:
geoip2_proxy 0.0.0.0/0;
geoip2_proxy_recursive on;
geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb {
$geoip2_data_country_code default=SE country iso_code;
}
所以似乎我的geoip2_proxy
声明在某种程度上是一个问题,但我不确定如何?