| Nginx Development Kit (NDK) |
| =========================== |
| |
| Synopsis |
| |
| The NDK is an Nginx module that is designed to extend the core functionality of the |
| excellent Nginx webserver in a way that can be used as a basis of other Nginx modules. |
| |
| It has functions and macros to deal with generic tasks that don't currently have |
| generic code as part of the core distribution. The NDK itself adds few features |
| that are seen from a user's point of view - it's just designed to help reduce the |
| code that Nginx module developers need to write. |
| |
| Nginx module developers wishing to use any of the features in the NDK should specify |
| that the NDK is a dependency of their module, and that users will need to compile |
| it as well when they compile their own modules. They will also need to declare in |
| their own modules which features of the NDK they wish to use (explained below). |
| |
| If you are not an Nginx module developer, then the only useful part of this project |
| will be the 'usage for users' section below. |
| |
| |
| Status |
| |
| The NDK is now considered to be stable. It is already being used in quite a few third |
| party modules. |
| |
| |
| Features |
| |
| - additional conf_set functions for regexes, complex/script values, paths... |
| - macros to simplify tasks like checking for NULL values when doing ngx_array_push |
| - patches to the main source code |
| - ngx_auto_lib_core generic external library handler is included (see separate readme) |
| |
| |
| |
| Design |
| |
| modular : |
| |
| The kit itself is designed in a modular way, so that only the required code is compiled. |
| It's possible to add just a single NDK module, a few or all of them. |
| |
| auto-generated & easily extensible : |
| |
| Many of the macros available in the NDK are auto-generated from simple configuration |
| files. This makes creating similar macros for your own code very simple - it's usually |
| just the case of adding an extra line to a config file and re-running the build script. |
| |
| |
| Usage for users |
| |
| If another Nginx module you wish to use specifies that the NDK is a dependency, you |
| will need to do the following : |
| |
| 1 - download the source (http://github.com/simpl/ngx_devel_kit) |
| |
| 2 - unpack the source (tar -xzf $name) |
| |
| 3 - compile Nginx with the following extra option |
| |
| --add-module=/path/to/src |
| |
| e.g. |
| |
| ./configure --add-module=/path/to/ndk/base --add-module=/path/to/another/mod |
| |
| |
| Usage for developers |
| |
| To use the NDK in your own module, you need to add the following : |
| |
| 1 - add this line to your module |
| |
| #include <ndk.h> |
| |
| note : since the NDK includes the following lines |
| |
| #include <ngx_config.h> |
| #include <ngx_core.h> |
| #include <ngx_http.h> |
| |
| you can replace these with the single include above. |
| |
| 2 - add the following line in the config file for your module : |
| |
| have=NDK_[module_name] . auto/have |
| |
| for each NDK module that you wish to use (you need to include auto/have multiple |
| times if you wish to use multiple NDK modules. |
| |
| |
| Note : the old method of setting |
| |
| CFLAGS="$CFLAGS -DNDK_[module_name]" |
| |
| is now deprecated. It will still work, but results in unnecessary lines being |
| displayed when compiling Nginx. |
| |
| |
| Warning : using NDK_ALL |
| |
| You can also set NDK_ALL to include all the NDK modules. This is primarily as |
| a convenience in the early stages of development of another module. However, |
| |
| DO NOT LEAVE 'NDK_ALL' IN YOUR CONFIG FILE WHEN PUBLISHING |
| |
| Although the NDK is fairly small now, it could in time become a large repository |
| of code that would, if using NDK_ALL, result in considerably more code being compiled |
| than is necessary. |
| |
| |
| Todo |
| |
| - documentation for modules that don't already have it |
| - additional phase-handler functions |
| - generically testing for needing to add a handler |
| - remove dependency of set_var on OpenSSL being compiled in |
| |
| |
| License |
| |
| BSD |
| |
| |
| Contributing / Feedback |
| |
| If you are an Nginx module developer, and have developed some functions that are |
| generic in nature (or would be easily adapted to be so), then please send them to |
| me at the address below, and I'll add them to the kit. |
| |
| |
| Author |
| |
| Marcus Clyne (contact at simpl dot it) |
| |
| |
| |