Nginx geo ip module ne fonctionne pas, ne peut pas trouver un moyen de déboguer

Je suis le guide de configuration nginx geoip ici

J’écris quelque chose comme ça

geoip_country /path/to/GeoIP.dat; 

Je suis sûr que le fichier .dat est là et que nginx a la permission d’y accéder. Cependant, la variable geoip_country_code ne semble pas définie.

J’ai essayé de nombreuses approches pour le débogage, comme

 add_header X-debug-message "$geoip_country_code"; 

ou

 log_format debug "$geoip_country_code" 

Pour l’en-tête, nginx renvoie un résultat vide. Et pour le format de journal, il suffit d’enregistrer rien. Mon pari est que geoip_country_code n’est même pas défini, donc nginx ne peut pas y faire face ou quoi.

J’ai essayé de lire le journal des erreurs du serveur, mais il n’y avait rien (rien à propos de geoip et de la variable non définie). C’est un peu énervant, comment puis-je savoir ce qui se passe avec nginx et le module geoip?

Après avoir regardé dans syslog, j’ai remarqué qu’il y avait un segfault dans le module 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] 

Donc, je parie que cela est causé soit par le module geoip, soit par le fichier GeoIP.dat corrompu. Après avoir examiné le fichier, j’ai constaté qu’il était corrompu. Ensuite, je télécharge à nouveau le fichier, tout fonctionne bien maintenant.

Un moyen de déboguer pourrait être de vérifier l’environnement pour les variables GEOIP, par exemple dans PHP, regardez dans le tableau $_SERVER , ou essayez getenv(GEOIP_COUNTRY_CODE) .

Assurez-vous de définir les variables dans /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; 

la source