| |
| set var tools |
| ============= |
| |
| OVERVIEW |
| -------- |
| This collection of tools is designed to make it easier to set Nginx variables |
| using a common interface. It works by plugging into and extending the features |
| of the internal rewrite module, and operations performed by this module are |
| therefore done at the rewrite phase of handling. |
| |
| |
| ADVANTAGES OF USING THIS MODULE |
| ------------------------------- |
| |
| - simple interface - you don't have to worry about lots of http script compiling |
| - it plugs into the rewrite module, so setting (and getting) vars will happen |
| in the order you expect based on how they appear in the configuration file |
| - you do not have to worry about overriding the v->get_handler (useful if |
| a variable of a specific name could be set in multiple different ways) |
| |
| |
| WHEN TO USE THIS AND WHEN TO USE v->get_handler = my_func |
| --------------------------------------------------------- |
| |
| - if you want a variable to always be generated using a specific function, |
| and should not be over-ridden by 'set' functions (e.g. $request_uri, |
| $document_root), then you should use v->get_handler |
| |
| - if you want to allow a variable to be set using many possible methods, |
| including using the 'set' directive, then this module provides an easy way |
| for you to do so (if you use the v->get_handler method in this case, you may |
| run into problems because the get_handler may over-ride previous uses of the |
| set directive) |
| |
| |
| USAGE |
| ----- |
| |
| - decide on the type of function you'll need to write |
| |
| type use when there are these requirements |
| ---- ------------------------------------- |
| NDK_SET_VAR_BASIC 0 variable values, no extra data |
| NDK_SET_VAR_DATA 0 variable values, extra data |
| NDK_SET_VAR_VALUE 1 variable value, no extra data |
| NDK_SET_VAR_VALUE_DATA 1 variable value, extra data |
| NDK_SET_VAR_MULTI_VALUE 2+ variable values, no extra data |
| NDK_SET_VAR_MULTI_VALUE_DATA 2+ variable values, extra data |
| NDK_SET_VAR_HASH the space needed for the result string |
| value is known in advance (usually |
| used in a hash function) |
| |
| NOTE : if none of these generic calling types suit your needs, it is |
| easy to extend the list of types in the .c file (and you if you let me know |
| I'll add them to the list |
| |
| |
| - define the filter function with the respective prototype |
| |
| type prototype |
| ---- --------- |
| NDK_SET_VAR_BASIC ndk_set_var_pt |
| NDK_SET_VAR_DATA ndk_set_var_data_pt |
| NDK_SET_VAR_VALUE ndk_set_var_value_pt |
| NDK_SET_VAR_DATA_VALUE ndk_set_var_value_data_pt |
| NDK_SET_VAR_MULTI_VALUE ndk_set_var_value_pt |
| NDK_SET_VAR_MULTI_VALUE_DATA ndk_set_var_value_data_pt |
| NDK_SET_VAR_HASH ndk_set_var_hash_pt |
| |
| (See ngx_tools_module.h for the prototype definitions.) |
| |
| Note : For the multi_value functions, the variable value pointer is to the |
| first value (with the others being in an array following it) |
| |
| |
| to use one of the default setup functions |
| ----------------------------------------- |
| |
| - define one or multiple ngx_http_var_filter_t's at the global scope, setting : |
| |
| type = (one of types above) |
| func = function to call |
| size = (for multi value) the number of variable values |
| (for hash) length of buffer to allocate |
| data = (for data functions) additional data (see note below) |
| |
| - define a configuration directive (see in the .c file for examples), where the |
| function is 'ngx_http_set_var' and the 'post' is a pointer your filter definition |
| |
| |
| to setup in a customized way |
| ---------------------------- |
| |
| - define a configuration directive which has your own specific configuration function |
| |
| - inside your config function, define one or several ngx_http_var_filter_t's like |
| above, and call one of the ngx_http_set_var_..._core functions, passing the |
| variable name and value pointers as appropriate - see examples section |
| |
| Note : if you're passing extra data to the function, then you will probably want |
| to use this second method and store the data either in the loc conf, or just |
| allocate the space for it using one of the ngx_palloc functions. |
| |
| If the values that will be used for processing are in the same order as in the |
| config file and there aren't any additional values that are input, then you can |
| just use the (ngx_str_t *) (cf->args->elts) + 1 as your base for the values or |
| possibly not use the _core versions of the functions. |
| |
| |
| That's it! |
| |
| |
| FEEDBACK |
| -------- |
| |
| If you have any comments (good/bad), or have found any bugs, please let me know at: |
| ngx.eugaia AT gmail DOT com |
| |
| |
| TODO |
| ---- |
| - add more documentation/examples |
| |