如何使用现有NGINX安装启用动态模块

yoa*_*ano 26 configuration nginx geoip

介绍

从NGINX版本1.9.11和upwarts,引入了一个新功能:动态模块.

使用动态模块,您可以选择在运行时将单独的共享对象文件作为模块加载 - 包括第三方模块和一些本机NGINX模块.(来源)

我的设置和问题

我从主线安装NGINX(目前是1.9.14),因此它能够使用动态模块.它还有我想要动态启用的模块:

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 ...
Run Code Online (Sandbox Code Playgroud)

请注意,--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
Run Code Online (Sandbox Code Playgroud)

问题

  • 我尝试在安装NGINX的系统上构建模块是一个问题吗?
  • 为什么我的命令没有生成.so文件?

miy*_*uru 26

我有同样的问题,@ vladiastudillo回答是我需要的缺失部分.

首先添加nginx稳定仓库:

sudo add-apt-repository ppa:nginx/stable
Run Code Online (Sandbox Code Playgroud)

然后运行apt update:

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

并获得nginx geoip模块:

sudo apt-get install nginx-module-geoip
Run Code Online (Sandbox Code Playgroud)

这将下载并加载模块 /usr/lib/nginx/modules


要加载nginx模块,

开放nginx.conf:

sudo nano /etc/nginx/nginx.conf
Run Code Online (Sandbox Code Playgroud)

在主要上下文中添加以下内容:

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

当您重新加载配置或重新启动nginx时,将加载该模块.

要动态"卸载"模块,请注释掉或删除其load_module指令并重新加载nginx配置.

  • 我需要从PPA重新安装Nginx吗?还是来自Ubuntu的标准NGINX就足够了? (2认同)

Pet*_*nes 5

发现这是稍有不同的亚马逊的Linux 2016.09,执行百胜更新后,亚马逊的Linux 2016.03.

您可以在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.如果是这样,您可以通过以下方式从Amazon现有的yum repo中简单地安装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文件)