【发布时间】:2021-06-13 11:48:41
【问题描述】:
我一直在努力让这件事正常工作,但似乎无论我做什么,X-Country 都会得到值“US”,因为那是 @ 中最后一个 IP 地址的国家/地区987654322@ 标头。这是 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 声明在某种程度上是一个问题,但我不确定如何?
【问题讨论】:
标签: nginx geolocation geoip geoip2