I wanted to build an openstreetmap tile cache server to lower the impact of my application in openstreetmap servers. A motivation for this is a moral one and also the limits they have to request their resources.
I have an nginx server with the following configuration in nginx.conf
proxy_cache_path /tmp/cache levels=1:2 keys_zone=openstreetmap-backend-cache:8$
proxy_temp_path /tmp/cache/tmp;
upstream openstreetmap_backend {
server a.tile.openstreetmap.org;
server b.tile.openstreetmap.org;
server c.tile.openstreetmap.org;
}
Note that the directory /tmp/cache
must exist and be writable by the nginx process user, usually www-data
And the following configuration in the server block
location /osm_proxy/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X_FORWARDED_PROTO http;
proxy_set_header Host $http_host;
proxy_set_header Host "tile.openstreetmap.org";
proxy_set_header User-Agent "my-proxy.example.com/0.01";
proxy_cache openstreetmap-backend-cache;
proxy_cache_valid 200 302 365d;
proxy_cache_valid 404 1m;
proxy_redirect off;
if (!-f $request_filename) {
rewrite ^/osm_proxy(/.*)$ $1 break;
proxy_pass http://openstreetmap_backend;
break;
}
}
To use this server from leaflet, I configure leaflet tile layer like this
L.tileLayer('https://my.tile-cache-server.com/osm_proxy/{z}/{x}/{y}.png')