Proxy for POST update requests

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 :slight_smile:

You can set include fastcgi_params on the global http {} level :wink:

Yes, I have it there in some configs but have found also that it’s not
as robust.
In my testing I have found that if it is placed in http section then for
some reason on https servers it doesn’t get included. Is there supposed
to be a separate section for https? I should look into that. Anyway, I
have found I need to include it at the server level for those listening
on 443 and using ssl otherwise they result in .
Is that a bug or just some quirk of how ssl gets done?
Chris :slight_smile:

as far as i know it should make no difference. http and https can be
inside the same http {} block…