Wallogit.com
2017 © Pedro Peláez
Drop-in varnish solution to mobile user detection based on the https://github.com/serbanghita/Mobile-Detect library., (*1)
A VCL script that adds a X-UA-Device header to the request., (*2)
| Device Type | X-UA-Device |
|---|---|
| Phone | phone |
| Tablet | tablet |
| Other | desktop |
Varnish 3 is a requirement. If you venture running this with Varnish 2, there is no gurantee for support. It is also helpful to know understand the basics of the VCL language and workflow. This is not a VMOD module, so no compiling is required., (*3)
/etc/varnish/
wget https://raw2.github.com/willemk/varnish-mobiletranslate/master/mobile_detect.vclmobile_detect.vcl in your default.vcl file (See examples below)devicedetect from vcl_recv in varnish (See examples below)Using a different backend for mobile than for desktop, (*4)
include "mobile_detect.vcl";
backend mobile {
.host = "10.0.0.1";
.port = "80";
}
sub vcl_recv {
call devicedetect;
if (req.http.X-UA-Device ~ "^mobile") {
set req.backend = mobile;
}
}
The backend receives the simplified user-agent generated by the mobile_detect. The backend can then serve different content accordingly. It will then cache it by device type., (*5)
include "mobile_detect.vcl";
sub vcl_recv {
call devicedetect;
if (req.http.X-UA-Device) {
set req.http.User-Agent = req.http.X-UA-Device;
unset req.http.X-UA-Device;
}
}
sub vcl_hash {
#Default Hash
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
#Also hash based on device type
if (req.http.X-UA-Device) {
hash_data(req.http.X-UA-Device);
}
return (hash);
}
If your backend generates the different content for the same URL based on device type, it should be cached accoding to that device type., (*6)
include "mobile_detect.vcl";
sub vcl_recv {
call devicedetect;
}
sub vcl_hash {
#Default Hash
hash_data(req.url);
if (req.http.host) {
hash_data(req.http.host);
} else {
hash_data(server.ip);
}
#Also hash based on device type
if (req.http.X-UA-Device) {
hash_data(req.http.X-UA-Device);
}
return (hash);
}
If you have any bug reports, feature request or want to submit a pull request, please use the appropriate github tools., (*7)
Thanks to these projects for help and inspiration, (*8)
https://github.com/serbanghita/Mobile-Detect, (*9)
https://github.com/varnish/varnish-devicedetect, (*10)
You can update the mobile detection rules using latest from serbanghita/Mobile-Detect, by executing php varnishtranslate.php. Then push the mobile_detect.vcl to the repo., (*11)