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 函数中不起作用:找不到此相关模块

npm 不起作用,总是出现这个错误 -> 错误:找不到模块'are-we-there-yet'

shapely 模块报错 [WinError 126] 找不到指定的模块