Nginx geo ip模块不起作用,找不到调试方法

时间:2014-08-10 08:28:22

标签: debugging nginx geoip

我在这里关注nginx geoip配置指南http://www.howtoforge.com/nginx-how-to-block-visitors-by-country-with-the-geoip-module-debian-ubuntu

我写的是这样的

geoip_country /path/to/GeoIP.dat;

我很确定.dat文件在那里,并且nginx有权访问它。但是,似乎没有设置geoip_country_code变量。

我尝试了很多调试方法,比如

add_header X-debug-message "$geoip_country_code";

log_format debug "$geoip_country_code"

对于标头,nginx返回空结果。而对于日志格式,它只是记录什么。我的赌注是geoip_country_code甚至没有定义,所以nginx无法处理它或者什么。

我尝试读取服务器错误日志,但是,没有任何内容(没有关于geoip和未定义的变量)。这有点烦人,我怎么知道nginx和geoip模块正在发生什么?

2 个答案:

答案 0 :(得分:2)

在查看syslog之后,我注意到它是geoip模块中的段错误

Aug 10 12:55:39 web kernel: [1183521.905522] nginx[30201]: segfault at 7fa773b7f2ce ip 00007fa772bc5478 sp 00007fffe4adc570 error 4 in libGeoIP.so.1.6.0[7fa772bbe000+2d000]

所以,我敢打赌它是由geoip模块或损坏的GeoIP.dat文件引起的。查看文件后,我发现它已损坏。然后我再次下载文件,现在一切正常。

答案 1 :(得分:0)

一种调试方式可以是检查环境中的GEOIP变量,例如在PHP中查找$_SERVER数组,或尝试getenv(GEOIP_COUNTRY_CODE)

确保在/etc/nginx/fastcgi_params中定义变量:

### SET GEOIP Variables ###
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_CODE3 $geoip_country_code3;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;

source