Rewrite request on Nginx from GET to POST with body (for tracking pixel)

10.2k Views Asked by At

I'm trying to figure out if there's an easy way to convert a tracking pixel request that gets to Nginx into a POST that will go to an upstream with some added body.

for exmaple, if I get a GET request for http://domain.com/track/mail-id.gif, I'd like to configure Nginx to convert it to a POST that goes to http://upstream/mail-id with some body (let's say status:opened).

how can it be done?

2

There are 2 best solutions below

0
On

You should be able to use Nginx proxy functionality to achieve this, specifically with the proxy_method directive.

Something like:

location /track/mail-id.gif {
    proxy_pass http://upstream
    proxy_method POST
}

See http://nginx.org/en/docs/http/ngx_http_proxy_module.html for more information about Nginx proxy directives.

0
On

Just wanted to add a more detailed example:

location /track/mail-id.gif {
    proxy_pass http://upstream/mail-id;
    proxy_method POST;
    proxy_set_body "status:opened";
    # if needed
    # proxy_set_header Some-Header value;
}

Provided a url for proxy_pass here, so to ensure the exact behaviour requested.