Fetching latest commit…
Cannot retrieve the latest commit at this time
|Failed to load latest commit information.|
Varnish Accept-Language VCL =========================== Last updated: 22/01/2010 Cosimo Streppone <email@example.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) Configure the list of languages your site supports and the default fallback in the Makefile, *NOT* in the C code. 2) Run 'make && 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: vcl_rewrite_accept_language(); This will parse Accept-Language and insert the final language into the "X-Varnish-Accept-Language" header (req.http.X-Varnish-Accept-Language). or optionally specifying a custom header name. You need the length of the string in octal before it, and a colon (":") after. Example: vcl_rewrite_accept_language("\007X-Lang:"); 6) Restart Varnish 7) Cross your fingers 8) Profit !!