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