我一直在努力让这个东西正常工作,但似乎无论我做什么,X-Country
都会得到值"US";,因为这是CCD_ 2报头中的最后一个IP地址的国家。这是谷歌的负载均衡器之一。
我似乎也找不到很多在网上正确配置的例子,我发现的大多数源代码都是GeoIP v1的。
/usr/share/GeoIP/GeoLite2-Country.mdb文件存在,并且已经验证为返回我正在测试的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
声明似乎在某种程度上是个问题,但我不确定是怎么回事?
问题的出现是因为130.211.38.x不属于130.211.0.0/22,并且递归搜索被禁用。您应该启用geoap2递归搜索,并将130.211.38.x IP添加到geoap2_proxy指令中,因为它实际上在链中代理您的请求:
geoip2_proxy 130.211.0.0/22;
geoip2_proxy 35.191.0.0/16;
geoip2_proxy 130.211.38.x/32;
geoip2_proxy_recursive on;
或者可能扩展CIDR,如geop2_proxy指令所述,从130.211.0.0/22扩展到130.211.00.0/16(正如whois所说,整个GOOGLE-CLOUD网络(:
geoip2_proxy 130.211.0.0/16;
geoip2_proxy 35.191.0.0/16;
geoip2_proxy_recursive on;