Conditionals in fastcgi config
Maxim Dounin
mdounin at mdounin.ru
Tue Oct 30 19:50:43 MSK 2007
Hello!
On Tue, 30 Oct 2007, Igor Clark wrote:
> Hi Igor and nginx people,
>
> We use nginx as a front end on various development machines in our studio to
> route to installations of Apache 1, Apache 2, PHP/FCGI, and Ruby/Mongrel on
> each machine, as appropriate depending on SERVER_NAME conventions, using our
> private DNS domain.
>
> We have some circumstances under which we need to grant external access to
> machines with this setup, and we do this using Apache reverse proxy on the
> firewall. (Eventually this will be replaced by nginx, but it's got a lot of
> legacy stuff which will need some time set aside for converting.) Hence
> http://outside.dns.name/index.php is proxied through to
> http://inside.dns.name/index.php.
>
> This means that the SERVER_NAME value seen by the web application (PHP script
> in this case) is inside.dns.name.
>
> We often configure web applications on a per-host basis, so that e.g.
> database configuration information is kept in a hash keyed by SERVER_NAME
> values. This means we need to have SERVER_NAME contain the outside.dns.name.
>
> We've achieved this straightforwardly by setting
>
> fastcgi_param SERVER_NAME $http_x_forwarded_host;
>
> which works nicely, but means that all applications responding to different
> DNS names (not viewed externally via Apache reverse proxy) fail, because they
> don't have an X-FORWARDED-HOST header, thus fall back to the local machine
> hostname, which is not in the configuration hash.
>
> We can get round this by creating separate server {} configurations for
> applications which need to be served behind a remote reverse proxy, but that
> defeats the object of our generic per-host configuration based on hostnames.
>
> So ideally I'd like to do something like:
>
> fastcgi_param SERVER_NAME $server_name;
> if ($http_x_forwarded_host) {
> fastcgi_param SERVER_NAME $http_x_forwarded_host;
> }
>
> but: firstly "fastcgi_param" is not supported inside "if", and secondly I
> don't know how or if this "overriding" would work.
>
> What's the best way to do this, please?
You may try something like this:
set $blah $server_name;
if ($http_x_forwarded_host) {
set $blah $http_x_forwarder_host;
}
fastcgi_param SERVER_NAME $blah;
Maxim Dounin
More information about the nginx
mailing list