Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revision Both sides next revision
litespeed_wiki:cache:common:geoip-support [2019/01/08 19:39]
Lisa Clarke [Please clarify what do you mean ''GeoIP not working'']
litespeed_wiki:cache:common:geoip-support [2019/04/17 14:52]
Lisa Clarke [Advanced Configuration:GEOIP2 Envirment Variables] Copyediting
Line 26: Line 26:
   /​usr/​share/​GeoIP/​GeoLite2-Country.mmdb   /​usr/​share/​GeoIP/​GeoLite2-Country.mmdb
   ​   ​
-=== Setup database file path === +=== Set up Database File Path and Name === 
-In LSWS WebAdmin, configure the database location. ​ Navigate to **Configuration > Server > General > General settings** and set  **[[https://​www.litespeedtech.com/​docs/​webserver/​config/​general#​geolocationDB|IP to GeoLocation DB]]** to the database path. +In LSWS WebAdmin, configure the database location ​and name(Both **DB File Path** and **DB Name** are mandatory and can not 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 > General settings** and set  **[[https://​www.litespeedtech.com/​docs/​webserver/​config/​general#​geolocationDB|IP to GeoLocation DB]]** to the database path. Then set **DB Name** to ''​COUNTRY_DB''​ or ''​CITY_DB''​. **Environment Variables** and **Notes** are optional.
  
-Alternatively, you can edit the LSWS configuration file directly: ​+{{ :​litespeed_wiki:​cache:​common:​litespeed-enable-geoip2-11.png?​800 |}} 
 + 
 +{{ :​litespeed_wiki:​cache:​common:​litespeed-enable-geoip2-22.png?​800 |}} 
 + 
 +Alternately, you can edit the LSWS configuration file directly: ​
 <​code>​ vi /​usr/​local/​lsws/​conf/​httpd_config.xml</​code> ​ <​code>​ vi /​usr/​local/​lsws/​conf/​httpd_config.xml</​code> ​
  
Line 37: Line 41:
     <​geoipDB>​     <​geoipDB>​
       <​geoipDBFile>/​usr/​share/​GeoIP/​GeoLite2-Country.mmdb</​geoipDBFile>​       <​geoipDBFile>/​usr/​share/​GeoIP/​GeoLite2-Country.mmdb</​geoipDBFile>​
 +      <​geoipDBName>​COUNTRY_DB</​geoipDBName>​
     </​geoipDB>​     </​geoipDB>​
  </​ipToGeo>​  </​ipToGeo>​
   </​code>​   </​code>​
 +
 +==== 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 [[https://​github.com/​maxmind/​mod_maxminddb|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. ​
 +  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
 +  ​
 +{{ :​litespeed_wiki:​cache:​common:​litespeed-geoip2-variables-e1.png?​800 |}}
 +
 +It will show on the ''​phpinfo.php''​ page as:
 +   ​_SERVER["​MyTest_COUNTRY_CODE"​] ​ US
 +''​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
 +{{ :​litespeed_wiki:​cache:​common:​litespeed-geoip2-variables-e2.png?​800 |}}  ​
 +It will show on the ''​phpinfo.php''​ page as:
 +  _SERVER["​MyTest2_COUNTRY_CODE"​] US
 +
 +=== 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
 +
 +{{ :​litespeed_wiki:​cache:​common:​litespeed-geoip2-variables-e4-1.png?​600 |}}
 +
 +It will show on the ''​phpinfo.php''​ page as:
 +  _SERVER["​HTTP_GEOIP_CITY"​] Montville
 +  _SERVER["​HTTP_GEOIP_POSTAL_CODE"​] 07045
 +  _SERVER["​HTTP_GEOIP_CITY_CONTINENT_CODE"​] NA
 +  _SERVER["​HTTP_GEOIP_CITY_COUNTRY_CODE"​] US
 +  _SERVER["​HTTP_GEOIP_CITY_COUNTRY_NAME"​] United States
 +  _SERVER["​HTTP_GEOIP_REGION"​] NJ
 +  _SERVER["​HTTP_GEOIP_LATITUDE"​] 40.90490
 +  _SERVER["​HTTP_GEOIP_LONGITUDE"​] -74.36460
 +
 +{{ :​litespeed_wiki:​cache:​common:​litespeed-geoip2-variables-e4-2.png?​400 |}}
  
 ==== MaxMind Legacy Database ==== ==== MaxMind Legacy Database ====
Line 164: Line 258:
 </​code>​ </​code>​
   ​   ​
-If it returns ​404, then it means the GeoIP module is actually working. ​+If it returns ​''​403 forbidden''​, then it means the GeoIP module is actually working. ​
   ​   ​
 GeoIP rewrite rules that do not work as expected may be more complicated. You will need to check the rules to look for issues such as a redirect loop. When needed, you can log a ticket with us. Let us know the rules set is not working as expected, and provide a more detailed test example for us to take a further look.  GeoIP rewrite rules that do not work as expected may be more complicated. You will need to check the rules to look for issues such as a redirect loop. When needed, you can log a ticket with us. Let us know the rules set is not working as expected, and provide a more detailed test example for us to take a further look. 
 +
 +==== Out of date database caused IP not blocked ====
 +A user setup the following at /​etc/​apache2/​conf.d/​userdata/​geoip.conf: ​
 +
 +  <​IfModule mod_geoip.c>​
 +  RewriteEngine on
 +  RewriteCond %{ENV:​GEOIP_COUNTRY_CODE} !^(GB|DK|US|IN)$
 +  RewriteRule (wp-login|xmlrpc)\.php$ - [F,L]
 +  </​IfModule>​
 +
 +Tested from an IP x.x.x.x (NG/​Nigeria/​-),​ it should be blocked but it didnot.
 +
 +Further analysis showing the above IP blongs to North Carolina, US in that downloaded MaxMind database and look like the record on that old database is incorrrect. If the database is not kept up to date, it will result in incorrect information.
 +
 +You can keep the database up to date from time to time manually by doing a direct download of the database, or you can use the [[https://​dev.maxmind.com/​geoip/​geoipupdate/​|geoipupdate -tool]], so your system automatically keeps the file up to date whenever MaxMind updates the records in the database.
  • Admin
  • Last modified: 2020/11/14 15:24
  • by Lisa Clarke