Proxy for POST update requests

Chris Savery chrissavery at gmail.com
Sun Sep 7 22:35:23 MSD 2008


Well, I got this working and it's pretty nice too. I just wanted to post 
a couple notes here in the hope they may help someone else who needs to 
do this.
relevant config looks like this,

 location ~ \.php$ {
            proxy_set_header WhatSlave $host;
            if ($request_method = 'POST') {
                proxy_pass http://theserverwiththedata.com;
            }
        fastcgi_pass 127.0.0.1:9000; include fastcgi_params;
        }

Notice I added a set header line. This was because in some cases the 
master server needs to know where the request was proxied from. In some 
cases it needs to do a redirect, eg. secure login. And that set header 
line causes a header to appear in the $_SERVER variable with the HTTP_ 
prefix. eg. HTTP_WHATSLAVE and has value of the host without http prefix.

Of course, the master server is running mysql replication and the data 
saved during the POST comes back to the slave server pretty quickly. In 
this setup all the GET requests drop through to the fastcgi locally and 
access the data on the slave. The POST requests pas up to modify data on 
the master. Good idea: give the local mysql user only "select" 
privileges to make sure it doesn't nasty up the local data. If you allow 
altering data locally when doing replication you will create big 
headaches sooner or later.

Chris :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx/attachments/20080908/696a8750/attachment.html>


More information about the nginx mailing list