Configuración básica de Ubuntu Server para servicios web

Bloques de servidor

Nginx trae una configuración por defecto que expone el puerto 80 del servidor pero nosotros queremos configurar dominios y subdominios así que tendremos que realizar configuraciones individuales para cada caso, eso se hace en lo que se denominan los Server Blocks de Nginx.

Así que vamos a configurar nuestro dominio en un server block, primero creando un directorio donde almacenar los ficheros:

sudo mkdir -p /var/www/hektorprofe.tk/html

La opción -p creará toda la ruta de directorios automáticamente hasta el último, que es la carpeta html.

Ahora un paso muy importante, asignaremos el propietario del directorio con la variable de sistema $USER:

sudo chown -R $USER:$USER /var/www/hektorprofe.tk/html

Y también le daremos unos permisos de lectura, escritura y ejecución:

sudo chmod -R 755 /var/www/hektorprofe.tk

Ahora crearemos un fichero index.html de prueba para nuestro dominio:

nano /var/www/hektorprofe.tk/html/index.html

Con el siguiente contenido:

/var/www/hektorprofe.tk/html/index.html

<html>
    <head>
        <meta charset="UTF-8">
        <title>Bienvenido a hektorprofe.tk!</title>
    </head>
    <body>
        <h1>¡El bloque de servidor de hektorprofe.tk está funcionando!</h1>
    </body>
</html>

Ahora tendremos que añadir la configuración del bloque de servidor, eso lo haremos creando un fichero con el nombre del dominio o subdominio en el directorio /etc/nginx/sites-available/, que como su nombre indica almacena las configuraciones de los sitios disponibles para ser utilizados por Nginx:

sudo nano /etc/nginx/sites-available/hektorprofe.tk

Dentro añadiremos exactamente esta configuración:

/etc/nginx/sites-available/hektorprofe.tk

server {
    listen 80;
    listen [::]:80;

    root /var/www/hektorprofe.tk/html;
    index index.html index.htm;

    server_name hektorprofe.tk www.hektorprofe.tk;

    location / {
            try_files $uri $uri/ =404;
    }
}

Después de guardar nos faltará hacer una última cosa, activar el bloque de servidor, algo que haremos creando un enlace del fichero que acabamos de crear en el directorio /etc/nginx/sites-enabled/, que como su nombre indica almacena la configuración de los sitios activados:

sudo ln -s /etc/nginx/sites-available/hektorprofe.tk /etc/nginx/sites-enabled/

En este punto tendremos dos bloques activos:

  • hektorprofe.tk: Para responder las peticiones a hektorprofe.tk y www.hektorprofe.tk
  • default: Para responder cualquier petición al puerto 80 que no responda ningún otro bloque de servidor.

En este punto ya lo tenemos preparado pero haremos un último ajuste para permitir el uso de nombres largos de dominio descomentando una línea de la configuración de Nginx:

sudo nano /etc/nginx/nginx.conf

Esta es la línea:

/etc/nginx/nginx.conf

...
http {
    ...
    server_names_hash_bucket_size 64;
    ...
}
...

Ahora antes de reiniciar Nginx y aplicar los cambios podemos comprobar si la configuración está correcta con el comando:

sudo nginx -t

Si no se queja reiniciaremos el servidor:

sudo systemctl restart nginx

En este momento ya deberíamos ser capaces de acceder a nuestro dominio y ver el index.html que creamos en el bloque del servidor:

http://www.hektorprofe.tk

Chuleta de ficheros y directorios de Nginx

  • /var/www/html: Ruta donde se almacena el contenido por defecto que muestra Nginx (su default), puede ser cambiado en el fichero de configuración principal.
  • /etc/nginx/nginx.conf: Ruta del fichero de configuración principal.
  • /etc/nginx/sites-available/: Directorio que contiene las configuraciones de los bloques de servidor disponibles pero no activados.
  • /etc/nginx/sites-enabled/: Directorio que contiene las configuraciones de los bloques de servidor activados, normalmente enlazado desde el directorios de bloques de servidor disponibles.
  • /etc/nginx/snippets: Directorio que contiene fragmentos configurables incluidos globalmente en la configuración de Nginx.
  • /var/log/nginx/access.log: Fichero que almacena un registro de las peticiones recibidas.
  • /var/log/nginx/error.log: Fichero que almacena un registro de los posibles errores.