How to enable dynamic module with an existing NGINX installation

yoano picture yoano · Apr 11, 2016 · Viewed 61.3k times · Source

Introduction

From NGINX version 1.9.11 and upwarts, a new feature is introduced: dynamic modules.

With dynamic modules, you can optionally load separate shared object files at runtime as modules – both third-party modules and some native NGINX modules. (source)

My setup and the problem

I have NGINX installed from the mainline (currently 1.9.14) so it is capable to use dynamic modules. It has also the module I want dynamicly enabled:

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 ...

Note the --with-http_geoip_module=dynamic which loads the module I need (dynamically). Unfortunately, the documentation is lacking (some details) and I am unable to set this up.
I have an existing NGINX installation (not from source). But so far as I can understand I just need to build the module, place the generated module file in the right NGINX folder and enable it in the config file.

What I tried so far

I tested this on a different machine (with the same configuration, but not a production machine), but I don't see the ngx_http_geoip_module.so file. The commands I used:

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

The questions

  • Is it a problem that I try to build the module on a system that has NGINX installed not from source?
  • Why is there no .so file generated by my commands?

Answer

miyuru picture miyuru · Jul 17, 2016

I had the same question, and @vladiastudillo answer was the missing piece I needed.

First add the nginx stable repo:

sudo add-apt-repository ppa:nginx/stable

Then run apt update:

sudo apt-get update

And get the nginx geoip module:

sudo apt-get install nginx-module-geoip

This will download and load the module to /usr/lib/nginx/modules


To load the nginx module,

open nginx.conf:

sudo nano /etc/nginx/nginx.conf

add add below in the main context:

load_module "modules/ngx_http_geoip_module.so";

The module will be loaded, when you reload the configuration or restart nginx.

To dynamically “unload” a module, comment out or remove its load_module directive and reload the nginx configuration.