Nginx geo ip模块不起作用,找不到调试方法
Posted
技术标签:
【中文标题】Nginx geo ip模块不起作用,找不到调试方法【英文标题】:Nginx geo ip module doesn't work, cannot find a way to debug 【发布时间】:2014-08-10 08:28:21 【问题描述】:我在这里遵循 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模块是怎么回事?
【问题讨论】:
【参考方案1】:查看 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 文件引起的。查看文件后,我发现它已损坏。然后我再次下载文件,现在一切正常。
【讨论】:
【参考方案2】:一种调试方法可能是检查 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
【讨论】:
以上是关于Nginx geo ip模块不起作用,找不到调试方法的主要内容,如果未能解决你的问题,请参考以下文章
CSS 模块在 Codesandbox 中不起作用 - 即使它们存在也找不到文件
Pyinstaller 在 python 3.7 中不起作用(找不到模块“编码”)
动态图像路径在 Require 函数中不起作用:找不到此相关模块