如何使用现有的 NGINX 安装启用动态模块
How to enable dynamic module with an existing NGINX installation
简介
从 NGINX 1.9.11 及更高版本开始,引入了一项新功能:动态模块。
使用动态模块,您可以选择在运行时将单独的共享对象文件作为模块加载——第三方模块和一些本机 NGINX 模块。 (source)
我的设置和问题
我从主线(目前是 1.9.14)安装了 NGINX,因此它能够使用动态模块。它还有我想要动态启用的模块:
nginx -V
nginx version: nginx/1.9.14
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules ... --with-http_geoip_module=dynamic ...
注意 --with-http_geoip_module=dynamic
加载我需要的模块(动态)。
不幸的是,缺少文档(一些细节),我无法设置它。
我有一个现有的 NGINX 安装(不是来自源)。但据我所知,我只需要构建模块,将生成的模块文件放在正确的 NGINX 文件夹中,并在配置文件中启用它。
到目前为止我尝试了什么
我在另一台机器上测试过(具有相同的配置,但不是生产机器),但我没有看到 ngx_http_geoip_module.so
文件。
我使用的命令:
wget http://nginx.org/download/nginx-1.9.14.tar.gz
tar -xzf nginx-1.9.14.tar.gz
cd nginx-1.9.14/
./configure --with-http_geoip_module=dynamic
问题
- 我尝试在具有以下功能的系统上构建模块是否有问题?
NGINX 不是 从源安装?
- 为什么我的命令没有生成.so文件?
我遇到了同样的问题,您必须为您的 ubuntu 版本安装 http_geoip_module 库:
$ sudo apt-get install nginx-module-geoip
我有同样的问题,@vladiastudillo 的回答正是我所需要的。
首先添加nginx stable repo:
sudo add-apt-repository ppa:nginx/stable
然后运行 更新:
sudo apt-get update
并获取 nginx geoip 模块:
sudo apt-get install nginx-module-geoip
这会将模块下载并加载到 /usr/lib/nginx/modules
加载nginx模块,
打开nginx.conf
:
sudo nano /etc/nginx/nginx.conf
在主要上下文中添加以下内容:
load_module "modules/ngx_http_geoip_module.so";
当您重新加载配置或重新启动 nginx 时,模块将被加载。
要动态“卸载”模块,注释掉或删除其 load_module
指令并重新加载 nginx 配置。
在 Amazon Linux 2016.09、Amazon Linux 2016.03 执行 yum 更新后发现这略有不同。
您可以在 ec2 实例 sudo yum search nginx-mod-http-geoip
上使用此命令提前确认这一点,您将在响应中看到一个 N/S matched: nginx-mod-http-geoip
条目,其中包含 nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module
在这些情况下,安装的 nginx 版本将为 1.10.1
。当这是真的时,您可以通过以下方式从亚马逊现有的 yum 存储库中简单地安装 nginx geoip 模块:
sudo yum install nginx-mod-http-geoip
然后将模块与您的 nginx.conf
相关联,并将此行放在主上下文中
include /usr/share/nginx/modules/mod-http-geoip.conf;
(请注意,这与主要答案略有不同 - 在 aws 中,您在 nginx.conf 中有一个条目指向另一个 *.conf
文件,然后指向 *.so
文件)
如果您使用的是 docker nginx:latest 此模块已包含在映像中,您只需指定 load_module 即可:
"/usr/lib/nginx/modules/ngx_http_geoip_module.so";
您还需要在 nginx 映射卷中创建一个 geoip 文件夹。
尽管数据库似乎不再更新或不可用,并且不包括 geoip2 模块。所以你们很多人需要 google...
简介
从 NGINX 1.9.11 及更高版本开始,引入了一项新功能:动态模块。
使用动态模块,您可以选择在运行时将单独的共享对象文件作为模块加载——第三方模块和一些本机 NGINX 模块。 (source)
我的设置和问题
我从主线(目前是 1.9.14)安装了 NGINX,因此它能够使用动态模块。它还有我想要动态启用的模块:
nginx -V
nginx version: nginx/1.9.14
built by gcc 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
built with OpenSSL 1.0.1f 6 Jan 2014
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules ... --with-http_geoip_module=dynamic ...
注意 --with-http_geoip_module=dynamic
加载我需要的模块(动态)。
不幸的是,缺少文档(一些细节),我无法设置它。
我有一个现有的 NGINX 安装(不是来自源)。但据我所知,我只需要构建模块,将生成的模块文件放在正确的 NGINX 文件夹中,并在配置文件中启用它。
到目前为止我尝试了什么
我在另一台机器上测试过(具有相同的配置,但不是生产机器),但我没有看到 ngx_http_geoip_module.so
文件。
我使用的命令:
wget http://nginx.org/download/nginx-1.9.14.tar.gz
tar -xzf nginx-1.9.14.tar.gz
cd nginx-1.9.14/
./configure --with-http_geoip_module=dynamic
问题
- 我尝试在具有以下功能的系统上构建模块是否有问题? NGINX 不是 从源安装?
- 为什么我的命令没有生成.so文件?
我遇到了同样的问题,您必须为您的 ubuntu 版本安装 http_geoip_module 库:
$ sudo apt-get install nginx-module-geoip
我有同样的问题,@vladiastudillo 的回答正是我所需要的。
首先添加nginx stable repo:
sudo add-apt-repository ppa:nginx/stable
然后运行 更新:
sudo apt-get update
并获取 nginx geoip 模块:
sudo apt-get install nginx-module-geoip
这会将模块下载并加载到 /usr/lib/nginx/modules
加载nginx模块,
打开nginx.conf
:
sudo nano /etc/nginx/nginx.conf
在主要上下文中添加以下内容:
load_module "modules/ngx_http_geoip_module.so";
当您重新加载配置或重新启动 nginx 时,模块将被加载。
要动态“卸载”模块,注释掉或删除其 load_module
指令并重新加载 nginx 配置。
在 Amazon Linux 2016.09、Amazon Linux 2016.03 执行 yum 更新后发现这略有不同。
您可以在 ec2 实例 sudo yum search nginx-mod-http-geoip
上使用此命令提前确认这一点,您将在响应中看到一个 N/S matched: nginx-mod-http-geoip
条目,其中包含 nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module
在这些情况下,安装的 nginx 版本将为 1.10.1
。当这是真的时,您可以通过以下方式从亚马逊现有的 yum 存储库中简单地安装 nginx geoip 模块:
sudo yum install nginx-mod-http-geoip
然后将模块与您的 nginx.conf
相关联,并将此行放在主上下文中
include /usr/share/nginx/modules/mod-http-geoip.conf;
(请注意,这与主要答案略有不同 - 在 aws 中,您在 nginx.conf 中有一个条目指向另一个 *.conf
文件,然后指向 *.so
文件)
如果您使用的是 docker nginx:latest 此模块已包含在映像中,您只需指定 load_module 即可:
"/usr/lib/nginx/modules/ngx_http_geoip_module.so";
您还需要在 nginx 映射卷中创建一个 geoip 文件夹。 尽管数据库似乎不再更新或不可用,并且不包括 geoip2 模块。所以你们很多人需要 google...