diff --git a/telize/Dockerfile b/telize/Dockerfile index da420e0..db5c27f 100644 --- a/telize/Dockerfile +++ b/telize/Dockerfile @@ -19,7 +19,7 @@ COPY telize.conf /etc/nginx/conf.d/telize.conf EXPOSE 80 443 -ENV TELIZE_VERSION 1.07 +ENV TELIZE_VERSION master RUN buildDeps=' \ curl \ @@ -29,9 +29,9 @@ RUN buildDeps=' \ && apt-get update && apt-get install -y $buildDeps --no-install-recommends \ && rm -rf /var/lib/apt/lists/* \ && mkdir -p /usr/share/GeoIP \ - && curl -sSL https://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz -o /usr/share/GeoIP/GeoIP.dat.gz \ - && curl -sSL http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz -o /usr/share/GeoIP/GeoLiteCity.dat.gz \ - && curl -sSL http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz -o /usr/share/GeoIP/GeoIPASNum.dat.gz \ + && curl -sSL https://geolite.maxmind.com/download/geoip/database/GeoIPv6.dat.gz -o /usr/share/GeoIP/GeoIPv6.dat.gz \ + && curl -sSL http://geolite.maxmind.com/download/geoip/database/GeoLiteCityv6-beta/GeoLiteCityv6.dat.gz -o /usr/share/GeoIP/GeoLiteCityv6.dat.gz \ + && curl -sSL http://download.maxmind.com/download/geoip/database/asnum/GeoIPASNumv6.dat.gz -o /usr/share/GeoIP/GeoIPASNumv6.dat.gz \ && gunzip /usr/share/GeoIP/*gz \ && git clone --depth 1 --branch "${TELIZE_VERSION}" https://github.com/fcambus/telize.git /usr/src/telize \ && ( \ diff --git a/telize/nginx.conf b/telize/nginx.conf index e21ce16..1c502cb 100644 --- a/telize/nginx.conf +++ b/telize/nginx.conf @@ -96,15 +96,15 @@ http { # GeoIP ## - map_hash_bucket_size 128; - map_hash_max_size 4096; + map_hash_bucket_size 64; + map_hash_max_size 8192; include /etc/nginx/timezone.conf; include /etc/nginx/timezone-offset.conf; - geoip_country /usr/share/GeoIP/GeoIP.dat; - geoip_city /usr/share/GeoIP/GeoLiteCity.dat; - geoip_org /usr/share/GeoIP/GeoIPASNum.dat; + geoip_country /usr/share/GeoIP/GeoIPv6.dat; + geoip_city /usr/share/GeoIP/GeoLiteCityv6.dat; + geoip_org /usr/share/GeoIP/GeoIPASNumv6.dat; # Virtual hosts include /etc/nginx/conf.d/telize.conf; diff --git a/telize/telize.conf b/telize/telize.conf index fca7e74..ad94a53 100644 --- a/telize/telize.conf +++ b/telize/telize.conf @@ -1,13 +1,13 @@ ############################################################################### # # -# Telize 1.05 # -# Copyright (c) 2013-2016, Frederic Cambus # -# http://www.telize.com # +# Telize 1.07 # +# Copyright (c) 2013-2017, Frederic Cambus # +# https://www.telize.com # # # # Created: 2013-08-15 # -# Last Updated: 2016-01-05 # +# Last Updated: 2017-02-07 # # # -# Telize is released under the BSD 3-Clause license. # +# Telize is released under the BSD 2-Clause license. # # See LICENSE file for details. # # # ############################################################################### @@ -28,38 +28,36 @@ server { keepalive_timeout 0; gzip off; - ## Deny illegal Host headers - if ($http_referer ~* ^(rwandair.com|m.rwandair.com|stage-rwandair.mobiashara.com)$ ) { - return 444; - } - location ~ /ip$ { add_header Cache-Control no-cache; charset off; default_type text/plain; - echo $remote_addr; + content_by_lua_block { + ngx.say(ngx.var.remote_addr) + } } location ~ /jsonip$ { charset utf-8; default_type application/json; - content_by_lua ' - local cjson = require("cjson") + content_by_lua_block { + local cjson = require("cjson") - local json = cjson.encode({ - ip = ngx.var.remote_addr - }) + local json = cjson.encode({ + ip = ngx.var.remote_addr + }) - local callback = ngx.var.arg_callback + local callback = ngx.var.arg_callback - if callback then - ngx.say(callback, "(", json, ");") - else - ngx.say(json) - end'; + if callback then + ngx.say(callback, "(", json, ");") + else + ngx.say(json) + end + } } location ~ /geoip/?(?.*) { @@ -67,7 +65,8 @@ server { set $ip $remote_addr; } - # Uncomment when using Telize behind a load balancer, and comment the directive setting X-Real-IP + # Uncomment when using Telize behind a load balancer, and + # comment the directive setting X-Real-IP # proxy_set_header X-Forwarded-For $ip; proxy_set_header X-Real-IP $ip; @@ -87,77 +86,79 @@ server { add_header Access-Control-Allow-Origin $cors_origin; } - more_set_headers "Cache-Control: no-cache"; + content_by_lua_block { + local cjson = require("cjson") + local iconv = require("iconv") + local cd = iconv.new("utf-8","iso-8859-15") - content_by_lua ' - local cjson = require("cjson") - local iconv = require("iconv") - local cd = iconv.new("utf-8","iso-8859-15") + ngx.header["Cache-Control"] = "no-cache"; - -- Check for invalid IP addresses - if ngx.var.remote_addr == "127.0.0.1" then - ngx.status = ngx.HTTP_BAD_REQUEST - ngx.say(cjson.encode({code = 401, message = "Input string is not a valid IP address"})) - ngx.exit(ngx.HTTP_OK) - end - - local payload = { - ip = ngx.var.remote_addr, - country_code = ngx.var.geoip_city_country_code, - country_code3 = ngx.var.geoip_city_country_code3, - country = ngx.var.geoip_city_country_name, - region = ngx.var.geoip_region_name, - region_code = ngx.var.geoip_region, - city = ngx.var.geoip_city, - postal_code = ngx.var.geoip_postal_code, - continent_code = ngx.var.geoip_city_continent_code, - latitude = ngx.var.geoip_latitude, - longitude = ngx.var.geoip_longitude, - dma_code = ngx.var.geoip_dma_code, - area_code = ngx.var.geoip_area_code, - organization = ngx.var.geoip_org, - timezone = ngx.var.geoip_timezone, - offset = ngx.var.geoip_timezone_offset, - } - - local callback = ngx.var.arg_callback - - -- Validate payload - for item, value in pairs(payload) do - if payload[item] == "" then - payload[item] = nil + -- Check for invalid IP addresses + if ngx.var.remote_addr == "127.0.0.1" then + ngx.status = ngx.HTTP_BAD_REQUEST + ngx.say(cjson.encode({ + code = 401, + message = "Input string is not a valid IP address" + })) + ngx.exit(ngx.HTTP_OK) end - end - -- Convert latitude and longitude to numeric values - if payload.latitude ~= nil and payload.longitude ~= nil then - payload.latitude = tonumber(payload.latitude) - payload.longitude = tonumber(payload.longitude) - end + local payload = { + ip = ngx.var.remote_addr, + country_code = ngx.var.geoip_city_country_code, + country_code3 = ngx.var.geoip_city_country_code3, + country = ngx.var.geoip_city_country_name, + region = ngx.var.geoip_region_name, + region_code = ngx.var.geoip_region, + city = ngx.var.geoip_city, + postal_code = ngx.var.geoip_postal_code, + continent_code = ngx.var.geoip_city_continent_code, + latitude = ngx.var.geoip_latitude, + longitude = ngx.var.geoip_longitude, + dma_code = ngx.var.geoip_dma_code, + area_code = ngx.var.geoip_area_code, + organization = ngx.var.geoip_org, + timezone = ngx.var.geoip_timezone, + offset = ngx.var.geoip_timezone_offset, + } - -- Convert city name to UTF-8 if it exists - if payload.city ~= nil then - payload.city = cd:iconv(payload.city) - end + local callback = ngx.var.arg_callback - -- Convert region name to UTF-8 if it exists - if payload.region ~= nil then - payload.region = cd:iconv(payload.region) - end + -- Validate payload + for item, value in pairs(payload) do + if payload[item] == "" then + payload[item] = nil + end + end - -- Convert organization name to UTF-8 if it exists - if payload.organization ~= nil then - payload.organization = cd:iconv(payload.organization) - end + -- Convert latitude and longitude to numeric values + if payload.latitude ~= nil and payload.longitude ~= nil then + payload.latitude = tonumber(payload.latitude) + payload.longitude = tonumber(payload.longitude) + end - local json = cjson.encode(payload) + -- Convert city name to UTF-8 if it exists + if payload.city ~= nil then + payload.city = cd:iconv(payload.city) + end - if callback ~= "" then - ngx.say(callback, "(", json, ");") - else - ngx.say(json) - end'; + -- Convert region name to UTF-8 if it exists + if payload.region ~= nil then + payload.region = cd:iconv(payload.region) + end + + -- Convert organization name to UTF-8 if it exists + if payload.organization ~= nil then + payload.organization = cd:iconv(payload.organization) + end + + local json = cjson.encode(payload) + + if callback ~= "" then + ngx.say(callback, "(", json, ");") + else + ngx.say(json) + end + } } } - -# vi: ft=nginx