Forzar las WWW con NGINX

Para forzar que nuestro dominio cargue directamente con las www y evitar algunos errores de «este dominio no esta redirigiendo correctamente» en el caso de wordpress y otros cms en los que en la configuración ponemos que cargue con www pero que aún así a veces deja acceder sin las www, en nginx basta con una redirección:

Con este código lo solucionamos:

Redirigir a WWW con NGINX

server {
    listen       80;
    server_name  skamasle.com;
    return       301 http://www.skamasle.com$request_uri;
}

Pero es importante tener dos directivas server, un ejemplo, una directiva normal puede ser:

server {
        listen *:80;
        server_name skamasle.com www.skamasle.com;
        root   /var/www/web;
        index index.html index.htm....................... etc
}

O sea en server_name definidos los dos dominios, así que tenemos que separar a una directiva aparte, skamasle.com en una sección server para hacer la redirección y www.skamasle.com en la directiva server principal si no, no funciona.

NOTA para versiones viejas de nginx se usaba rewrite:

server {
    server_name  skamasle.com;
    rewrite ^(.*) http://www.skamasle.com$1 permanent;
}

Usar rewrite es menos eficiente, aunque ya nadie usa versiones viejas de nginx y con el return no tendremos problemas en ninguna versión.

Quitar las WWW con nginx

server {
    server_name www.skamasle.com;
    return 301 $scheme://skamasle.com$request_uri;
}