必须通过源码编译集成ngx_http_geoip2_module模块并搭配maxmind的.mmdb数据库,官方预编译包不支持;需先安装libmaxminddb-dev等依赖,复用原nginx版本源码和configure参数,追加--add-module编译,替换nginx二进制文件后用nginx -v和nginx -t验证。

要让 Nginx 支持精准的地理位置解析,必须通过源码编译集成 ngx_http_geoip2_module 模块,并搭配 MaxMind 的 .mmdb 数据库。官方预编译包几乎都不含该模块,直接装 nginx-full 或 yum install nginx 并不能用 GeoIP2 —— 编译是绕不开的关键步骤。
安装必要依赖库
模块运行依赖 libmaxminddb(用于读取 .mmdb 格式),需先安装其开发包:
- Ubuntu/Debian:
sudo apt install libmaxminddb-dev - CentOS/RHEL:
sudo yum install libmaxminddb-devel(或dnf install libmaxminddb-devel) - 还需确保已安装
gcc、make、pcre-dev、zlib-dev等基础编译工具
获取并准备源码
必须复用当前运行 Nginx 的版本源码,避免功能丢失(如 HTTP/2、TLS 1.3、stream 模块等):
- 执行
nginx -V复制完整 configure 参数(含所有--with-xxx和--prefix) - 下载对应版本的 Nginx 源码包(例如
nginx-1.26.3.tar.gz),解压 - 克隆模块源码:
git clone https://github.com/leev/ngx_http_geoip2_module.git
配置与编译
进入 Nginx 源码目录,用原有参数追加模块路径后执行编译:
./configure [你复制的全部原有参数] --add-module=/path/to/ngx_http_geoip2_module --with-compat-
make(只编译,不执行make install) - 替换二进制文件:
sudo cp objs/nginx /usr/sbin/nginx(或宝塔路径/www/server/nginx/sbin/nginx)
⚠️ 注意:不要覆盖 conf 目录或重装整个 Nginx,否则会丢失原有配置和模块。
验证模块是否生效
编译完成后立即验证,避免后续配置白忙:
- 执行
nginx -V 2>&1 | grep -o geoip2,有输出说明模块已成功编译进内核 - 执行
nginx -t确保语法无误;若报错unknown directive "geoip2",说明模块未集成成功 - 可临时在
http{}块中加一行geoip2 /dev/null {}测试指令识别(再nginx -t)











