Using body content to generate a correct response

Maxim Dounin mdounin at mdounin.ru
Thu Jan 9 15:55:31 UTC 2014


Hello!

On Tue, Jan 07, 2014 at 03:20:41PM -0200, Guido Accardo wrote:

> Hi everyone,
> 
> I'm using Nginx to serve applications of Real Time Bidding listening in
> different machines inside of my network. Each one of these applications is
> handling request from only one exchange and I'm successfully proxying the
> content to the correct applications by using upstreams.
> 
> One thing that I'm doing when I need to do some modifications in one o more
> of these applications is use "return 204" (for RTB system using OpenRTB
> protocl, HTTP 204 means NO BID) to not forward content. This was working
> great until now that my employer has decided to include another exchange,
> in consequence, another application. The new exchange is not OpenRTB based,
> it uses another protocol to answer, and of course no bid response is
> different too.
> 
> In order to correctly answer with no bid I have to parse XML content which
> is inside of the request sent by the exchange. This is the form of the
> response I have to send:
> 
> 
> <bidResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns="urn:yahoo:amp:3pi:bidResp"
> xsi:schemaLocation="urn:yahoo:amp:3pi:bidResp BidResponse.xsd"
> version="6.0">
> <bidResEnv signature="00C745CC3125610C5C1A30EBC9388FC7F8FE1F21"
> signType="SHA-1" token="1218078703"/>
> 
> <bidResponseSet numResp="1">
>     <bidResponse>
>         <oppId>da21129c-aca1-11e2-8c8c-2be3e1d9a996</oppId>
>         <advId>502863</advId>
>         <buyerLine>4372011</buyerLine>
>         <noBid/>
>     </bidResponse>
> </bidResponseSet>
> 
> 
> OppId, advId, buyerLine, bidResEnv signature are items that comes with the
> request.
> 
>  As you can see I have 2 challenges here:
> 
> * Parse XML body content with Nginx
> * Manipulate It to generate the correct answer
> 
> Do I need to develop a Nginx plugin or there is a simpler way to parse the
> body content and use it to answer?
> 
> I know that Nginx can use headers from the request in the response, so I
> presume that something with the body could also done.

Trivial solution would be to use embedded perl to read a request 
body and return appropriate answer, see here:

http://nginx.org/en/docs/http/ngx_http_perl_module.html

It should be also possible to do this using 3rd party Lua module.

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx-devel mailing list