-
Notifications
You must be signed in to change notification settings - Fork 11
/
README
74 lines (48 loc) · 2.1 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Varnish Accept-Language VCL
===========================
Last updated: 03/11/2011
Cosimo Streppone <[email protected]>
Opera Software ASA
Here you will find a VCL config file for Varnish (http://varnish-cache.org)
This VCL allows you to normalize and filter all the incoming requests
Accept-Language headers and reduce them to just the languages your site supports.
*** WARNING ***
This VCL consists of C code. Your Varnish might explode. YMMV.
Don't use it in production if you don't know what you're doing.
We are using it in production, but we _don't_ know what we're doing :).
Why would you want this?
------------------------
Your site supports English and Japanese languages.
Your client browsers will send every possible Accept-Language header on Earth.
If you enable "Vary: Accept-Language" on Varnish or on your backends,
the cache hit ratio will rapidly drop, because of the huge variations
in Accept-Language contents.
With this VCL, the Accept-Language header will be "rewritten" to just
"en" or "ja", depending on your client settings. If no match occurs,
you can select a default language.
The rewritten header is "X-Varnish-Accept-Language".
You can choose to put this header back in "Accept-Language" if you wish.
In this way, the normalization will be completely transparent.
Requirements
------------
- gcc, make
- a recent perl, with `prove'
Instructions
-------------
1) Run 'make' informing the list of languages your site supports
and the default fallback in the command line, e.g.
make DEFAULT_LANGUAGE=en SUPPORTED_LANGUAGES="en ja pt pt-br"
2) Run 'make test'
You should see "All tests successful" at the end of the execution
3) Install the generated accept-language.vcl in /etc/varnish/
4) At the top of your main VCL file, add the following line:
include "/etc/varnish/accept-language.vcl";
and then in your vcl_recv() add:
C{
vcl_rewrite_accept_language(sp);
}C
This will parse Accept-Language and insert the final language into the
"X-Varnish-Accept-Language" header (req.http.X-Varnish-Accept-Language).
6) Restart Varnish
7) Cross your fingers
8) Profit !!