Choosing source-address for upstream connections

Bruno Prémont bruno.premont at restena.lu
Fri May 17 13:27:42 UTC 2013


On Fri, 17 May 2013 17:17:20 +0400 Ruslan Ermilov wrote:

> On Fri, May 17, 2013 at 02:57:00PM +0200, Bruno Prémont wrote:
> > Is there a way to tell nginx to use a specific address when talking to
> > an upstream?
> > 
> > I would like to do something like:
> > 
> > upstream bla {
> > 	server [D0C::1234]:8080 src [D0C::beaf];
> > 	server 1.2.3.4:8080 src 1.2.3.5;
> > 	server upstream.example.tld src site.example.tld;
> > }
> > 
> > 
> > My system has multiple local addresses and just one of them should be
> > used to contact the given upstream.
> > 
> > 
> > If host-name is provided the source address should be chosen of the
> > same address family as the upstream address (so it's not necessary to
> > explicitly state IP addresses and duplicate server entries for IPv4
> > and IPv6).
> > 
> > 
> > It's possible to do it via "src" attribute of routes though it would be
> > more clean to do it on the application side.
> > e.g.
> >   ip route add D0C::1234/128 src D0C::beaf ethX
> >   ip route add 1.2.3.4/32 src 1.2.3.5
> 
> http://nginx.org/r/proxy_bind
> 
> This is the only option so far.  Per-server per-upstream source address
> selection isn't currently possible.

How does that one behave with regard to IPv4 versus IPv6?

The documentation says "address" which I guess can be either IPv4 or
IPv6 but not both so the right one gets choosen depending on the
destination address format? Or can I write it twice, once with IPv4
addr, once with IPv6 addr (ideally once with a hostname that gets
resolved as appropriate).

As it can be set on per-server or per-location level it would be
sufficient for me.

Bruno



More information about the nginx mailing list