===== Example: A Simple “Hello World” Module ===== This example uses a simple [[https://github.com/perusio/nginx-hello-world-module|Hello World module]] to show how to update the source for a module and load it into NGINX Plus. The “Hello World” module implements a simple directive (''hello_world'') that responds to requests with a simple message. ==== Step 1: Obtain the NGINX Open Source Release ==== - Determine the NGINX Open Source version that corresponds to your NGINX Plus installation. In this example, it’s NGINX 1.11.5. ''$ **nginx -v**nginx version: nginx/1.11.5 (nginx-plus-r11)'' - Download the corresponding NGINX Open Source package at [[http://nginx.org/download|nginx.org/download]]: ''$ **wget https://nginx.org/download/nginx-1.11.5.tar.gz** $ **tar -xzvf nginx-1.11.5.tar.gz**'' ==== Step 2: Obtain the Module Sources ==== - Obtain the source for the ‘Hello World’ NGINX module from [[https://github.com/perusio/nginx-hello-world-module|GitHub]]: ''$ **git clone https://github.com/perusio/nginx-hello-world-module.git**'' - The **config** shell file for a module defines how it is built, and its [[https://www.nginx.com/resources/wiki/extending/new_config/|format is different for dynamic modules]] than for modules being built statically into an NGINX Open Source binary. Modify the file **nginx-hello-world-module/config** to contain the following: ''ngx_addon_name=ngx_http_hello_world_module if test -n "$ngx_module_link"; then ngx_module_type=HTTP ngx_module_name=ngx_http_hello_world_module ngx_module_srcs="$ngx_addon_dir/ngx_http_hello_world_module.c" . auto/module else HTTP_MODULES="$HTTP_MODULES ngx_http_hello_world_module" NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_hello_world_module.c" fi'' For detailed information about compiling dynamic modules, including instructions on updating a module’s **config** file from the old format, see the [[https://www.nginx.com/resources/wiki/extending/converting/|NGINX Wiki]]. ==== Step 3: Compile the Dynamic Module ==== - Compile the module by first running the ''[[https://nginx.org/en/docs/configure.html|configure'']]'' script with the ''--with-compat'' argument, which creates a standard build environment supported by both NGINX Open Source and NGINX Plus. Then run ''make'' ''modules'' to build the module: ''$ **cd nginx-1.11.5/** $ **./configure --with-compat --add-dynamic-module=../nginx-hello-world-module** $ **make modules**'' - Copy the module library (**.so** file) to **/etc/nginx/modules**: ''$ **sudo cp objs/ngx_http_hello_world_module.so /etc/nginx/modules/**'' ==== Step 4: Load and Use the Module ==== - To load the module into NGINX Plus, add the ''[[https://nginx.org/en/docs/ngx_core_module.html#load_module|load_module'']]'' directive in the top‑level (main) context of your **nginx.conf** configuration file (not within the ''http'' or ''stream'' context): ''load_module modules/ngx_http_hello_world_module.so;'' - In the ''http'' context, add a ''location'' block with the ''hello_world'' directive provided by the Hello World module. Requests to the location return the response ''hello'' ''world''. ''server { listen 80; location / { hello_world; } }'' - Reload your NGINX Plus configuration and test it with a simple request: ''$ **nginx -s reload** $ **curl http://localhost/** hello world''