How to enable GeoIP on ADC?

There are two location database settings in LiteSpeed Web ADC's WebAdmin Console. The MaxMind legacy database and the MaxMind GeoIP2 database both use the IP to GeoLocation DB setting. The IP2Location DB setting is meant for the IP2Location database. This guide will show you hot to set up both types of Geolocation database, but you will not need to use both. You can only use one location database at a time, so choose your favorite and stick with that one.

Setting up and enabling GeoIP on LiteSpeed ADC involves choosing a database, downloading and installing the database to a directory, setting up the database path in ADC Admin, enabling geolocation lookup, setting rewrite rules, and finally, running some tests.

Set Enable GeoLocation Lookup to Yes. This must be set, if you want Geolocation to work on Web ADC.

Choose your favorite database: MaxMind GeoIP2, MaxMind Legacy Database, or IP2location database. Then, set up the correct database path in the appropriate section in the ADC WebAdmin Console, as described.

MaxMind GeoIP2 Database

Download and Install

Let's assume that you will store the DB in /usr/share/GeoIP/.

Download the free database from https://dev.maxmind.com/geoip/geoip2/geolite2/, like so:

 wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
  tar -zxvf GeoLite2-Country.tar.gz

Then, move the file GeoLite2-Country.mmdb to /usr/share/GeoIP/GeoLite2-Country.mmdb.

Set up Database File Path and Name

In ADC WebAdmin, configure the database location and name. (Both DB File Path and DB Name are mandatory and cannot be empty.)

Your choice of DB name is important: you must use COUNTRY_DB for a country database, and CITY_DB for a city database. Navigate to Configuration > Server > General, and set MaxMind GeoIP DB to the database path. Then set DB Name to COUNTRY_DB or CITY_DB.

Environment Variables and Notes are optional.

Advanced Configuration: GeoIP2 Environment Variables

The full power of GeoIP2 requires the use of environment variables in the LiteSpeed configuration. The format used is designed to be as similar as possible to the Apache mod_maxminddb environment described here, specifically for the MaxMindDBEnv variable. Each environment variable is specified in the environment text box as one line:

  • The name of the environment variable that will be exported, for example GEOIP_COUNTRY_NAME
  • A space
  • The logical name of the environment variable, which consists of:
    • The name of the database as specified in the DB Name field as the prefix. For example, COUNTRY_DB
    • A forward slash /
    • The name of the field as displayed in mmdblookup. For example: country/names/en

Thus the default generates:

GEOIP_COUNTRY_NAME COUNTRY_DB/country/names/en

If you wanted the country code to be displayed in Spanish, you would enter the environment variable:

GEOIP_COUNTRY_NAME COUNTRY_DB/country/names/es

Note that if a variable is used by multiple databases (for example, the default GEOIP_COUNTRY_NAME), you need to override the value in the last database specified (or all databases in case they get reordered, just to be safe).

Note that subdivisions is an array and must be referenced by index (usually 0 or 1).

The default environment variables vary by database and are designed to be as similar to the legacy GeoIP environment variables as possible.

Our default list is:

"GEOIP_COUNTRY_CODE", "/country/iso_code" 
"GEOIP_CONTINENT_CODE", "/continent/code" 
"GEOIP_REGION", "/subdivisions/0/iso_code"
"GEOIP_METRO_CODE", "/location/metro_code"
"GEOIP_LATITUDE", "/location/latitude"
"GEOIP_LONGITUDE", "/location/longitude"
"GEOIP_POSTAL_CODE", "/postal/code"
"GEOIP_CITY", "/city/names/en"

You can customize the configuration to add the environment variables you want as describe above.

Example 1

Make sure the entry name is correct.

You can add the following:

GEOIP_REGION_NAME CITY_DB/subdivisions/0/names/en

Please make sure the correct entry name is used. For example, the following is incorrect: name should be names.

GEOIP_REGION_NAME CITY_DB/subdivisions/0/name/en

Example 2

You can customize a name as MyTest_COUNTRY_CODE, like so:

MyTest_COUNTRY_CODE CITY_DB/country/iso_code

US will be replaced by the country code you are visiting from, such as SG or others.

Example 3

You can customize a name as MyTest2_COUNTRY_CODE by using a defined COUNTRY DB name COUNTRY_DB_20190402 with a country database.

MyTest2_COUNTRY_CODE COUNTRY_DB_20190402/country/iso_code

Example 4

You can customize all of the following:

HTTP_GEOIP_CITY CITY_DB/city/names/en
HTTP_GEOIP_POSTAL_CODE CITY_DB/postal/code
HTTP_GEOIP_CITY_CONTINENT_CODE CITY_DB/continent/code
HTTP_GEOIP_CITY_COUNTRY_CODE CITY_DB/country/iso_code
HTTP_GEOIP_CITY_COUNTRY_NAME CITY_DB/country/names/en
HTTP_GEOIP_REGION CITY_DB/subdivisions/0/iso_code
HTTP_GEOIP_LATITUDE CITY_DB/location/latitude
HTTP_GEOIP_LONGITUDE CITY_DB/location/longitude

Set up Database File Path

In ADC WebAdmin, configure the database location: Navigate to Configuration > Server > General , and set MaxMind GeoIP DB to the database path.

IP2Location Database

You can download the IP2Location Database from the IP2Location website and configure the IP2Location DB File Path in the IP2Location DB section.

This example test case redirects all US IPs to the /en/ site. In the Rewrite tab under example.com ADC virtual host, Rewrite Control, set Enable Rewrite to Yes.

Then added the following to Rewrite Rules:

RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^US$
RewriteRule ^.*$ https://example.com/en [R,L]

Visiting example.com through a US IP should redirect to https://example.com/en successfully.

  • Admin
  • Last modified: 2019/08/28 19:53
  • by Lisa Clarke