Help developing a block directive
Joseph Spencer
spencer at kogosoftwarellc.com
Wed Jun 28 22:00:58 UTC 2017
Thanks for the fast reply!
So I think I see how this works now; however, I'm getting a new error.
Seems to be parsing related. Here is what I have now:
#define NGX_MY_CUSTOM_MODULE_CONF 0x80000001
static ngx_command_t ngx_my_custom_module_commands[] = {
{
ngx_string("my_custom_module_block"), /* directive */
NGX_HTTP_SRV_CONF |
NGX_HTTP_LOC_CONF |
NGX_CONF_NOARGS |
NGX_CONF_BLOCK,
my_custom_module_block, /* configuration setup function */
0, /* No offset. Only one context is supported. */
0, /* No offset when storing the module configuration on struct. */
NULL
},
{
ngx_string("directive_for_my_custom_module_block"), /* directive */
NGX_CONF_TAKE1|NGX_MY_CUSTOM_MODULE_CONF,
ngx_directive_for_my_custom_module_block_cmd, /* configuration
setup function */
0, /* No offset. Only one context is supported. */
0, /* No offset when storing the module configuration on struct. */
NULL
},
ngx_null_command /* command termination */
};
static char *my_custom_module_block(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf)
{
cf->cmd_type = NGX_MY_CUSTOM_MODULE_CONF;
ngx_http_core_loc_conf_t *clcf;
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
clcf->handler = ngx_my_custom_module_handler;
return NGX_CONF_OK;
}
How I'm seeing the following error:
2017/06/28 21:48:46 [emerg] 1#1: "location" directive is not allowed here
in /etc/nginx/nginx.conf:26
nginx: [emerg] "location" directive is not allowed here in
/etc/nginx/nginx.conf:26
Here is my full configuration file:
worker_processes 1;
load_module "modules/ngx_my_custom_module.so";
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
my_custom_module_block {
directive_for_my_custom_module_block "Some value";
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
On Wed, Jun 28, 2017 at 2:38 PM, Vladimir Homutov <vl at nginx.com> wrote:
> On 29.06.2017 00:15, Joseph Spencer wrote:
> > Hello,
> >
> > I'm trying to support this in my nginx.conf:
> >
> > my_custom_module_block {
> > directive_for_my_custom_module_block "Some value";
> > }
> >
> > Here is how I'm setting up the commands:
> >
> > static ngx_command_t ngx_my_custom_module_commands[] = {
> >
> > {
> >
> > ngx_string("my_custom_module_block"), /* directive */
> >
> > NGX_HTTP_SRV_CONF |
> >
> > NGX_HTTP_LOC_CONF |
> >
> > NGX_CONF_NOARGS |
> >
> > NGX_CONF_BLOCK,
> >
> > my_custom_module_block, /* configuration setup function */
> >
> > 0, /* No offset. Only one context is supported. */
> >
> > 0, /* No offset when storing the module configuration on struct.
> > */
> > NULL
> >
> > },
> >
> >
> >
> > {
> >
> > ngx_string("directive_for_my_custom_module_block"), /* directive
> > */
> > NGX_CONF_TAKE1,
> >
> > ngx_directive_for_my_custom_module_block_cmd, /* configuration
> > setup function */
> > 0, /* No offset. Only one context is supported. */
> >
> > 0, /* No offset when storing the module configuration on struct.
> > */
> > NULL
> >
> > },
> >
> >
> >
> > ngx_null_command /* command termination */
> >
> > };
> >
> > Everything compiles fine; however, I receive the following error and
> > nginx won't start:
> >
> > 2017/06/28 21:02:44 [emerg] 1#1: "directive_for_my_custom_module_block"
> > directive is not allowed here in /etc/nginx/nginx.conf:19
> > nginx: [emerg] "directive_for_my_custom_module_block" directive is not
> > allowed here in /etc/nginx/nginx.conf:19
> >
> > If anyone could be of assistance I would greatly appreciate it.
> >
>
> Take a look at ngx_conf_file.h to understand which structure flags have.
> You did not specify any possible context for the command that will
> appear in your block: NGX_CONF_TAKE1 solo only describes number of
> arguments, but command is not matching anything, thus the error.
>
> You can either declare your own context, like ngx_http_upstream_module
> does (NGX_HTTP_UPS_CONF for commands inside upstream{} block) or
> use API from ngx_conf_file.h to process commands inside your block
> like ngx_conf_handler() does.
>
>
>
>
>
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
--
Thanks,
Joe Spencer (member)
Kogo Software LLC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20170628/c2acf980/attachment.html>
More information about the nginx-devel
mailing list