From 06713048656259c73c66e9e938d94c11e294a763 Mon Sep 17 00:00:00 2001 From: Chung Leong Date: Thu, 31 Jan 2019 02:39:30 +0100 Subject: [PATCH] Fixed Nginx cache config (issue #41). --- server/index.js | 13 +++++++++---- server/json-retriever.js | 8 +++++--- server/nginx-ext/default.conf | 8 +++----- server/nginx/default.conf | 8 +++----- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/server/index.js b/server/index.js index 4129124..3caa81a 100644 --- a/server/index.js +++ b/server/index.js @@ -21,6 +21,7 @@ let dnsCache = Bluebird.promisifyAll(DNSCache({ const SERVER_PORT = 80; const WORDPRESS_HOST = process.env.WORDPRESS_HOST; +const CACHE_CONTROL = 'public,s-maxage=604800'; // start up Express let app = Express(); @@ -44,6 +45,7 @@ async function handleTimestampRequest(req, res, next) { try { let now = new Date; let ts = now.toISOString(); + res.set({ 'Cache-Control': CACHE_CONTROL }); res.type('text').send(ts); } catch (err) { next(err); @@ -56,15 +58,15 @@ async function handleCacheStatusRequest(req, res, next) { res.type('html'); res.write(`Nginx Cache`); res.write(``); - res.write(``); + res.write(``); res.write(``); let entries = await NginxCache.read(); let total = 0; for (let entry of _.orderBy(entries, 'mtime', 'desc')) { - let { url, mtime, size } = entry; - let date = Moment(mtime).format('LLLL'); + let { url, md5, mtime, size } = entry; + let date = Moment(mtime).format('LLL'); let sizeKB = _.round(size / 1024, 2); - res.write(``) + res.write(``) total += size; } let totalMB = _.round(total / 1024 / 1024, 2); @@ -87,6 +89,7 @@ async function handleJSONRequest(req, res, next) { if (json.total) { res.set({ 'X-WP-Total': json.total }); } + res.set({ 'Cache-Control': CACHE_CONTROL }); res.send(json.text); } catch (err) { next(err); @@ -110,6 +113,8 @@ async function handlePageRequest(req, res, next) { // not caching content generated for SEO res.set({ 'X-Accel-Expires': 0 }); } else { + res.set({ 'Cache-Control': CACHE_CONTROL }); + // remember the URLs used by the page pageDependencies[path] = page.sourceURLs.map(addTrailingSlash); } diff --git a/server/json-retriever.js b/server/json-retriever.js index d3fc97f..4c33c39 100644 --- a/server/json-retriever.js +++ b/server/json-retriever.js @@ -12,11 +12,13 @@ async function fetch(path) { object = JSON.parse(resText); } catch (err) { // remove any error msg that got dumped into the output stream - resText = resText.replace(/^[^\{\[]+/, ''); - object = JSON.parse(resText); + if (res.status === 200) { + resText = resText.replace(/^[^\{\[]+/, ''); + object = JSON.parse(resText); + } } if (res.status >= 400) { - let msg = (object && object.message) ? object.message : 'Unknown error'; + let msg = (object && object.message) ? object.message : resText; let err = new Error(msg); err.status = res.status; throw err; diff --git a/server/nginx-ext/default.conf b/server/nginx-ext/default.conf index e6e5ebc..29d70ee 100644 --- a/server/nginx-ext/default.conf +++ b/server/nginx-ext/default.conf @@ -1,4 +1,4 @@ -proxy_cache_path /var/cache/nginx/data keys_zone=data:10m max_size=1g; +proxy_cache_path /var/cache/nginx/data keys_zone=data:10m max_size=1g inactive=7d; proxy_temp_path /var/cache/nginx/tmp; server { @@ -8,14 +8,12 @@ server { location / { proxy_pass http://node; proxy_set_header Host $http_host; - proxy_buffering on; proxy_cache data; proxy_cache_key $uri$is_args$args; proxy_cache_min_uses 1; - proxy_cache_valid 200 301 302 7d; - proxy_cache_valid 404 1m; + proxy_cache_valid 400 404 1m; proxy_hide_header Cache-Control; - proxy_ignore_headers Cache-Control Expires Set-Cookie; + proxy_ignore_headers Vary; add_header Access-Control-Allow-Origin *; add_header Access-Control-Expose-Headers X-WP-Total; diff --git a/server/nginx/default.conf b/server/nginx/default.conf index 3012f12..9b3c0d7 100644 --- a/server/nginx/default.conf +++ b/server/nginx/default.conf @@ -1,4 +1,4 @@ -proxy_cache_path /var/cache/nginx/data keys_zone=data:10m max_size=1g; +proxy_cache_path /var/cache/nginx/data keys_zone=data:10m max_size=1g inactive=7d; proxy_temp_path /var/cache/nginx/tmp; server { @@ -19,14 +19,12 @@ server { location / { proxy_pass http://node; proxy_set_header Host $http_host; - proxy_buffering on; proxy_cache data; proxy_cache_key $uri$is_args$args; proxy_cache_min_uses 1; - proxy_cache_valid 200 301 302 7d; - proxy_cache_valid 404 1m; + proxy_cache_valid 400 404 1m; proxy_hide_header Cache-Control; - proxy_ignore_headers Cache-Control Expires Set-Cookie; + proxy_ignore_headers Vary; add_header Access-Control-Allow-Origin *; add_header Access-Control-Expose-Headers X-WP-Total;
URLModified timeSize
URLMD5Modified timeSize
${url}${date}${sizeKB}KB
${url}${md5}${date}${sizeKB}KB