diff --git a/data/conf/nginx/includes/site-defaults.conf b/data/conf/nginx/includes/site-defaults.conf
index 53778020..3de4c1a2 100644
--- a/data/conf/nginx/includes/site-defaults.conf
+++ b/data/conf/nginx/includes/site-defaults.conf
@@ -32,7 +32,7 @@
   gzip_buffers 16 8k;
   gzip_http_version 1.1;
   gzip_min_length 256;
-  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
+  gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
 
   location ~ ^/(fonts|js|css|img)/ {
     expires max;
@@ -205,3 +205,7 @@
   location @awaitingupstream {
     rewrite ^(.*)$ /_status.502.html break;
   }
+
+  location ~ ^/cache/(.*)$ {
+      try_files $uri $uri/ /resource.php?file=$1;
+  }
diff --git a/data/web/inc/footer.inc.php b/data/web/inc/footer.inc.php
index 1d9f5c44..9fec2b69 100644
--- a/data/web/inc/footer.inc.php
+++ b/data/web/inc/footer.inc.php
@@ -3,15 +3,16 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/modals/footer.php';
 logger();
 ?>
 <div style="margin-bottom: 100px;"></div>
-<script type='text/javascript'><?php
-    $JSPath = '/tmp/' . $js_minifier->getDataHash() . '.js';
-    if(file_exists($JSPath)) {
-        echo file_get_contents($JSPath);
-    } else {
-        echo $js_minifier->minify($JSPath);
-        cleanupJS($js_minifier->getDataHash());
-    }
-    ?></script>
+
+<?php
+$hash = $js_minifier->getDataHash();
+$JSPath = '/tmp/' . $hash . '.js';
+if(!file_exists($JSPath)) {
+  $js_minifier->minify($JSPath);
+  cleanupJS($hash);
+}
+?>
+<script src="/cache/<?=basename($JSPath)?>"></script>
 <script>
 <?php
 $lang_footer = json_encode($lang['footer']);
diff --git a/data/web/inc/header.inc.php b/data/web/inc/header.inc.php
index 1663413f..348ed372 100644
--- a/data/web/inc/header.inc.php
+++ b/data/web/inc/header.inc.php
@@ -29,16 +29,15 @@
     if ($_SERVER['REQUEST_URI'] == '/') {
       $css_minifier->add('/web/css/site/index.css');
     }
+
+  $hash = $css_minifier->getDataHash();
+  $CSSPath = '/tmp/' . $hash . '.css';
+  if(!file_exists($CSSPath)) {
+    $css_minifier->minify($CSSPath);
+    cleanupCSS($hash);
+  }
   ?>
-  <style><?php
-      $CSSPath = '/tmp/' . $css_minifier->getDataHash() . '.css';
-      if(file_exists($CSSPath)) {
-          echo file_get_contents($CSSPath);
-      } else {
-          echo $css_minifier->minify($CSSPath);
-          cleanupCSS($css_minifier->getDataHash());
-      }
-      ?></style>
+  <link rel="stylesheet" href="/cache/<?=basename($CSSPath)?>">
   <?php if (strtolower(trim($DEFAULT_THEME)) != "lumen"): ?>
   <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.7/<?= strtolower(trim($DEFAULT_THEME)); ?>/bootstrap.min.css">
   <?php endif; ?>
diff --git a/data/web/resource.php b/data/web/resource.php
new file mode 100644
index 00000000..96d41c1a
--- /dev/null
+++ b/data/web/resource.php
@@ -0,0 +1,28 @@
+<?php
+
+$pathinfo = pathinfo($_GET['file']);
+$extension = strtolower($pathinfo['extension']);
+
+$filepath = '/tmp/' . $pathinfo['basename'];
+$content = '';
+
+if (file_exists($filepath)) {
+    $secondsToCache = 31536000;
+    $expires = gmdate('D, d M Y H:i:s', time() + $secondsToCache) . ' GMT';
+
+    if ($extension === 'js') {
+        header('Content-Type: application/javascript');
+    } elseif ($extension === 'css') {
+        header('Content-Type: text/css');
+    } else {
+        //currently just css and js should be supported!
+        exit();
+    }
+
+    header("Expires: $expires");
+    header('Pragma: cache');
+    header('Cache-Control: max-age=' . $secondsToCache);
+    $content = file_get_contents($filepath);
+}
+
+echo $content;