[![Build Status](https://travis-ci.org/kodnaplakal/caddy-geoip.svg?branch=master)](https://travis-ci.org/kodnaplakal/caddy-geoip) ## Overview `geoip` is a Caddy plugin that allow to determine user Geolocation by IP address using a [MaxMind database](https://www.maxmind.com/en/geoip2-services-and-databases). ## Placeholders The following placeholders are available: ``` geoip_country_code - Country ISO code, example CY for Cyprus geoip_country_geoname_id - GeoNameID of the city, example 146669 geoip_latitude - Latitude, example 34.684100 geoip_longitude - Longitude, example 33.037900 geoip_time_zone - Time zone, example Asia/Nicosia geoip_country_eu - Return 'true' if country in Europen Union geoip_country_name - Full country name geoip_city_name - City name geoip_city_geoname_id - GeoNameID of the city, example 146384 geoip_geohash - Geohash of latitude and longitude ``` ## Missing geolocation data If there is no geolocation data for an IP address most of the placeholders listed above will be empty. The exceptions are `geoip_country_code`, `geoip_country_name`, and `geoip_city_name`. If the request originated over the system loopback interface (e.g., 127.0.0.1) those vars will be set to `**`, `Loopback`, and `Loopback` respectively. For any other address, including private addresses such as 192.168.0.1, the values will be `!!`, `No Country`, and `No City` respectively. ## Examples (1) Set database path and return country code header: ``` geoip /path/to/db/GeoLite2-City.mmdb header Country-Code {geoip_country_code} ``` (2) Proxy pass headers to backend: ``` localhost geoip /path/to/db/GeoLite2-City.mmdb proxy / localhost:3000 { header_upstream Country-Name {geoip_country_name} header_upstream Country-Code {geoip_country_code} header_upstream Country-Eu {geoip_country_eu} header_upstream City-Name {geoip_city_name} header_upstream Latitude {geoip_latitude} header_upstream Longitude {geoip_longitude} header_upstream Time-Zone {geoip_time_zone} header_upstream Geohash {geoip_geohash} } ``` (3) Include the geolocation info in the access log: ``` log / {$HOME}/log/access.log "{when_iso} {status} {method} {latency_ms} ms {size} bytes {geoip_country_code} {remote} {host} {proto} \"{uri}\" \"{>User-Agent}\"" ``` ## Contributing 1. [Fork it](https://github.com/kodnaplakal/caddy-geoip/fork) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new [Pull Request](https://github.com/kodnaplakal/caddy-geoip/pulls) ## Contributors - [kodnaplakal](https://github.com/kodnaplakal) Andrey Blinov - creator, maintainer