如何在生产环境中运行的 Nginx 上安装 Geoip2 模块?

San*_*dra 1 debian nginx geoip

有人可以向我解释如何在不破坏当前配置的情况下在生产环境中运行的 Nginx 1.14 上安装 Geoip2 模块吗?

我只找到指示如何在第一次安装期间使用 geoip2 模块编译 Nginx 的来源。

我正在使用 Linux 发行版 Debian 10。

谢谢

mgs*_*man 6

首先安装 libmaxminddb 库:

sudo add-apt-repository ppa:maxmind/ppa
sudo apt update
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin
Run Code Online (Sandbox Code Playgroud)

下载并解压 geoip2 模块:

https://github.com/leev/ngx_http_geoip2_module/archive/3.3.tar.gz
tar zxvf 3.3.tar.gz
Run Code Online (Sandbox Code Playgroud)

下载nginx源码:

wget https://nginx.org/download/nginx-1.14.2.tar.gz
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
Run Code Online (Sandbox Code Playgroud)

然后将 geoip2 构建为动态模块:

./configure --with-compat --add-dynamic-module=/path/to/ngx_http_geoip2_module
make
make modules
Run Code Online (Sandbox Code Playgroud)

这将产生objs/ngx_http_geoip2_module.so. 如果您愿意,可以手动将其复制到您的 nginx 模块路径。

例如:

cp objs/ngx_http_geoip2_module.so /etc/nginx/modules
Run Code Online (Sandbox Code Playgroud)

从(需要免费注册)获取最新数据库:

https://dev.maxmind.com/geoip/geoip2/geolite2/#Download_Access

Unpack dtabase files to /usr/share/GeoIP2 directory
Run Code Online (Sandbox Code Playgroud)

将以下行添加到您的 nginx.conf 中:

load_module modules/ngx_http_geoip2_module.so;
Run Code Online (Sandbox Code Playgroud)

添加到 nginx.conf http 部分:

geoip2 /usr/share/GeoIP2/GeoLite2-Country.mmdb {
    auto_reload 60m;
    $geoip2_metadata_country_build metadata build_epoch;
    $geoip2_data_country_code default=US source=$variable_with_ip country iso_code;
    $geoip2_data_country_name country names en;
}
geoip2 /usr/share/GeoIP2/GeoLite2-City.mmdb {
    auto_reload 60m;
    $geoip2_metadata_city_build metadata build_epoch;
    $geoip2_data_city_name default=London city names en;
}
Run Code Online (Sandbox Code Playgroud)

然后重启 Nginx 服务。希望这会帮助你。