我在这里关注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模块正在发生什么?
答案 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;