{"id":152,"date":"2026-02-08T14:28:06","date_gmt":"2026-02-08T18:28:06","guid":{"rendered":"https:\/\/juredev.com\/blog\/?p=152"},"modified":"2026-02-16T11:01:40","modified_gmt":"2026-02-16T15:01:40","slug":"guia-practica-configurar-nginx-para-wordpress-en-debian","status":"publish","type":"post","link":"https:\/\/juredev.com\/blog\/2026\/02\/guia-practica-configurar-nginx-para-wordpress-en-debian\/","title":{"rendered":"Gu\u00eda pr\u00e1ctica: Configurar Nginx para WordPress en Debian 13 (Trixie)"},"content":{"rendered":"\n<p>Esta gu\u00eda te muestra una configuraci\u00f3n limpia, segura y funcional de <strong>Nginx<\/strong> + <strong>PHP-FPM<\/strong> para un sitio <a href=\"https:\/\/es.wikipedia.org\/wiki\/WordPress\" data-type=\"link\" data-id=\"https:\/\/es.wikipedia.org\/wiki\/WordPress\"><strong>WordPress<\/strong><\/a> personal o un blog modesto en un servidor Debian 13. No pretende ser la configuraci\u00f3n m\u00e1s avanzada del planeta (eso ya lo dejamos para cuando tengas miles de visitas diarias), sino un punto de partida s\u00f3lido, moderno y razonablemente seguro que puedes poner en producci\u00f3n sin miedo.<\/p>\n\n\n\n<p>Est\u00e1 pensada para quienes administran su propio VPS o est\u00e1n aprendiendo a hacerlo. As\u00ed que manos a la obra:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Requisitos previos<\/h2>\n\n\n\n<p>Antes de empezar, aseg\u00farate de tener:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un servidor con Debian 13 (Trixie) reci\u00e9n actualizado (<strong>sudo apt update &amp;&amp; sudo apt upgrade<\/strong>).<\/li>\n\n\n\n<li>Acceso v\u00eda <strong>SSH<\/strong> con privilegios de sudo.<\/li>\n\n\n\n<li>Un dominio (o subdominio) ya apuntando a la IP p\u00fablica de tu servidor.<\/li>\n<\/ul>\n\n\n\n<p><strong>Stack que vamos a usar <\/strong>(todo desde los repositorios oficiales de Debian):<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Nginx<\/strong> (la versi\u00f3n estable m\u00e1s reciente disponible en los repos).<\/li>\n\n\n\n<li><strong>PHP 8.3<\/strong> + <strong>PHP-FPM <\/strong>(viene por defecto en Debian 13).<\/li>\n\n\n\n<li><strong>MariaDB<\/strong> o <strong>MySQL<\/strong> (t\u00fa eliges, la gu\u00eda no lo toca porque asumimos que ya lo tienes instalado).<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2. Estructura de directorios recomendada<\/h2>\n\n\n\n<p>Para mantener todo ordenado y seguir las convenciones m\u00e1s comunes en Debian, colocaremos WordPress aqu\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/var\/www\/wordpress\n\u251c\u2500\u2500 index.php\n\u251c\u2500\u2500 wp-config.php\n\u251c\u2500\u2500 wp-content\/\n\u2514\u2500\u2500 wp-includes\/<\/code><\/pre>\n\n\n\n<p>Si ya tienes WordPress en otra ruta, simplemente aj\u00fastala m\u00e1s adelante en la configuraci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Creamos el archivo de configuraci\u00f3n de Nginx<\/h2>\n\n\n\n<p>Vamos a crear un archivo espec\u00edfico para tu sitio:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo nano \/etc\/nginx\/sites-available\/wordpress<\/code><\/pre>\n\n\n\n<p>Copia y pega el siguiente bloque. No olvides cambiar <strong>tudominio.com<\/strong> por tu dominio real (ambas versiones: con y sin www, o solo la que uses).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name tudominio.com www.tudominio.com;\n\n    root \/var\/www\/wordpress;\n    index index.php index.html;\n\n    # Permite subir archivos de hasta 64 MB (aj\u00fastalo si subes v\u00eddeos o temas pesados)\n    client_max_body_size 64M;\n\n    # Logs espec\u00edficos para este sitio (te facilitan mucho la vida al depurar)\n    access_log \/var\/log\/nginx\/wordpress_access.log;\n    error_log  \/var\/log\/nginx\/wordpress_error.log;\n\n    # Headers de seguridad b\u00e1sicos pero importantes\n    add_header X-Frame-Options \"SAMEORIGIN\" always;\n    add_header X-Content-Type-Options \"nosniff\" always;\n    add_header Referrer-Policy \"strict-origin-when-cross-origin\" always;\n\n    location \/ {\n        try_files $uri $uri\/ \/index.php?$args;\n    }\n\n    # Aqu\u00ed se procesa todo el PHP\n    location ~ \\.php$ {\n        include snippets\/fastcgi-php.conf;\n        fastcgi_pass unix:\/run\/php\/php8.3-fpm.sock;\n    }\n\n    # Bloqueamos acceso a archivos sensibles (muy importante)\n    location ~* \/(wp-config\\.php|readme\\.html|license\\.txt) {\n        deny all;\n    }\n\n    # Impedimos que se ejecute c\u00f3digo PHP dentro de la carpeta de uploads\n    # (ataque muy com\u00fan)\n    location ~* \/wp-content\/uploads\/.*\\.php$ {\n        deny all;\n    }\n\n    # Cacheamos im\u00e1genes, css, js y fuentes por 30 d\u00edas\n    location ~* \\.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {\n        expires 30d;\n        access_log off;\n        add_header Cache-Control \"public\";\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Activamos el sitio y comprobamos que todo est\u00e9 bien<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code># Creamos el enlace simb\u00f3lico\nsudo ln -s \/etc\/nginx\/sites-available\/wordpress \/etc\/nginx\/sites-enabled\/\n\n# Verificamos sintaxis (crucial antes de recargar)\nsudo nginx -t\n\n# Si dice \"ok\" \u2192 recargamos sin cortar conexiones\nsudo systemctl reload nginx<\/code><\/pre>\n\n\n\n<p>Si <strong>nginx -t<\/strong> da error, revisa el mensaje: suele ser por un punto y coma olvidado o mala indentaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Permisos correctos (esto es clave)<\/h2>\n\n\n\n<p>WordPress y Nginx se quejan mucho si los permisos est\u00e1n mal. Hazlo as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Todo pertenece a www-data (usuario de Nginx\/PHP-FPM en Debian)\nsudo chown -R www-data:www-data \/var\/www\/wordpress\n\n# Directorios --> 755\nsudo find \/var\/www\/wordpress -type d -exec chmod 755 {} \\;\n\n# Archivos --> 644\nsudo find \/var\/www\/wordpress -type f -exec chmod 644 {} \\;<\/code><\/pre>\n\n\n\n<p>Con esto ya deber\u00edas poder entrar al instalador de WordPress desde tu navegador (<strong>http:\/\/tudominio.com<\/strong>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Configuraci\u00f3n de HTTPS con Let\u2019s Encrypt (imprescindible hoy en d\u00eda)<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">6.1 Instalar Certbot<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install certbot python3-certbot-nginx<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6.2 Obtener e instalar el certificado<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo certbot --nginx -d tudominio.com -d www.tudominio.com<\/code><\/pre>\n\n\n\n<p>Sigue el asistente. Casi siempre vas a querer la opci\u00f3n 2 (redirigir todo el tr\u00e1fico HTTP &#8211;> HTTPS). Certbot modificar\u00e1 autom\u00e1ticamente tu archivo de configuraci\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6.3 Peque\u00f1a optimizaci\u00f3n post-Certbot<\/h3>\n\n\n\n<p>Despu\u00e9s de que Certbot termine, abre de nuevo el archivo (normalmente <strong>\/etc\/nginx\/sites-available\/wordpress<\/strong>) y aseg\u00farate de que el bloque que escucha en el puerto 443 tenga esta l\u00ednea:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>listen 443 ssl http2 on;   # http2 on --> sintaxis recomendada en versiones modernas<\/code><\/pre>\n\n\n\n<p>O en algunos casos (dependiendo de la versi\u00f3n exacta de Nginx):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>listen 443 ssl;\nhttp2 on;<\/code><\/pre>\n\n\n\n<p>Guarda, verifica sintaxis (<strong>sudo nginx -t<\/strong>) y recarga (<strong>sudo systemctl reload nginx<\/strong>).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WordPress listo para usar <\/h2>\n\n\n\n<p>Y eso ser\u00eda todo por ahora.<\/p>\n\n\n\n<p>Con esta configuraci\u00f3n tienes un entorno Nginx + <a href=\"https:\/\/juredev.com\/blog\/tag\/wordpress\/\">WordPress<\/a> bastante decente, seguro para el d\u00eda a d\u00eda y f\u00e1cil de mantener. No es la m\u00e1s ultraoptimizada del mundo (no incluye FastCGI cache ni HTTP\/3 todav\u00eda), pero para un blog personal, portafolio o proyecto peque\u00f1o es m\u00e1s que suficiente y te evita muchos dolores de cabeza t\u00edpicos.<\/p>\n\n\n\n<p>Puedes revisar como qued\u00f3 el archivo de configuraci\u00f3n de Nginx <a href=\"https:\/\/gist.github.com\/jure-ve\/6eb192809894d58f0b3ed50b57db3550\" data-type=\"link\" data-id=\"https:\/\/gist.github.com\/jure-ve\/6eb192809894d58f0b3ed50b57db3550\">aqui<\/a>.<\/p>\n\n\n\n<p>Si m\u00e1s adelante necesitas hardening extra, caching agresivo o multi-sitio, estoy pensando ampliar la gu\u00eda. Cu\u00e9ntame en los comentarios si te funcion\u00f3 o si algo no sali\u00f3 como esperabas. \u00a1Suele ser por un detalle tonto de sintaxis o permisos! Seguimos administrando.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esta gu\u00eda te muestra una configuraci\u00f3n 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\u00f3n m\u00e1s avanzada del planeta (eso ya lo dejamos para cuando tengas miles de visitas diarias), sino un punto de partida s\u00f3lido, moderno [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[24,15,19],"class_list":["post-152","post","type-post","status-publish","format-standard","hentry","category-guia","tag-linux","tag-php","tag-wordpress"],"_links":{"self":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts\/152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/comments?post=152"}],"version-history":[{"count":0,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/posts\/152\/revisions"}],"wp:attachment":[{"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/media?parent=152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/categories?post=152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/juredev.com\/blog\/wp-json\/wp\/v2\/tags?post=152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}