Guía práctica: Configurar Nginx para WordPress en Debian 13 (Trixie)

Esta guía te muestra una configuración limpia, segura y funcional de Nginx + PHP-FPM para un sitio WordPress personal o un blog modesto en un servidor Debian 13. No pretende ser la configuración más avanzada del planeta (eso ya lo dejamos para cuando tengas miles de visitas diarias), sino un punto de partida sólido, moderno y razonablemente seguro que puedes poner en producción sin miedo.

Está pensada para quienes administran su propio VPS o están aprendiendo a hacerlo. Así que manos a la obra:

1. Requisitos previos

Antes de empezar, asegúrate de tener:

  • Un servidor con Debian 13 (Trixie) recién actualizado (sudo apt update && sudo apt upgrade).
  • Acceso vía SSH con privilegios de sudo.
  • Un dominio (o subdominio) ya apuntando a la IP pública de tu servidor.

Stack que vamos a usar (todo desde los repositorios oficiales de Debian):

  • Nginx (la versión estable más reciente disponible en los repos).
  • PHP 8.3 + PHP-FPM (viene por defecto en Debian 13).
  • MariaDB o MySQL (tú eliges, la guía no lo toca porque asumimos que ya lo tienes instalado).

2. Estructura de directorios recomendada

Para mantener todo ordenado y seguir las convenciones más comunes en Debian, colocaremos WordPress aquí:

/var/www/wordpress
├── index.php
├── wp-config.php
├── wp-content/
└── wp-includes/

Si ya tienes WordPress en otra ruta, simplemente ajústala más adelante en la configuración.

3. Creamos el archivo de configuración de Nginx

Vamos a crear un archivo específico para tu sitio:

sudo nano /etc/nginx/sites-available/wordpress

Copia y pega el siguiente bloque. No olvides cambiar tudominio.com por tu dominio real (ambas versiones: con y sin www, o solo la que uses).

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

    root /var/www/wordpress;
    index index.php index.html;

    # Permite subir archivos de hasta 64 MB (ajústalo si subes vídeos o temas pesados)
    client_max_body_size 64M;

    # Logs específicos para este sitio (te facilitan mucho la vida al depurar)
    access_log /var/log/nginx/wordpress_access.log;
    error_log  /var/log/nginx/wordpress_error.log;

    # Headers de seguridad básicos pero importantes
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Aquí se procesa todo el PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }

    # Bloqueamos acceso a archivos sensibles (muy importante)
    location ~* /(wp-config\.php|readme\.html|license\.txt) {
        deny all;
    }

    # Impedimos que se ejecute código PHP dentro de la carpeta de uploads
    # (ataque muy común)
    location ~* /wp-content/uploads/.*\.php$ {
        deny all;
    }

    # Cacheamos imágenes, css, js y fuentes por 30 días
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        access_log off;
        add_header Cache-Control "public";
    }
}

4. Activamos el sitio y comprobamos que todo esté bien

# Creamos el enlace simbólico
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/

# Verificamos sintaxis (crucial antes de recargar)
sudo nginx -t

# Si dice "ok" → recargamos sin cortar conexiones
sudo systemctl reload nginx

Si nginx -t da error, revisa el mensaje: suele ser por un punto y coma olvidado o mala indentación.

5. Permisos correctos (esto es clave)

WordPress y Nginx se quejan mucho si los permisos están mal. Hazlo así:

# Todo pertenece a www-data (usuario de Nginx/PHP-FPM en Debian)
sudo chown -R www-data:www-data /var/www/wordpress

# Directorios --> 755
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;

# Archivos --> 644
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;

Con esto ya deberías poder entrar al instalador de WordPress desde tu navegador (http://tudominio.com).

6. Configuración de HTTPS con Let’s Encrypt (imprescindible hoy en día)

6.1 Instalar Certbot

sudo apt update
sudo apt install certbot python3-certbot-nginx

6.2 Obtener e instalar el certificado

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

Sigue el asistente. Casi siempre vas a querer la opción 2 (redirigir todo el tráfico HTTP –> HTTPS). Certbot modificará automáticamente tu archivo de configuración.

6.3 Pequeña optimización post-Certbot

Después de que Certbot termine, abre de nuevo el archivo (normalmente /etc/nginx/sites-available/wordpress) y asegúrate de que el bloque que escucha en el puerto 443 tenga esta línea:

listen 443 ssl http2 on;   # http2 on --> sintaxis recomendada en versiones modernas

O en algunos casos (dependiendo de la versión exacta de Nginx):

listen 443 ssl;
http2 on;

Guarda, verifica sintaxis (sudo nginx -t) y recarga (sudo systemctl reload nginx).

WordPress listo para usar

Y eso sería todo por ahora.

Con esta configuración tienes un entorno Nginx + WordPress bastante decente, seguro para el día a día y fácil de mantener. No es la más ultraoptimizada del mundo (no incluye FastCGI cache ni HTTP/3 todavía), pero para un blog personal, portafolio o proyecto pequeño es más que suficiente y te evita muchos dolores de cabeza típicos.

Puedes revisar como quedó el archivo de configuración de Nginx aqui.

Si más adelante necesitas hardening extra, caching agresivo o multi-sitio, estoy pensando ampliar la guía. Cuéntame en los comentarios si te funcionó o si algo no salió como esperabas. ¡Suele ser por un detalle tonto de sintaxis o permisos! Seguimos administrando.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.