Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign up
An experimental VCL extension to squash client Accept-Language headers
http://www.streppone.it/cosimo/blog/2…
Perl
C
VCL

Cannot retrieve the latest commit at this time.
Type | Name | Latest commit message | Commit time |
---|---|---|---|
Failed to load latest commit information. | |||
![]() |
examples | ||
![]() |
t | ||
![]() |
.gitignore | ||
![]() |
Makefile | ||
![]() |
README | ||
![]() |
accept-language.c | ||
![]() |
gen_vcl.pl |
README
Varnish Accept-Language VCL =========================== Last updated: 03/11/2011 Cosimo Streppone <cosimo@opera.com> 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 !!