必须使用 ngx_http_geoip2_module(推荐)或旧版 ngx_http_geoip_module,nginx 官方不内置,需手动编译;依赖 libmaxminddb 库和 geolite2-country.mmdb/geolite2-city.mmdb 数据库,并通过 --add-dynamic-module 或 --add-module 参数集成。

要让 Nginx 在源码编译时启用地理信息识别功能,必须使用 ngx_http_geoip2_module(推荐)或旧版 ngx_http_geoip_module。注意:Nginx 官方默认不内置这两个模块,需手动添加并编译。
确认模块类型与依赖库
GeoIP2 是当前主流方案,替代已停更的 GeoLite1(.dat 格式)。它依赖:
- libmaxminddb:MaxMind 官方 C 库,用于解析 .mmdb 数据库
- GeoLite2-City.mmdb 或 GeoLite2-Country.mmdb:从 MaxMind 官网下载,需注册账号并申请免费 License Key
- ngx_http_geoip2_module:Leev 维护的第三方模块,GitHub 可获取最新 release
编译前准备系统依赖
确保基础编译环境和开发库就位:
- 安装 GCC、PCRE、zlib、OpenSSL 开发包(如:
yum install -y gcc pcre-devel zlib-devel openssl-devel) - 编译安装
libmaxminddb,并执行ldconfig刷新动态库缓存 - 下载并解压
ngx_http_geoip2_module源码,放在便于引用的路径(如/usr/local/src/ngx_http_geoip2_module)
配置 configure 参数并编译安装
进入 Nginx 源码目录,运行 configure 命令,关键参数包括:
-
--add-dynamic-module=/path/to/ngx_http_geoip2_module(推荐动态模块,便于后续启停) - 或
--add-module=/path/to/ngx_http_geoip2_module(静态编译进二进制) - 务必保留常用模块,如
--with-http_ssl_module、--with-http_v2_module等
示例命令:
./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--add-dynamic-module=/usr/local/src/ngx_http_geoip2_module
随后执行 make && make install。安装完成后,用 nginx -V 2>&1 | grep geoip2 验证模块是否已加载。
配置文件中加载数据库与变量
在 nginx.conf 的 http 块中加入:
geoip2 /usr/local/nginx/geoip/GeoLite2-City.mmdb {
$geoip2_data_country_code country iso_code;
$geoip2_data_city_name city name;
};
再创建对应变量(如 $geoip2_data_country_code),即可在 server 或 location 中直接使用,例如做国家跳转、城市限流等。











