How can I redirect some IP addresses?

Ruslan Ermilov ru at nginx.com
Mon Jul 2 10:16:58 UTC 2012


On Sun, Jul 01, 2012 at 12:16:31AM -0400, Jiff wrote:
> Hi forulisters,
> 
> I've got a bunch of IP addresses and IP ranges I'd like 
> to redirect to, let's say the amnesty international site 
> (they're mainly from gov).
> 
> I read http://wiki.nginx.org/HttpAccessModule but as I've
> got many of them I'm wondering if nginx can read a text 
> file (or something else) instead of put all these addresses 
> in a block?

I think you want the geo module instead:

http://nginx.org/en/docs/http/ngx_http_geo_module.html

It supports the "include" directive inside the "geo" block.
(Currently it lacks the IPv6 support though.)

> I'd also like if I can have a round-robin of redirections
> (once for amnesty, next to copwatch, etc)?

While not exactly what you want, but you can use the "split
clients" module to match $remote_port to a particular URL:

http://nginx.org/en/docs/http/ngx_http_split_clients_module.html

(This has a limitation: it will always give you the same
redirection URL over one persistent connection.)

http {
    geo $wrapped {
	127.0.0.1 1;
#	include conf/wrapped.conf;
    }

    split_clients "${remote_port}AAA" $redirect {
	33% http://url1;
	33% http://url2;
	*   http://url3;
    }

    server {
	if ($wrapped) {
	    return 301 $redirect;
	}

	location / {
	    return 200 "normal content";
	}
    }
}



More information about the nginx mailing list