IPv6 & IPv4 backend with proxy_bind
SplitIce
mat999 at gmail.com
Sat Nov 23 01:45:28 UTC 2013
Attached is the patch,
This is the first time I have created a variable or really done anything
inside the http request processing flow so feel free to let me know if
there is a better way to do something or if I have any edge cases.
This patch provides a $upstream_connecting variable which contains the IP
address and port of the upstream being connected. If there is no upstream,
it will return "-" my understanding is this may happen if the upstream is
DNS resolved (untested). There may be a better way of doing this?
This should be used in a config like the following -
map $upstream_connecting $test {
~^93\.184\.216\.119\: 192.168.2.40;
~^192\.168\.2\.([0-9]+)\: 192.168.2.40;
}
proxy_bind $test;
Regards,
Mathew
On Sat, Nov 23, 2013 at 12:10 AM, SplitIce <mat999 at gmail.com> wrote:
> Ruslan, its funny you should mention this, I am testing a patch to do just
> that at the moment.
>
> Once I am certain that its not leaking memory and I have reviewed it in
> regards to the nginx code standards Ill post it in this email thread in
> case it is of use for others.
>
>
> On Fri, Nov 22, 2013 at 11:56 PM, Ruslan Ermilov <ru at nginx.com> wrote:
>
>> On Tue, Nov 19, 2013 at 09:09:34PM +1030, SplitIce wrote:
>> > An IPv6 based fallback is not the only solution we want to support,
>> > ultimately we would like to be able to load-balance between them as
>> well.
>> > An error_page based solution would not assist.
>> >
>> > I also get the feeling that such a hack would have large implications,
>> > while either an additional parameter or another directive would be a
>> simple
>> > & clean solution to a real identified deficiency.
>> >
>> > This kind of request is only going to get more common with the growing
>> > adoption of IPv6.
>>
>> You can make the currently selected peer address available as an nginx
>> variable, then use the "map" directive to compute the per-peer bind
>> address, like follows:
>>
>> map $peer_addr $bind_addr {
>> 192.168.1.100 192.168.1.1;
>> 2001:0db8::100 2001:0db8::1;
>> ...
>> }
>>
>> or like this:
>>
>> map $peer_addr $bind_addr {
>> ~: 2001:0db8::1;
>> default 192.168.1.1;
>> }
>>
>> Hint: the "proxy_bind" directive supports variables.
>>
>> _______________________________________________
>> nginx-devel mailing list
>> nginx-devel at nginx.org
>> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20131123/da93143d/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch-upstream-v2
Type: application/octet-stream
Size: 3396 bytes
Desc: not available
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20131123/da93143d/attachment.obj>
More information about the nginx-devel
mailing list