Introducción
Cuando su sitio web o aplicación está en funcionamiento con un dominio, a menudo es preferible permitir que los usuarios accedan a él a través del nombre de dominio simple o mediante www. Si bien hay muchas formas de configurarlo, su mejor opción, por razones de coherencia y SEO, es elegir qué dominio prefiere, simple o www y redirigir el otro a su dominio preferido. Este tipo de redireccionamiento se denomina redireccionamiento permanente o "redireccionamiento 301" y se puede configurar fácilmente configurando correctamente los registros de recursos DNS y el servidor web.
Este tutorial le mostrará cómo redirigir una URL www a no www y viceversa, por ejemplo, de www.example.it a example.it, con Nginx en Ubuntu 18.04.
Prerrequisitos
Este tutorial asume que tiene privilegios de superusuario, es decir, sudo o root, en el servidor que ejecuta Nginx. Si aún no lo ha configurado, siga este tutorial: Configuración inicial de Ubuntu 18.04 LTS.
Se supone que Nginx está instalado. Si no está instalado, siga este tutorial: Cómo instalar Linux Nginx MySQL PHP (LEMP) en Ubuntu 18.04 LTS
También es necesario tener disponible un nombre de dominio activo y en funcionamiento. Si los registros DNS ya están activos y configurados correctamente, omita el siguiente párrafo.
Configurar registros DNS
Para configurar la redirección deseada, www.example.it a example.it o viceversa, debe tener un registro A para cada nombre.
El nombre de host debe ser su dominio, por ejemplo, it, y la dirección IP debe estar configurada como la dirección IP pública de su servidor Nginx. Esto creará automáticamente un registro A que apunte su dominio a la dirección IP especificada.
A continuación, agregue otro registro A con " www " como nombre de host (o "www.example.it" si solo "www" no funciona) y especifique la misma dirección IP.
Nota: Esto también funcionará con registros CNAME siempre que el registro A del nombre canónico se refiera a la dirección IP del servidor web Nginx.
Su servidor ahora debería ser accesible a través del dominio www y no www, pero aún necesitamos configurar el redireccionamiento.
Establecer el redireccionamiento www a non-www
Configurar las reglas de redireccionamiento de www a non-www y viceversa con Nginx es muy simple.
Abra el archivo de configuración de Nginx:
sudo nano /etc/nginx/sites-available/default
El archivo predeterminado debería verse así, verifique si su nombre de dominio está configurado en el parámetro server_name sin www:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Agregue las siguientes líneas de código en la parte superior del archivo, cambie el parámetro server_name a su dominio y www, y cambie el retorno 301 a la dirección de dominio sin www, así:
server {
listen 80;
server_name www.TUO_DOMINIO.it;
return 301 http://TUO_DOMINIO.it$request_uri;
}
Entonces, el resultado se verá así:
server {
listen 80;
server_name www.TUO_DOMINIO.it;
return 301 http://TUO_DOMINIO.it$request_uri;
}
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Reinicie Nginx:
sudo service nginx restart
La redirección para Nginx de www a non-www ahora debería funcionar bien.
Configure el redireccionamiento sin www a www
Por el contrario, para configurar las reglas de redireccionamiento que no son de www a www, simplemente necesita cambiar el nombre_servidor y el redireccionamiento 301 de la configuración anterior.
Abra el archivo de configuración de Nginx:
sudo nano /etc/nginx/sites-available/default
El archivo predeterminado debería verse así, verifique si su nombre de dominio está configurado con www en el parámetro server_name:
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
Agregue las siguientes líneas de código en la parte superior del archivo, cambie el parámetro server_name a su dominio y sin www, y cambie el retorno 301 a la dirección de dominio a www, así:
server {
listen 80;
server_name TUO_DOMINIO.it;
return 301 http://www.TUO_DOMINIO.it$request_uri;
}
Entonces, el resultado se verá así:
server {
listen 80;
server_name TUO_DOMINIO.it;
return 301 http://www.TUO_DOMINIO.it$request_uri;
}
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
}
La redirección para Nginx de www a non-www ahora debería funcionar bien.
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Reinicie Nginx:
sudo service nginx restart
Los cambios deberían surtir efecto de inmediato.
Configure el redireccionamiento de www a no www con HTTPS
Si usa certificados SSL, entonces tiene una conexión activa con el protocolo HTTPS y desea redirigir de www a non-www (o viceversa) y de HTTP a HTTPS continúe leyendo.
Abra el archivo de configuración de Nginx:
sudo nano /etc/nginx/sites-available/default
Agregue un nuevo bloque de servidor al comienzo del archivo para administrar conexiones HTTP y redirigir a HTTPS. Modifique el parámetro server_name ingresando su nombre de dominio tanto sin www como con www, también modifique el parámetro de retorno configurado a la url preferida, en nuestro caso la versión sin www, así:
server {
listen 80;
listen [::]:80;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
return 301 https://TUO_DOMINIO.it$request_uri;
}
Guarde y cierre el archivo presionando CTRL + X, seguido de Y para guardar los cambios y luego ENTER si está usando nano.
Cambie el bloque del servidor principal. Cambie el parámetro Listen al puerto 443 y agregue el parámetro ssl. Incluya la ruta a sus certificados, si aún no están incluidos, y al final del bloque agregue una condición if que establezca una redirección automática a su URL preferida, en este caso sin www. Si prefiere crear un no-www a www redirección, revertir los parámetros nombre_servidor y retorno en ambos bloques de servidor.
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
#include your certificates...
if ($host = 'www.TUO_DOMINIO.it') {
return 301 https://TUO_DOMINIO.it$request_uri;
}
}
Entonces, la configuración final con redirección de www a non-www con https habilitado es la siguiente:
server {
listen 80;
listen [::]:80;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
return 301 https://TUO_DOMINIO.it$request_uri;
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name TUO_DOMINIO.it www.TUO_DOMINIO.it;
location /{
try_files $uri $uri/=404;
}
#include your certificates...
if ($host = 'www.TUO_DOMINIO.it') {
return 301 https://TUO_DOMINIO.it$request_uri;
}
}
Reinicie Nginx:
sudo service nginx restart
Los cambios deberían surtir efecto de inmediato.
Conclusión
En este tutorial aprendimos cómo configurar las reglas de redireccionamiento para Nginx de www a non-www y viceversa, y de http a https.
¡Eso es todo! La redirección de Nginx ahora está configurada correctamente.