proxy_pass based on (possibly changed) $host

Igor Sysoev is at rambler-co.ru
Wed Jan 28 14:02:33 MSK 2009


On Wed, Jan 28, 2009 at 02:52:24AM -0800, Dave Bailey wrote:

> Hi,
> 
> I am porting a lighttpd module that I wrote to nginx.  I am new to
> nginx.  I would like to know if it is possible to choose the
> proxy_pass backend from the Host header within a server.  In lighttpd,
> this is possible by:
> 
> $SERVER["socket"] == ":80" {
>   $HTTP["host"] == "bar.foo.com" {
>     proxy-core.backends = ( "10.0.0.1:80" )
>   }
>   $HTTP["host"] == "baz.foo.com" {
>     proxy-core.backends = ( "10.0.0.2:80" )
>   }
> }

However, the better:

    server {
        listen   80;
        server_name   bar.foo.com;

        location  / {
            proxy_pass  http://10.0.0.1:80;
        }
    }

    server {
        listen   80;
        server_name   baz.foo.com;

        location  / {
            proxy_pass  http://10.0.0.2:80;
        }
    }


> The module that I am porting to nginx will sometimes update the Host
> header such that a different proxy backend should be chosen.  For
> example, a request from a particular IP address to http://bar.foo.com/
> might be updated such that its Host header changes from bar.foo.com to
> baz.foo.com, and thus it is served by the 10.0.0.2:80 backend.  Is
> there a way to specify a relationship between $host and proxy_pass in
> nginx.conf within the same server { ... }?

    map $remote_addr  $back1 {
        default       10.0.0.1:80;
        192.168.1.1   10.0.0.2:80;
        192.168.1.5   10.0.0.2:80;
    }

    server {
        listen   80;
        server_name   bar.foo.com;

        location  / {
            proxy_pass  http://$back1$request_uri;
        }
    }

    map $remote_addr   $back2 {
        default        10.0.0.2:80;
        192.168.10.1   10.0.0.1:80;
        192.168.10.5   10.0.0.1:80;
    }

    server {
        listen   80;
        server_name   baz.foo.com;

        location  / {
            proxy_pass  http://$back2$request_uri;
        }
    }


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list