diff --git a/defaults/main.yml b/defaults/main.yml
index 4cae7d463525726872fad309e7a366c48dad1676..2ddaf20d125f977b4ded49a94899b066e750a4e6 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -12,6 +12,7 @@ nginx:
   vhosts: {}
   streams: {}
   maps: {}
+  caches: {}
   resolver:
     - 8.8.8.8
     - 8.8.4.4
@@ -57,6 +58,11 @@ nginx_streams_defaults:
   proxy_connect_timeout: "2s"
   proxy_next_upstream_tries: 2
 
+nginx_caches_defaults:
+  keys_zone_size: "10m"
+  cache_size: "1g"
+  inactive_time: "10m"
+
 nginx_forcessl_vhost:
   "https-redirect":
     listen:
diff --git a/tasks/main.yml b/tasks/main.yml
index 3f3dd30d2b8570303a1011bb06d0da33dcec7f8d..043be4c2ec1dbae1eb03cc203864e696ae6f3df3 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -42,6 +42,15 @@
   notify:
   - restart nginx
 
+- name: create cache directories
+  with_dict: "{{ nginx.caches }}"
+  file:
+    path: "/var/cache/nginx/{{ item.key }}"
+    state: directory
+    mode: '0755'
+    owner: www-data
+    recurse: True
+
 - name: execute ssl template
   template:
     src: ssl_files.conf.j2
@@ -58,6 +67,7 @@
     - upstreams.conf
     - proxy.conf
     - maps.conf
+    - caches.conf
   template:
     src: "{{ item }}.j2"
     dest: "/etc/nginx/conf.d/{{ item }}"
diff --git a/templates/caches.conf.j2 b/templates/caches.conf.j2
new file mode 100644
index 0000000000000000000000000000000000000000..12dee1741a63b102bc12cfbc9b8a5e9b905bdf7c
--- /dev/null
+++ b/templates/caches.conf.j2
@@ -0,0 +1,6 @@
+{% for cache in nginx.caches %}
+{% set c = {}|combine(nginx_caches_defaults, nginx.caches[cache], recursive=True) %}
+# {{ cache }}
+proxy_cache_path /var/cache/nginx/{{ cache }} levels=1:2 keys_zone={{ cache }}:{{ c.keys_zone_size }} max_size={{ c.cache_size }} inactive={{ c.inactive_time }} use_temp_path=off;
+
+{% endfor %}
\ No newline at end of file