Japanatron Logo

I've been figuring out how to block or redirect web traffic in Nginx based on the country geoIP.

NOTES
* You need the package nginx-extras for this because this package has the geoIP Nginx plugin.
* I used Japan (JP) in these examples, so change the country code to whatever you wish.

APPROACH #1 - BASIC
This uses a locally-downloaded GeoIP database.

I. This goes in the HTTP block. It basically flags traffic from countries you specify.

# DETECT JAPAN TRAFFIC
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allow_visit {
default yes;
JP no;
}

II. This goes in the SERVER block. It sets the action you want on the country IP flag you set.

# BLOCK ACCESS FROM JAPAN
if ($allow_visit = no) {
deny all ;
}

** Alternatively, you could redirect the traffic somewhere instead of outright blocking it...

# REDIRECT JAPAN TRAFFIC
if ($allow_visit = no) {
return 301 https://www.japanatron.com/ ;
}

APPROACH #2 - ADVANCED
This approach allows you to set exceptions, like for whitelisted IP addresses.

I. This goes in the HTTP block:

# DETECT JAPAN TRAFFIC
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
JP no;
}

geo $exclusions {
default 0;
111.222.333.444/32 1;
}

II. This goes in the SERVER block:

# REDIRECT JAPAN TRAFFIC
if ($allowed_country = yes) {
set $exclusions 1;
}

if ($exclusions = "0") {
return 301 https://www.japanatron.com ;
}

APPROACH #3 - CLOUDFLARE IP COUNTRY HEADER
If you use Cloudflare's reverse proxy / CDN service, you can read the geoIP information from Cloudflare's headers. This is my favorite approach because it doesn't require locally downloading and maintaining a geoIP database.

I. This goes in the HTTP block:

# DETECT JAPAN TRAFFIC (CLOUDFLARE HEADER)
map $http_cf_ipcountry $allowed_country {
default yes;
JP no;
}

geo $exclusions {
default 0;
111.222.333.444/32 1;
}

II. This goes in the SERVER block:

# REDIRECT JAPAN TRAFFIC
if ($allowed_country = yes) {
set $exclusions 1;
}

if ($exclusions = "0") {
return 301 https://www.japanatron.com ;
}

Related Articles

Kingston USB Drive Not Working...

I upgraded to MacOS El Capitan and to my chagrin my Kingston USB drive no longer works.  I get some stupid "Unable to start DTXX application" or "ERR_COULD_NOT_...

Batocera - How To Pair 8BitDo ...

I struggled a bit with getting my new 8BitDo M30 controller to pair properly with Batocera.  Before we begin, please make sure the controller is on the latest f...

How to Disable Annoying Citrix...

PROBLEMYou install the Citrix Receiver, and you get this annoying setup window each time you start your PC.  You never really configure the client because you o...

Zimbra - Add Trusted Relay to ...

My domain name registrar offers email aliases and forwarding; however, this feature causes my mail server's SPF checks to fail because the registrar's mail rela...