在 nginx.conf 中:
http {
geoip_country /etc/nginx/GeoIP.dat;
...
}
如果我做:
server{
...
location / {
add_header X-Geo $geoip_country_code;
add_header X-Geo3 $geoip_country_code3;
add_header X-IP $remote_addr;
...
}
}
只X-IP
出现在我的标题中。
$ curl -I www.example.org
HTTP/1.1 302 FOUND
Content-Type: text/html; charset=utf-8
Date: Thu, 17 Jan 2013 19:29:23 GMT
Location: http://www.example.org/login/?next=/
Server: nginx/1.2.2
Vary: Cookie
X-IP: 10.139.34.12
Connection: keep-alive
如果我将位置块更改为:
location / {
add_header X-Geo "foo";
add_header X-Geo3 "bar";
add_header X-IP $remote_addr;
...
}
标题出现了,我怎样才能得到$geoip_country_code
?
我刚刚发现 geo_ip 有一个内部选项可以使用
X-Forwarded-For
:啊,我只是弄清楚发生了什么。它试图为 LoadBalancers IP 而不是客户端解析 GeoIP,这就是为什么它是空白的。一旦我直接卷曲主机,它就返回了正确的结果。我必须使用 HttpRealipModule 为 HttpGeoipModule 提供客户端 IP。在我的会议中:
当您访问 / URL 时,您如何确认正在发送哪些标头?你能试试这个 curl 命令吗?
与此类似但带有您的网址的内容:
或者,您可以在配置geoip块时指定 IP 源。注意:我只在 GeoIP2 上测试过