我在这里遵循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"
对于header,nginx返回空结果。而对于日志格式,它简单地不记录任何内容。我敢打赌,geoip_country_code甚至没有定义,所以nginx无法处理它或其他什么。
我试图读取服务器错误日志,但是,那里什么都没有(没有关于geoip和未定义的变量)。这有点烦人,我怎么知道nginx和geoip模块发生了什么?
发布于 2014-08-11 01:03:45
在查看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文件引起的。看过这个文件后,我发现它已经损坏了。然后我再次下载该文件,现在一切正常。
发布于 2018-06-27 15:42:35
一种调试方法是检查环境中的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;
https://stackoverflow.com/questions/25226873
复制相似问题