如何安装nginx第三方模块

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何安装nginx第三方模块相关的知识,希望对你有一定的参考价值。

在原生的nginx,他不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.nginx第三方模块安装方法如下:

1

./configure --prefix=/你的安装目录 --add-module=/第三方模块目录

以安装pagespeed模块实例
在未安装nginx的情况下安装nginx第三方模块

1
2
3
4
5
6
7
8

# ./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module \
--add-module=../ngx_pagespeed-master --add-module=/第三方模块目录
# make
# make isntall
# /usr/local/nginx-1.4.1/sbin/nginx

在已安装nginx情况下安装nginx模块

1
2
3
4
5
6
7
8
9

# ./configure --prefix=/usr/local/nginx-1.4.1 \
--with-http_stub_status_module \
--with-http_ssl_module --with-http_realip_module \
--with-http_image_filter_module \
--add-module=../ngx_pagespeed-master
# make
# /usr/local/nginx-1.4.1/sbin/nginx -s stop
# cp objs/nginx /usr/local/nginx/sbin/nginx
# /usr/local/nginx-1.4.1/sbin/nginx

相比之下仅仅多了一步覆盖nginx文件.
总结,安装nginx安装第三方模块实际上是使用–add-module重新安装一次nginx,不要make install而是直接把编译目录下objs/nginx文件直接覆盖老的nginx文件.如果你需要安装多个nginx第三方模块,你只需要多指定几个相应的–add-module即可.
参考技术A st sort of person to raise my curiosity. The yeomanry

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

【中文标题】如何使用现有 NGINX 安装启用动态模块【英文标题】:How to enable dynamic module with an existing NGINX installation 【发布时间】:2016-08-01 22:51:13 【问题描述】:

简介

从 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 文件?

【问题讨论】:

【参考方案1】:

如果你使用 docker nginx:latest 这个模块已经包含在镜像中,你只需要指定 load_module :

"/usr/lib/nginx/modules/ngx_http_geoip_module.so";

您还需要在您的 nginx 映射卷中创建一个 geoip 文件夹。 尽管数据库似乎不再更新或可用,并且不包括 geoip2 模块。所以你们很多人需要谷歌...

【讨论】:

【参考方案2】:

发现这在执行 yum 更新后在 Amazon Linux 2016.09Amazon Linux 2016.03 上略有不同。

您可以通过在您的 ec2 实例 sudo yum search nginx-mod-http-geoip 上使用此命令提前确认这一点,您将在响应中看到一个带有 nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module 细节的 N/S matched: nginx-mod-http-geoip 条目

在这些情况下,安装的 nginx 版本将是1.10.1。如果是这样,您可以通过以下方式从 Amazon 现有的 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 文件)

【讨论】:

我想我有一个与你类似的问题,但我使用 Vultr 托管,当我运行 nginx -t 时,我得到:nginx: [emerg] module "/usr/lib64/nginx/modules/ngx_http_geoip_module.so" version 1012002 instead of 1014000 in /usr/share/nginx/modules/mod-http-geoip.conf:1 当我尝试你的解决方案时,它只是说它已经安装了!有什么想法吗? 2018/07/09 09:37:14 [emerg] 9552#0:/usr/share/nginx/modules/mod-http-geoip.conf 中不允许使用“load_module”指令:1 任何想法为什么我得到这个?我完全按照你的步骤.. 我需要帮助:***.com/questions/51243269/… No package nginx-mod-http-geoip available. 。 ?有人有这个问题吗?【参考方案3】:

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

首先添加 nginx stable repo:

sudo add-apt-repository ppa:nginx/stable

然后运行apt更新:

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 配置。

【讨论】:

我需要从 ppa 重新安装 nginx 吗?或者 Ubuntu 的标准 NGINX 就足够了吗? 如果 NGINX 是用动态模块构建的,你不需要重新安装。要检查可用模块,请键入 nginx -V 并检查动态字符串。 主要上下文在哪里? @W.M.主要上下文在 nginx.conf 文件中,没有任何括号。将其添加为第一行。 是否有人因为版本差异而遇到问题,即您运行的是 1.13 版本,而模块是针对 1.17 版本编译的?【参考方案4】:

我有同样的问题,你必须为你的 ubuntu 版本安装 http_geoip_module 库:

$ sudo apt-get install nginx-module-geoip

【讨论】:

我试过你的命令,但我得到“正在读取包列表...完成构建依赖关系树读取状态信息...完成 E:无法找到包 nginx-module-geoip”

以上是关于如何安装nginx第三方模块的主要内容,如果未能解决你的问题,请参考以下文章

nginx已安装完毕,如何再添加第三方模块?

如何给在用的nginx添加新模块

nginx如何安装第三方模块

Nginx 编译安装第三方模块

Nginx 编译安装第三方模块

Nginx 编译安装第三方模块