-
Notifications
You must be signed in to change notification settings - Fork 11
An experimental VCL extension to squash client Accept-Language headers
cosimo/varnish-accept-language
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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 !!
About
An experimental VCL extension to squash client Accept-Language headers
Resources
Stars
Watchers
Forks
Packages 0
No packages published