Apache mod_maxminddb - 不显示国家代码,错误未定义索引

Posted

技术标签:

【中文标题】Apache mod_maxminddb - 不显示国家代码,错误未定义索引【英文标题】:Apache mod_maxminddb - not showing country code, ERROR undefined index 【发布时间】:2020-06-22 13:30:23 【问题描述】:

我按照 github 上的建议安装了 mod_maxmindb。可能我错过了一些东西,但我没有得到国家代码或其他东西。

我发现了 2 个问题:

在制作期间 --> 找不到 dlname 在测试过程中我得到 apache 错误:php 通知:未定义索引:MM_COUNTRY_CODE

详细说明: 第 1 步 - 安装)

Apache2 version:
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2020-04-13T17:19:17
Distributor ID: Ubuntu
Description:    Ubuntu 20.04 LTS
Release:        20.04
Codename:       focal
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
/usr/bin# ls -la apx*
-rwxr-xr-x 1 root root 19743 Mar 13 13:26 apxs
lrwxrwxrwx 1 root root     4 Mar 13 13:26 apxs2 -> apxs
add-apt-repository ppa:maxmind/ppa
apt update
apt install libmaxminddb0 libmaxminddb-dev mmdb-bin
apt install apache2-dev
apt install build-essential
wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz
tar -xzf mod_maxminddb-1.2.0.tar.gz
cd mod_maxminddb-1.2.0/
./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for style of include used by make... GNU
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... none
checking for gcc option to accept ISO C99... none needed
checking whether compiler accepts "-std=c99 -fms-extensions"... yes
checking for apxs2... /usr/bin/apxs2
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking maxminddb.h usability... yes
checking maxminddb.h presence... yes
checking for maxminddb.h... yes
checking for MMDB_lib_version in -lmaxminddb... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: executing depfiles commands
make install
Making install in src
make[1]: Entering directory '/mod_maxminddb-1.2.0/src'
make[2]: Entering directory '/mod_maxminddb-1.2.0/src'
/usr/bin/apxs2 -c  -lmaxminddb  -Wc,"-g -O2 -std=c99 -fms-extensions"  mod_maxminddb.c
/usr/share/apr-1.0/build/libtool  --mode=compile --tag=disable-static x86_64-linux-gnu-gcc -prefer-pic -pipe -g -O2 -fstack-protector-strong -Wformat -Werror=format-security  -Wdate-time -D_FORTIFY_SOURCE=2   -DLINUX -D_REENTRANT -D_GNU_SOURCE  -pthread  -I/usr/include/apache2  -I/usr/include/apr-1.0   -I/usr/include/apr-1.0 -I/usr/include -g -O2 -std=c99 -fms-extensions  -c -o mod_maxminddb.lo mod_maxminddb.c && touch mod_maxminddb.slo
libtool: compile:  x86_64-linux-gnu-gcc -pipe -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -DLINUX -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/apache2 -I/usr/include/apr-1.0 -I/usr/include/apr-1.0 -I/usr/include -g -O2 -std=c99 -fms-extensions -c mod_maxminddb.c  -fPIC -DPIC -o .libs/mod_maxminddb.o
/usr/share/apr-1.0/build/libtool  --mode=link --tag=disable-static x86_64-linux-gnu-gcc -Wl,--as-needed -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now    -o mod_maxminddb.la  -lmaxminddb -rpath /usr/lib/apache2/modules -module -avoid-version    mod_maxminddb.lo
libtool: link: rm -fr  .libs/mod_maxminddb.la .libs/mod_maxminddb.lai .libs/mod_maxminddb.so
libtool: link: x86_64-linux-gnu-gcc -shared  -fPIC -DPIC  .libs/mod_maxminddb.o   -lmaxminddb  -Wl,--as-needed -Wl,-Bsymbolic-functions -Wl,-z -Wl,relro -Wl,-z -Wl,now   -Wl,-soname -Wl,mod_maxminddb.so -o .libs/mod_maxminddb.so
libtool: link: ( cd ".libs" && rm -f "mod_maxminddb.la" && ln -s "../mod_maxminddb.la" "mod_maxminddb.la" )
/usr/bin/apxs2 -i -a -n maxminddb .libs/mod_maxminddb.so
/usr/share/apache2/build/instdso.sh SH_LIBTOOL='/usr/share/apr-1.0/build/libtool' .libs/mod_maxminddb.so /usr/lib/apache2/modules
/usr/share/apr-1.0/build/libtool --mode=install install .libs/mod_maxminddb.so /usr/lib/apache2/modules/
libtool: install: install .libs/mod_maxminddb.so /usr/lib/apache2/modules/mod_maxminddb.so
Warning!  dlname not found in /usr/lib/apache2/modules/mod_maxminddb.so.
Assuming installing a .so rather than a libtool archive.
chmod 644 /usr/lib/apache2/modules/mod_maxminddb.so
[preparing module `maxminddb' in /etc/apache2/mods-available/maxminddb.load]
Module maxminddb already enabled

--> 在 make install 期间我收到警告 --> 警告!在 /usr/lib/apache2/modules/mod_maxminddb.so 中找不到 dlname

步骤 2) 数据库

apt update
apt install geoipupdate
nano /etc/GeoIP.conf

填写我的数据

geoipupdate

检查数据库是否在这里:

/usr/share/GeoIP# ls -la /usr/share/GeoIP/Ge*
-rw-r--r-- 1 root root 3830286 Jun 16 21:52 /usr/share/GeoIP/GeoLite2-Country.mmdb

第 3 步 - 测试

检查模块是否在 apache 中加载:

apachectl -M | grep -i maxmin*
 maxminddb_module (shared)

我的虚拟主机配置如下:

<VirtualHost *:443>
ServerName sub.domain.tld
DocumentRoot "/var/www/test"
SSLEngine On
    <Directory /var/www/test/>
        Require all granted
        AllowOverride All
        Options Indexes FollowSymLinks
    MaxMindDBEnable On
    MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
    MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code

    </Directory>
SSLCertificateFile /xxx
SSLCertificateKeyFile /xxx
SSLCertificateChainFile /xxx

ErrorLog $APACHE_LOG_DIR/error_test.log
CustomLog $APACHE_LOG_DIR/access_test.log combined

然后我创建了一个包含内容的网站:

<?php
$country = $_SERVER["MM_COUNTRY_CODE"];
echo "<br />TESTCOUNTRY : $country<br />";

并从公共 IP 访问它。 Apache日志显示外部IP:

89.144.xxx.xxx - - [22/Jun/2020:15:05:44 +0200] "GET / HTTP/1.1" 200 250 "-" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (Khtml, like Gecko) Version/13.0 Edgios/45.5.0 Mobile/15E148 Safari/605.1.15"

Geoiplocation.net 显示我的 IP 地址是“AT”

但我没有国家代码 - 该网站仅显示: 测试国家:

apache 错误日志显示未定义索引:

Tue Jun 23 19:55:27.905107 2020] [php7:notice] [pid 22519] [client 89.144.xxx.xxx:17391] PHP Notice:  Undefined index: MM_COUNTRY_CODE in /var/www/test/index.php on line 2

还重新启动了 Apache / 服务器。

所以 - 如果有人可以帮助我或解释我错在哪里或可能是哪里错误,那就太好了..

谢谢! 棒棒糖

更新 23.06。 在认为这是数据库文件的问题后,我还下载了其他数据库

EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

并将虚拟主机从 Geolite2-Contry mmdb 更改为 Geolite2-City.mmdb:

MaxMindDBEnable On
MaxMindDBFile CITY_DB /usr/share/GeoIP/GeoLite2-City.mmdb
MaxMindDBEnv MM_COUNTRY_CODE CITY_DB/country/iso_code

我现在可以看到我的国家代码了!!

现在我尝试手动下载 GeoLite2-Country.mmdb 并将其替换为自动下载的 mmdb - 但未定义索引错误仍然存​​在。

任何建议:-)

【问题讨论】:

【参考方案1】:

感谢 maxmind 支持解决问题!

使用正确的环境设置现在一切正常: https://github.com/maxmind/mod_maxminddb#maxminddbenv

MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv COUNTRY_CODE COUNTRY_DB/country/iso_code

我从这个示例中获取了我的代码 - 什么不起作用

https://github.com/maxmind/mod_maxminddb#blocking-by-country

【讨论】:

以上是关于Apache mod_maxminddb - 不显示国家代码,错误未定义索引的主要内容,如果未能解决你的问题,请参考以下文章

svn右键菜单不显

XSS document Img标签不显图

使用 p 值逐步回归以删除 p 值不显着的变量

调用泛型方法而不显式指定类型参数

Qt - 如何在不显式实现线程的情况下同时运行两个插槽

在数据框中合并两个熊猫系列而不显式使用键