4 messages in ru.sysoev.nginxRe: about the Guide to Nginx Module D...
FromSent OnAttachments
Manlio PerilloAug 19, 2007 9:18 am 
Evan MillerAug 20, 2007 12:31 am 
Evan MillerAug 20, 2007 12:39 am 
Manlio PerilloAug 20, 2007 2:57 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: about the Guide to Nginx Module DevelopmentActions...
From:Evan Miller (emmi@public.gmane.org)
Date:Aug 20, 2007 12:31:54 am
List:ru.sysoev.nginx

Manlio Perillo wrote:

Hi again.

I have decided to write mod_wsgi by myself, and I have fuond the Evan Miller's guide very helful.

Glad it was useful. I'll try to keep updating it with more info, but in the meantime I thought I'd try to answer your specific questions (below).

However I think that some important documentation is missing: 1) The overall architecture of nginx 2) nginx memory handling

Nginx has a pool of memory associated with each request (r->pool), which is reclaimed at the end of the request. You can malloc memory with ngx_palloc(r->pool, BYTES). I'm not sure whether you can free memory allocated in this way manually.

3) how to read data from the request payload

I'm not sure, actually; but check out http://www.riceonfire.org/lxr/http/source/http/ngx_http_request_body.c

4) how to read and generate arbitrary headers There is an headers attribute in the request struct, what is its content?

I read headers by looking for the variable names that are set (e.g. "upstream_http_x_my_header"). The ngx_http_variable_unknown_header() function comes in handy.

To set a header, I think you'd use functions in the Headers module, something like (making it up here):

ngx_http_headers_conf_t *hcf = ngx_http_get_module_loc_conf(r, ngx_http_headers_module);

ngx_http_header_val_t *h = ngx_array_push(hcf->headers);

if (h == NULL) { return NGX_ERROR; }

h->value.hash = 1; h->value.key = ngx_string("X-My-Header"); h->value.value = ngx_string("Some value");

...

5) More about chain links. When sending the response body, we have two choices (but I'm not sure): - write the entire chain links and then pass it to the output filter (so we buffer the entire response) - create a partial response, create a buffer and call the output filter, then create a new partial response, create a new buffer and call the outputfilter, and so on.

I believe that's correct.

When I research these issues more I'll add them to the guide.

Good luck with mod_wsgi! I know it's a module a lot of people would find useful.

Evan