How can I redirect some IP addresses?

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’d also like if I can have a round-robin of redirections
(once for amnesty, next to copwatch, etc)?

Jiff

Posted at Nginx Forum:

On Sun, Jul 01, 2012 at 12:16:31AM -0400, Jiff wrote:

Hi there,

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?

http://nginx.org/r/include

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

I’m not aware of a pure nginx.conf way of doing that.

But it shouldn’t be too tough to use some scripting – either error_page
to a location which does something_pass to a separate server which
issues
the http redirect; or use one of the embedded scripting languages.

Good luck with it,

f

Francis D. [email protected]

Thanks to the both of you, I’ll stick to include + a cron script to
exchange include files.
Regards.
Jiff

Posted at Nginx Forum:

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;

server {

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

location / {
return 200 “normal content”;
}
}
}