Created
October 31, 2011 01:28
-
-
Save perusio/1326701 to your computer and use it in GitHub Desktop.
Mobile device detection in Nginx with just 7 lines of configuration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### Testing if the client is a mobile or a desktop. | |
### The selection is based on the usual UA strings for desktop browsers. | |
## Testing a user agent using a method that reverts the logic of the | |
## UA detection. Inspired by notnotmobile.appspot.com. | |
map $http_user_agent $is_desktop { | |
default 0; | |
~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule | |
~*spider|crawl|slurp|bot 1; # bots | |
~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes | |
} | |
## Revert the logic. | |
map $is_desktop $is_mobile { | |
1 0; | |
0 1; | |
} |
Here's how I use it (to redirect mobile traffic to an m.domain.com site):
set $mobile_rewrite do_not_perform;
if ($is_mobile) {
set $mobile_rewrite perform;
}
if ($mobile_rewrite = perform) {
rewrite ^ http://m.domain.com$request_uri? redirect;
break;
}
Would be awesome though if there was a way to separate mobile from tablet from desktop.
Its a pretty old post but in case someone want to detect tablet and mobile separately here is my code
map $http_user_agent $ua_device {
default 'desktop';
~*(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge\ |maemo|midp|mmp|mobile.+firefox|netfront|opera\ m(ob|in)i|palm(\ os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows\ ce|xda|xiino/i 'mobile';
~*android|ipad|playbook|silk/i 'tablet';
}
add_header x-ua-device $ua_device;
How to block requests from rest clients , I tried this but still I'm not able to block Postman requests ?
map $http_user_agent $is_browser {
~*(MSIE|Firefox|Safari|Opera) 0;
~*spider|crawl|slurp|bot 1; # bots
default 1;
}
I think you've reversed the logic, default should be 0 and in case you detect a browser (MSIE, Firefox, etc.) you want 1.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm intrested in an usage example too!