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