Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
scratch-www
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
xpstem
scratch-www
Commits
d3b6cd03
Unverified
Commit
d3b6cd03
authored
Nov 30, 2017
by
Colby Gutierrez-Kraybill
Committed by
GitHub
Nov 30, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1708 from colbygk/session-caching
[Master] Project page caching
parents
1acb9c6a
0c109113
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
47 additions
and
88 deletions
+47
-88
bin/configure-fastly.js
bin/configure-fastly.js
+33
-12
bin/lib/fastly-config-methods.js
bin/lib/fastly-config-methods.js
+7
-42
test/unit/test_fastly_config_methods.js
test/unit/test_fastly_config_methods.js
+7
-34
No files found.
bin/configure-fastly.js
View file @
d3b6cd03
var
async
=
require
(
'
async
'
);
var
defaults
=
require
(
'
lodash.defaults
'
);
var
fastlyConfig
=
require
(
'
./lib/fastly-config-methods
'
);
const
languages
=
require
(
'
../languages.json
'
);
var
route_json
=
require
(
'
../src/routes.json
'
);
...
...
@@ -41,23 +42,43 @@ async.auto({
// on any of those route conditions.
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
var
backendCondition
=
fastlyConfig
.
setBackend
(
'
F_s3
'
,
S3_BUCKET_NAME
,
notPassStatement
);
// For a pass condition, set forwarding headers
var
forwardCondition
=
fastlyConfig
.
setForwardHeaders
(
passStatement
);
var
recvCondition
=
''
+
'
if (
'
+
notPassStatement
+
'
) {
\n
'
+
'
set req.backend = F_s3;
\n
'
+
'
set req.http.host =
\
"
'
+
S3_BUCKET_NAME
+
'
\
";
\n
'
+
'
} else {
\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
'
+
'
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
(
results
.
version
,
'
recv-condition
'
,
backendCondition
+
forward
Condition
,
recv
Condition
,
cb
);
}],
...
...
bin/lib/fastly-config-methods.js
View file @
d3b6cd03
...
...
@@ -84,45 +84,6 @@ var FastlyConfigMethods = {
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
* Time to Live (TTL) for responses that come from s3.
...
...
@@ -132,9 +93,13 @@ var FastlyConfigMethods = {
setResponseTTL
:
function
(
condition
)
{
return
''
+
'
if (
'
+
condition
+
'
) {
\n
'
+
'
set beresp.ttl = 0s;
\n
'
+
'
set beresp.grace = 0s;
\n
'
+
'
return(pass);
\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.grace = 0s;
\n
'
+
'
return(pass);
\n
'
+
'
}
\n
'
+
'
}
\n
'
;
}
};
...
...
test/unit/test_fastly_config_methods.js
View file @
d3b6cd03
...
...
@@ -59,44 +59,17 @@ tap.test('getAppRouteCondition', function (t) {
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
)
{
var
ttl
=
fastlyConfig
.
setResponseTTL
(
'
itsactuallyttyl
'
);
t
.
equal
(
ttl
,
''
+
'
if (itsactuallyttyl) {
\n
'
+
'
set beresp.ttl = 0s;
\n
'
+
'
set beresp.grace = 0s;
\n
'
+
'
return(pass);
\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.grace = 0s;
\n
'
+
'
return(pass);
\n
'
+
'
}
\n
'
+
'
}
\n
'
);
t
.
end
();
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment