Sep 162010

First grab this perl script which you will use to convert Maxmind’s geo IP database into a format usable by Nginx.

make it executable

$ chmod 755

Then download Maxmind’s latest GeoLite country database in CSV format.

Unzip it, and run perl script

$ unzip
$ ./ < GeoIPCountryWhois.csv > nginxGeo.txt

Copy nginxGeo.txt into your nginx config directory.

Then add the following text in the ‘http’ section of your nginx.conf file:

geo $country {
	default no;
	include nginxGeo.txt;

Then add the following in the ’server’ section of your nginx.conf file:

if ($country ~ ^(?:US|CA|ES)$ ){
	set $limit_rate 10k;
if ($country ~ ^(?:BR|ZA)$ ){
	set $limit_rate 20k;

This limits anyone from the USA, Canada and Spain to a maximum of 10 kilobits per second of bandwidth. It gives anyone from Brazil and South Africa 20 Kbps of bandwidth. Every other country gets the maximum.