Clicky

Cómo detecto un navegador móvil en nginx

nginx server http

Redirigir con Nginx el tráfico Móvil/SmartPhone a la versión móvil del sitio Web

Si eres un nuevo usuario de nginx y te gustaría redirigir a todos los usuarios de teléfonos móviles/inteligentes desde www.example.com al subdominio m.example.com. ¿Cómo detecto un navegador móvil en nginx? ¿Cómo puedo redirigir todos los usuarios móviles al subdominio usando reglas basadas en expresiones regulares? ¿Cómo puedo redirigir automáticamente a los visitantes en los dispositivos móviles a la versión móvil a http://m.ejemplo.com/ y también permitir que los dispositivos móviles vean la página web de escritorio en www.ejemplo.com si se visita a través http://www.ejemplo.com/?desktop=true?

Se puede redirigir fácilmente a todos los usuarios de móviles con nginx como sigue:

1) m.ejemplo.com - Nombre de dominio móvil. Asegúrate que la aplicación está configurada para mostrar la misma página que se presentan en www.ejemplo.com
2) Todos los clientes de escritorio necesitan utilizar www.ejemplo.com. Sin embargo, todos los usuarios de teléfonos móviles, es decir m.ejemplo.com, pueden ver la versión de escritorio del navegador si visitan www.ejemplo.com/?desktop=true
3) Asegúrate de que la línea Disallow: / *? está añadida en el archivo /robots.txt en www.ejemplo.com
4) /robots.txt - Es una buena idea bloquear todos los robots en m.ejemplo.com. Esto asegura que los usuarios de móviles verán la página, pero todos los bots se refieren a tu sitio principal. Esta es una característica SEO. Ejemplo /robots.txt para m.ejemplo.com

User-agent: *
Disallow: /

Desde la página de robots.org:

El "User-agent: *" Significa que esta sección se aplica a todos los robots. El "Disallow: /" indica al robot para que no visite las páginas del sitio. Algunos robots pueden ignorar el archivo /robots.txt. Especialmente robots maliciosos que escanean la web en busca de vulnerabilidades de seguridad y recolectores de direcciones de correo usadas por los spammers. Sin embargo, los robots buenos como Googlebot seguirán tu archivo /robots.txt.

Ejemplo de /robots.txt para www.ejemplo.com:

User-agent: *
Disallow: /*?

configuraciones de Nginx

Edita el archivo nginx.conf y añade lo siguiente después de la directiva server :

set $mobile_rewrite do_not_perform;
 
## chi http_user_agent for mobile / smart phones ##
if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|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|phone)|xda|xiino") {
  set $mobile_rewrite perform;
}
 
if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {
  set $mobile_rewrite perform;
}
 
## redirect to m.ejemplo.com ##
if ($mobile_rewrite = perform) {
  rewrite ^ http://m.ejemplo.com$request_uri? redirect;
  break;
}

Adición de excepciones

Puedes permitir a los usuarios navegar y visualizar la versión de escritorio del sitio si la url tiene www.ejemplo.com/?desktop=true. Puedes establecer las cookies de la siguiente manera:

set $force_dt_cookie  "";
 
if ($args ~ 'desktop=true') {
  set $mobile_rewrite do_not_perform;
  set $force_dt_cookie  "desktop=true";
}
 
add_header Set-Cookie $force_dt_cookie;
 
 
if ($http_cookie ~ 'desktop=true') {
  set $mobile_rewrite do_not_perform;
}

Guarda y cierra el archivo. Reinicia o recarga el servidor nginx, escribe:

# /usr/sbin/nginx -s reload

o

# /etc/init.d/nginx reload

Pruébalo

Utiliza el siguiente comando curl para ver la redirección:

curl -I -A "UserAgentString" http://www.ejemplo.com
curl -I -A "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3" http://www.ejemplo.com
curl -I -A "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3" 'http://www.ejemplo.com/?desktop=true'

Jesus_Caceres