Configuración Drupal 11 LEMP (Linux, Nginx, PHP8.4 y MariaDB)

Descripción

Cuando se despliega un proyecto Drupal 11 en el entorno de producción, deberíamos realizar varios ajustes, que garanticen su correcto funcionamiento.

Instrucciones

Antes de configurar Nginx, asegúrate de:

  • Ubuntu 22.04+ o 24.04
  • Nginx ≥ 1.18
  • PHP ≥ 8.3 (Drupal 11 lo requiere)
  • Base de datos: MySQL 8 / MariaDB 10.6+ / PostgreSQL
  • Composer instalado

Extensiones PHP necesarias:

Nos aseguramos de instalar php8.4 en nuestro servidor Linux, ejecutando el siguiente comando.

sudo apt install php8.4-fpm php8.4-cli php8.4-mysql php8.4-gd php8.4-curl php8.4-xml php8.4-mbstring php8.4-zip php8.4-opcache php8.4-intl

Configuración Nginx recomendada

Generamos o copiamos el archivo en el que guardaremos la configuración para nuestro Drupal, actualizando el nombre de dominio y la carpeta según nuestra instalación.

Archivo típico:

/etc/nginx/sites-available/drupal

server {
   listen 80;
   server_name tudominio.com www.tudominio.com;

   root /var/www/drupal/web;
   index index.php index.html;

   # Seguridad básica
   server_tokens off;

   # Tamaño de subida
   client_max_body_size 64M;

   # Archivos estáticos (cache)
   location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|webp)$ {
       try_files $uri =404;
       expires max;
       log_not_found off;
   }

   # Drupal clean URLs
   location / {
       try_files $uri /index.php?$query_string;
   }

   # PHP-FPM
   location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php8.3-fpm.sock;

       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
   }

   # Bloquear acceso a archivos sensibles
   location ~* \.(htaccess|env|git|ini|log|sh|sql)$ {
       deny all;
   }

   location ~* /sites/.*/private/ {
       deny all;
   }

   location ~* /vendor/ {
       deny all;
   }

   # Cache control Drupal
   location ~ ^/sites/.*/files/styles/ {
       try_files $uri @rewrite;
   }

   location @rewrite {
       rewrite ^ /index.php;
   }

   # Robots y favicon
   location = /favicon.ico { log_not_found off; access_log off; }
   location = /robots.txt  { allow all; log_not_found off; access_log off; }
}

 

HTTPS (muy recomendado)

Nos aseguraremos de instalar un certificado de seguridad (HTTPS), con el que el usuario accederá a nuestro sitio web sin temores.

Instalamos Certbot, que es una herramienta gratuita:

sudo apt install certbot python3-certbot-nginx

Luego:

Generamos el archivo con el dominio de nuestro sitio web:

sudo certbot --nginx -d tudominio.com -d www.tudominio.com

Optimización PHP (clave para Drupal)

Para evitar fallos en la ejecución de Drupal, es necesario realizar algunos ajustes correspondientes a PHP. Abriremso el archivo utilizando nano o el editor de texto que tengamos disponible en nuestro servidor de producción.

Edita:

/etc/php/8.3/fpm/php.ini

Con nuestro archivo abierto en consla, buscaremos las siguientes líneas y modificaremos sus valores:

memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

OPcache (muy importante)

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=60

Ajustes recomendados de Nginx (global)

Para asegurarnos de que NGINX funcione para todos nuestros proyectos Drupal, realizaremos algunos cambios en el archivo general de NGINX.

Archivo:

Valores recomendados:

/etc/nginx/nginx.conf

Añade o ajusta:

worker_processes auto;
worker_connections 2048;

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

keepalive_timeout 65;

Permisos Drupal

Es importante configurar los permisos de las carpetas y archivos correspondientes a nuestra instalación, ya que, una vez instalado Drupal, los usuarios con permisos podrán subir o cargar todo tipo de archivos desde la interfaz de usuario.

sudo chown -R www-data:www-data /var/www/drupal
sudo find /var/www/drupal -type d -exec chmod 755 {} \;
sudo find /var/www/drupal -type f -exec chmod 644 {} \;

Carpeta de archivos:

 chmod -R 775 /var/www/drupal/web/sites/default/files

Activar sitio

El último paso será añadir un enlace simbólito que apunte a nuestro domimio recién configurado y confirmar que todo funciona correctamente en el Nginx. Posteriormente reiniciaremos el servidor.

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Consejos avanzados (muy recomendados)

  • Usa Redis para caché (mejora brutal en Drupal)
  • Activa CDN (Cloudflare o similar)
  • Usa HTTP/2 o HTTP/3
  • Configura fail2ban
  • Activa headers de seguridad:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";

Snippets relacionados

Lo siento!!!, todavía no tengo contenidos del blog para esta categoría, pero puedes buscar en los Blog o en Cursos

También puedes utilizar el buscador de la parte superior, para encontrar lo que buscas en toda la web.

Más Snippets