Compile dynamic nginx modules

This article was posted more than 1 year ago. Please keep in mind that the information on this page may be outdated, insecure, or just plain wrong today.

My notes for compiling modules in nginx.  As of nginx 1.9.11, you can dynamically load modules using load_module in nginx.conf.  To compile the module, if not available in your repo or you’re running latest version of nginx and not available in your repo, use -add-dynamic-module=path.

Install pre-requisite libraries for compile of nginx

apt-get install libpcre3-dev zlib1g-dev libssl-dev

Get echo-nginx-module

git clone https://github.com/openresty/echo-nginx-module

Get nginx build that matches my version

https://nginx.org/download/nginx-1.12.0.tar.gz
tar zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0.tar.gz

Configure make

./configure --add-dynamic-module=../echo-nginx-module --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid -- lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'

Make (but not install)

make -j2

Copy modules to /etc/nginx/modules/

cp objs/ngx_http_echo_module.so /etc/nginx/modules/ngx_http_echo_module.so

Modify nginx configuration to load module

Edit /etc/nginx/nginx.conf and add line:

load_module modules/ngx_http_echo_module.so;

Create a test in site configuration

Edit /etc/nginx/conf.d/default.conf (Your site configuration file may differ…)
Add the following:

location /echo {
    echo "Hello, world!";
}

Restart nginx and test

/etc/init.d/nginx restart

Test!

root@debian:~# curl https://techish.net/echo
Hello, world!
Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *