question about addition filter

Igor Sysoev is at rambler-co.ru
Thu Jan 29 10:43:47 MSK 2009


On Wed, Jan 28, 2009 at 02:34:54PM -0800, Mohammad Kolahdouzan wrote:

> What if I wanted to write a module that does something like this: if input request is something like http://localhost/y?a=foo&b=bar, then have the before_body fetch yahoo.com/foo and after_body get the content of google.com/bar (i.e., the URLs can bo modified on the fly). Is this doable, possibly by modifying the content of uri that is passed to ngx_http_subrequest, or is there another alternative?

Currently add_xxxx_body does not support variables.
If it could, then it would be possible:

          location /x/ {
              proxy_pass http://www.yahoo.com/;
          }
 
          location /g/ {
              proxy_pass  http://www.google.com/;
          }
 
          location /y {
              add_before_body /x/$arg_a;
              add_after_body  /q/$arg_b;

> ________________________________
> From: Igor Sysoev <is at rambler-co.ru>
> To: nginx at sysoev.ru
> Sent: Wednesday, January 28, 2009 1:39:50 PM
> Subject: Re: question about addition filter
> 
> On Wed, Jan 28, 2009 at 01:28:50PM -0800, Mohammad Kolahdouzan wrote:
> 
> > 
> > Igor,
> > 
> > I tried your config, with 0.7.32 and 0.7.31, with/without debug, with/without optimization, but I constantly get garbage before and after the content of /y/index.html. Maybe it is returning some uninitialized memory? 
> > 
> > I might be totally wrong, but Evan's module development tutorial mentions something about NGX_AGAIN and that we should return NGX_AGAIN if ngx_http_subrequest returns NGX_AGAIN. But looking in to your code, ngx_http_addition_filter_module.c, line numbers 154 and 183, you are always returning NGX_ERROR if ngx_http_subrequest does not return NGX_OK. Could that be the reason?
> > 
> > Thanks,
> > -M
> > 
> > ps, I doubt it matters, but I have CentOS 5.2 64 bit.
> 
> This may be gzipped content returned by external sites:
> 
>           location = /x {
>               proxy_pass http://www.yahoo.com/;
> +             proxy_set_header  Accept-Encoding  "";
>           }
> 
>           location = /g{
>               proxy_pass  http://www.google.com/;
> +             proxy_set_header  Accept-Encoding  "";
>           }
> 
> > 
> > 
> > 
> > ________________________________
> > From: Igor Sysoev <is at rambler-co.ru>
> > To: nginx at sysoev.ru
> > Sent: Wednesday, January 28, 2009 12:04:35 PM
> > Subject: Re: question about addition filter
> > 
> > On Wed, Jan 28, 2009 at 11:21:35AM -0800, Mohammad Kolahdouzan wrote:
> > 
> > > Is it possible to have a configuration similar to the following:
> > > 
> > >         location /x {
> > >             proxy_pass http://www.yahoo.com;
> > >         }
> > > 
> > >         location /y {
> > >             add_before_body /x;
> > >             add_after_body  http://www.google.com;
> > >         }
> > > 
> > > which would supposedly add the content of the www.yahoo.com and www.google.com before and after the content of the page at /y/index.html? The addition filter module states that the texts after add_before_body and add_after_body are URI, but the above config doesn't seem to be doing it!
> > 
> > This should work, but it's better to use 0.7.32 for this:
> > 
> >          location = /x {
> >              proxy_pass http://www.yahoo.com/;
> >          }
> > 
> >          location = /g{
> >              proxy_pass  http://www.google.com/;
> >          }
> > 
> >          location /y {
> >              add_before_body /x;
> >              add_after_body  /q;
> >          }
> > 
> > 
> > -- 
> > Igor Sysoev
> > http://sysoev.ru/en/
> > 
> > 
> >      
> 
> -- 
> Igor Sysoev
> http://sysoev.ru/en/
> 
> 
>       

-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list