Distinct upstream servers by name

Maxim Dounin mdounin at mdounin.ru
Thu Jan 13 16:48:10 MSK 2011


On Wed, Jan 12, 2011 at 04:26:54PM -0500, hydrow wrote:

> Hello.
> I want to proxy 2 apache vhosts.
> Both vhosts running on apache default port: 8080 and both are resolved
> through /etc/hosts
> upstream ultimabex_upstream{
>   server ultimabex.va:8080;
>   server ultimabex.vb:8080;
> }
> The issue is how to send correct Host header to apache so it will find
> vhost in his vhosts.conf
> and serve it accordingly.
> Used custom LogFormat in apache to catch ServerName(%v),
> Canonical ServerName(%V) ans Host(%h) headers sent by nginx.
> Setting Host in nginx is altering Canonical ServerName(%V) in apache
> headers.
> tried:
> proxy_set_header Host $upstream_http_host  -  resulting in in
> apache logs
> proxy_set_header Host $upstream_http_hostname  -  resulting in first
> found apache vhost
> It works great when i set Host manually, like:
> proxy_set_header Host "ultimabex.va"
> or
> proxy_set_header Host "ultimabex.vb"
> Any way to set it automatically?

No.  The same upstream request is used to communicate with all 
backend servers (including fallback via proxy_next_upstream to 
another server if one backends dies), so the Host header can't be 
different for different backend servers.

You have to configure identical ServerName's on all backends (or 
add ServerAlias) and use that name in proxy_set_header.

Maxim Dounin

More information about the nginx mailing list