mirror of
https://github.com/scratchfoundation/scratch-www.git
synced 2024-11-26 09:08:07 -05:00
Merge pull request #1708 from colbygk/session-caching
[Master] Project page caching
This commit is contained in:
parent
4ab0b73d89
commit
91b3feb0b1
3 changed files with 47 additions and 88 deletions
|
@ -1,6 +1,7 @@
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
var defaults = require('lodash.defaults');
|
var defaults = require('lodash.defaults');
|
||||||
var fastlyConfig = require('./lib/fastly-config-methods');
|
var fastlyConfig = require('./lib/fastly-config-methods');
|
||||||
|
const languages = require('../languages.json');
|
||||||
|
|
||||||
var route_json = require('../src/routes.json');
|
var route_json = require('../src/routes.json');
|
||||||
|
|
||||||
|
@ -41,23 +42,43 @@ async.auto({
|
||||||
// on any of those route conditions.
|
// on any of those route conditions.
|
||||||
var notPassStatement = fastlyConfig.getAppRouteCondition('../build/*', routes, extraAppRoutes, __dirname);
|
var notPassStatement = fastlyConfig.getAppRouteCondition('../build/*', routes, extraAppRoutes, __dirname);
|
||||||
|
|
||||||
// For all the routes in routes.json, construct a varnish-style regex that matches
|
|
||||||
// only if NONE of those routes are matched.
|
|
||||||
var passStatement = fastlyConfig.negateConditionStatement(notPassStatement);
|
|
||||||
|
|
||||||
// For a non-pass condition, point backend at s3
|
// For a non-pass condition, point backend at s3
|
||||||
var backendCondition = fastlyConfig.setBackend(
|
var recvCondition = '' +
|
||||||
'F_s3',
|
'if (' + notPassStatement + ') {\n' +
|
||||||
S3_BUCKET_NAME,
|
' set req.backend = F_s3;\n' +
|
||||||
notPassStatement
|
' set req.http.host = \"' + S3_BUCKET_NAME + '\";\n' +
|
||||||
);
|
'} else {\n' +
|
||||||
// For a pass condition, set forwarding headers
|
' if (!req.http.Fastly-FF) {\n' +
|
||||||
var forwardCondition = fastlyConfig.setForwardHeaders(passStatement);
|
' if (req.http.X-Forwarded-For) {\n' +
|
||||||
|
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For \", \" client.ip;\n' +
|
||||||
|
' } else {\n' +
|
||||||
|
' set req.http.Fastly-Temp-XFF = client.ip;\n' +
|
||||||
|
' }\n' +
|
||||||
|
' } else {\n' +
|
||||||
|
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' +
|
||||||
|
' }\n' +
|
||||||
|
' set req.grace = 60s;\n' +
|
||||||
|
' if (req.http.Cookie:scratchlanguage) {\n' +
|
||||||
|
' set req.http.Accept-Language = req.http.Cookie:scratchlanguage;\n' +
|
||||||
|
' } else {\n' +
|
||||||
|
' set req.http.Accept-Language = accept.language_lookup("' +
|
||||||
|
Object.keys(languages).join(':') + '", ' +
|
||||||
|
'"en", ' +
|
||||||
|
'std.tolower(req.http.Accept-Language)' +
|
||||||
|
');\n' +
|
||||||
|
' }\n' +
|
||||||
|
' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' +
|
||||||
|
' set req.http.Cookie = req.http.Cookie:scratchlanguage;\n' +
|
||||||
|
' } else {\n' +
|
||||||
|
' return(pass);\n' +
|
||||||
|
' }\n' +
|
||||||
|
'}\n';
|
||||||
|
|
||||||
|
|
||||||
fastly.setCustomVCL(
|
fastly.setCustomVCL(
|
||||||
results.version,
|
results.version,
|
||||||
'recv-condition',
|
'recv-condition',
|
||||||
backendCondition + forwardCondition,
|
recvCondition,
|
||||||
cb
|
cb
|
||||||
);
|
);
|
||||||
}],
|
}],
|
||||||
|
|
|
@ -84,45 +84,6 @@ var FastlyConfigMethods = {
|
||||||
return 'redirects/' + route.pattern;
|
return 'redirects/' + route.pattern;
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns custom vcl configuration as a string for setting the backend
|
|
||||||
* of a request to the given backend/host.
|
|
||||||
*
|
|
||||||
* @param {string} backend name of the backend declared in fastly
|
|
||||||
* @param {string} host name of the s3 bucket to be set as the host
|
|
||||||
* @param {string} condition condition under which backend should be set
|
|
||||||
*/
|
|
||||||
setBackend: function (backend, host, condition) {
|
|
||||||
return '' +
|
|
||||||
'if (' + condition + ') {\n' +
|
|
||||||
' set req.backend = ' + backend + ';\n' +
|
|
||||||
' set req.http.host = \"' + host + '\";\n' +
|
|
||||||
'}\n';
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns custom vcl configuration as a string for headers that
|
|
||||||
* should be added for the condition in which a request is forwarded.
|
|
||||||
*
|
|
||||||
* @param {string} condition condition under which to set pass headers
|
|
||||||
*/
|
|
||||||
setForwardHeaders: function (condition) {
|
|
||||||
return '' +
|
|
||||||
'if (' + condition + ') {\n' +
|
|
||||||
' if (!req.http.Fastly-FF) {\n' +
|
|
||||||
' if (req.http.X-Forwarded-For) {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For \", \" client.ip;\n' +
|
|
||||||
' } else {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = client.ip;\n' +
|
|
||||||
' }\n' +
|
|
||||||
' } else {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' +
|
|
||||||
' }\n' +
|
|
||||||
' set req.grace = 60s;\n' +
|
|
||||||
' return(pass);\n' +
|
|
||||||
'}\n';
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns custom vcl configuration as a string that sets the varnish
|
* Returns custom vcl configuration as a string that sets the varnish
|
||||||
* Time to Live (TTL) for responses that come from s3.
|
* Time to Live (TTL) for responses that come from s3.
|
||||||
|
@ -132,9 +93,13 @@ var FastlyConfigMethods = {
|
||||||
setResponseTTL: function (condition) {
|
setResponseTTL: function (condition) {
|
||||||
return '' +
|
return '' +
|
||||||
'if (' + condition + ') {\n' +
|
'if (' + condition + ') {\n' +
|
||||||
|
' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' +
|
||||||
|
' set beresp.http.Vary = "Accept-Encoding, Accept-Language";\n' +
|
||||||
|
' } else {\n' +
|
||||||
' set beresp.ttl = 0s;\n' +
|
' set beresp.ttl = 0s;\n' +
|
||||||
' set beresp.grace = 0s;\n' +
|
' set beresp.grace = 0s;\n' +
|
||||||
' return(pass);\n' +
|
' return(pass);\n' +
|
||||||
|
' }\n' +
|
||||||
'}\n';
|
'}\n';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -59,44 +59,17 @@ tap.test('getAppRouteCondition', function (t) {
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
|
||||||
tap.test('testSetBackend', function (t) {
|
|
||||||
var backend = fastlyConfig.setBackend('wemust', 'goback', 'marty');
|
|
||||||
t.equal(backend, '' +
|
|
||||||
'if (marty) {\n' +
|
|
||||||
' set req.backend = wemust;\n' +
|
|
||||||
' set req.http.host = \"goback\";\n' +
|
|
||||||
'}\n'
|
|
||||||
);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
tap.test('testSetForward', function (t) {
|
|
||||||
var forward = fastlyConfig.setForwardHeaders('alwaysforward');
|
|
||||||
t.equal(forward, '' +
|
|
||||||
'if (alwaysforward) {\n' +
|
|
||||||
' if (!req.http.Fastly-FF) {\n' +
|
|
||||||
' if (req.http.X-Forwarded-For) {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For ", " client.ip;\n' +
|
|
||||||
' } else {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = client.ip;\n' +
|
|
||||||
' }\n' +
|
|
||||||
' } else {\n' +
|
|
||||||
' set req.http.Fastly-Temp-XFF = req.http.X-Forwarded-For;\n' +
|
|
||||||
' }\n' +
|
|
||||||
' set req.grace = 60s;\n' +
|
|
||||||
' return(pass);\n' +
|
|
||||||
'}\n'
|
|
||||||
);
|
|
||||||
t.end();
|
|
||||||
});
|
|
||||||
|
|
||||||
tap.test('testSetTTL', function (t) {
|
tap.test('testSetTTL', function (t) {
|
||||||
var ttl = fastlyConfig.setResponseTTL('itsactuallyttyl');
|
var ttl = fastlyConfig.setResponseTTL('itsactuallyttyl');
|
||||||
t.equal(ttl, '' +
|
t.equal(ttl, '' +
|
||||||
'if (itsactuallyttyl) {\n' +
|
'if (itsactuallyttyl) {\n' +
|
||||||
|
' if (req.url ~ "^/projects/" && !req.http.Cookie:scratchsessionid) {\n' +
|
||||||
|
' set beresp.http.Vary = "Accept-Encoding, Accept-Language";\n' +
|
||||||
|
' } else {\n' +
|
||||||
' set beresp.ttl = 0s;\n' +
|
' set beresp.ttl = 0s;\n' +
|
||||||
' set beresp.grace = 0s;\n' +
|
' set beresp.grace = 0s;\n' +
|
||||||
' return(pass);\n' +
|
' return(pass);\n' +
|
||||||
|
' }\n' +
|
||||||
'}\n'
|
'}\n'
|
||||||
);
|
);
|
||||||
t.end();
|
t.end();
|
||||||
|
|
Loading…
Reference in a new issue