<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Nginx on javierin.com</title>
		<link>https://javierin.com/category/nginx/</link>
		<description>Recent content in Nginx on javierin.com</description>
		<generator>Hugo</generator>
		<language>es-ES</language>
		
		
		
		
			<lastBuildDate>Mon, 01 Jun 2026 14:54:36 +0000</lastBuildDate>
		
			<atom:link href="https://javierin.com/category/nginx/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Guía Definitiva de Nginx Hardening 2025: Cómo Securizar tu Servidor Web</title>
				<link>https://javierin.com/guia-para-securizar-nginx/</link>
				<pubDate>Thu, 06 Nov 2025 15:57:09 +0000</pubDate>
				<guid>https://javierin.com/guia-para-securizar-nginx/</guid>
				<description>¿Usas Nginx? ¡Genial! Has elegido uno de los servidores web más rápidos, eficientes y versátiles del planeta. Es una máquina bien engrasada que puede servir contenido a velocidades de vértigo. Pero, aquí viene el &#34;pero&#34;... una instalación por defecto de Nginx es como tener un cochazo deportivo con las puertas abiertas y las llaves puestas. Funciona, sí, pero no es precisamente seguro.&#xA;&#xA;En pleno 2025, con las amenazas a la vuelta de la esquina, no basta con instalar y olvidar. Necesitas tomarte en serio la &lt;strong&gt;seguridad nginx&lt;/strong&gt;. Este proceso, conocido en el mundillo como &lt;em&gt;hardening&lt;/em&gt;, consiste en aplicar una serie de configuraciones y buenas prácticas para reducir la superficie de ataque y hacerle la vida imposible a los malos.&#xA;&#xA;En esta guía, vamos a arremangarnos y a ver, paso a paso, cómo puedes &lt;strong&gt;securizar Nginx&lt;/strong&gt; de forma robusta. Olvídate de los consejos básicos y vamos a meternos en faena de verdad.&#xA;&lt;h2&gt;Primeros Pasos: La Base de tu Seguridad Nginx&lt;/h2&gt;&#xA;Antes de entrar en configuraciones complejas, empecemos por lo fundamental. Estos son los cimientos sobre los que construiremos nuestra fortaleza digital.&#xA;&lt;h3&gt;Mantén Nginx Siempre Actualizado&lt;/h3&gt;&#xA;Suena obvio, ¿verdad? Pues te sorprendería la cantidad de servidores que corren versiones obsoletas y vulnerables. Los desarrolladores de Nginx publican parches de seguridad constantemente. Asegurarte de tener la última versión estable es &lt;strong&gt;la medida de seguridad más simple y efectiva que puedes tomar&lt;/strong&gt;.&#xA;&lt;pre&gt;#Para sistemas basados en Debian/Ubuntu&#xA;&#xA;sudo apt update&#xA;sudo apt upgrade nginx&#xA;&#xA;#Para sistemas basados en CentOS/RHEL&#xA;&#xA;sudo dnf update nginx&lt;/pre&gt;&#xA;Configura tu sistema para que te notifique de las actualizaciones o, si tu política de empresa lo permite, automatízalas.&#xA;&lt;h3&gt;Oculta la Versión de Nginx&lt;/h3&gt;&#xA;Un atacante que sabe la versión exacta de tu Nginx puede buscar vulnerabilidades específicas para esa versión. No se lo pongas tan fácil. Es un pequeño paso de &#34;seguridad por oscuridad&#34;, pero todo suma.&#xA;&#xA;Abre tu fichero de configuración principal &lt;code&gt;nginx.conf&lt;/code&gt;:&#xA;&lt;pre&gt;#/etc/nginx/nginx.conf&#xA;&#xA;http {&#xA;...&#xA;server_tokens off;&#xA;...&#xA;}&lt;/pre&gt;&#xA;Con esta simple línea, Nginx dejará de mostrar su número de versión en las cabeceras de respuesta y en las páginas de error. En lugar de &lt;code&gt;Server: nginx/1.26.1&lt;/code&gt;, solo mostrará &lt;code&gt;Server: nginx&lt;/code&gt;. ¡Menos información para el enemigo!&#xA;&lt;h2&gt;Fortaleciendo tu Configuración: El Verdadero Nginx Hardening&lt;/h2&gt;&#xA;Aquí es donde la magia ocurre. Vamos a tocar la configuración para blindar el servidor contra los ataques más comunes.&#xA;&lt;h3&gt;Configuración SSL/TLS a Prueba de Balas&lt;/h3&gt;&#xA;En 2025, tener un sitio sin HTTPS es impensable. Pero no vale con activar cualquier certificado. La clave está en una configuración SSL/TLS robusta.&#xA;&#xA;&lt;strong&gt;1. Utiliza Protocolos Modernos:&lt;/strong&gt; Desactiva protocolos antiguos y vulnerables como SSLv3, TLS 1.0 y TLS 1.1. Quédate solo con TLS 1.2 y, sobre todo, &lt;strong&gt;TLS 1.3&lt;/strong&gt;.&#xA;&#xA;&lt;strong&gt;2. Elige Cifrados Fuertes:&lt;/strong&gt; No todos los algoritmos de cifrado son iguales. Debes dar prioridad a los más modernos y seguros.&#xA;&#xA;&lt;strong&gt;3. Implementa HSTS (HTTP Strict Transport Security):&lt;/strong&gt; Esta cabecera le dice al navegador que solo debe comunicarse con tu servidor a través de HTTPS, eliminando la posibilidad de ataques &lt;em&gt;man-in-the-middle&lt;/em&gt; en conexiones futuras.&#xA;&#xA;Una configuración de servidor para SSL podría parecerse a esto:&#xA;&lt;pre&gt;nginx&#xA;server {&#xA;listen 443 ssl http2;&#xA;listen [::]:443 ssl http2;&#xA;&#xA;ssl_certificate /ruta/a/tu/certificado_fullchain.pem;&#xA;ssl_certificate_key /ruta/a/tu/clave_privada.pem;&#xA;&#xA;# Protocolos modernos&#xA;ssl_protocols TLSv1.2 TLSv1.3;&#xA;&#xA;# Cifrados fuertes&#xA;ssl_ciphers &#39;EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH&#39;;&#xA;ssl_prefer_server_ciphers on;&#xA;ssl_session_cache shared:SSL:10m;&#xA;&#xA;# HSTS (¡Cuidado! Empieza con un max-age bajo y súbelo cuando estés seguro)&#xA;add_header Strict-Transport-Security &#34;max-age=31536000; includeSubDomains; preload&#34; always;&#xA;&#xA;# OCSP Stapling (mejora el rendimiento de la validación del certificado)&#xA;ssl_stapling on;&#xA;ssl_stapling_verify on;&#xA;ssl_trusted_certificate /ruta/a/tu/certificado_chain.pem;&#xA;&#xA;...&#xA;&#xA;}&lt;/pre&gt;&#xA;No tienes que memorizar todo esto. Una herramienta fantástica para generar configuraciones seguras es el &lt;strong&gt;&lt;a href=&#34;https://ssl-config.mozilla.org/&#34;&gt;Generador de Configuración SSL de Mozilla&lt;/a&gt;&lt;/strong&gt;. Simplemente elige Nginx, tu versión y el nivel de compatibilidad que necesitas, y te dará una configuración lista para usar.&#xA;&lt;h3&gt;Protege tu Servidor contra Ataques Comunes&lt;/h3&gt;&#xA;Además del SSL, hay varias cabeceras HTTP que añaden capas extra de &lt;strong&gt;seguridad nginx&lt;/strong&gt;.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Contra el Clickjacking:&lt;/strong&gt; Evita que tu sitio sea cargado dentro de un &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; en otra web.&#xA;&lt;code&gt;add_header X-Frame-Options &#34;SAMEORIGIN&#34; always;&lt;/code&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Contra el MIME-Sniffing:&lt;/strong&gt; Impide que el navegador intente &#34;adivinar&#34; el tipo de contenido de un fichero, lo que podría llevar a la ejecución de código malicioso.&#xA;&lt;code&gt;add_header X-Content-Type-Options &#34;nosiff&#34; always;&lt;/code&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Contra el Cross-Site Scripting (XSS):&lt;/strong&gt; Aunque los navegadores modernos ya no le hacen tanto caso, no está de más para dar soporte a versiones antiguas.&#xA;&lt;code&gt;add_header X-XSS-Protection &#34;1; mode=block&#34; always;&lt;/code&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Limita los Buffers:&lt;/strong&gt; Peticiones con cuerpos o cabeceras enormes pueden ser un vector para ataques de denegación de servicio o buffer overflow. Establece límites razonables.&#xA;&lt;code&gt;client_body_buffer_size 16k;&lt;/code&gt;&#xA;&lt;code&gt;client_header_buffer_size 1k;&lt;/code&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Limita las Peticiones (Rate Limiting):&lt;/strong&gt; Esencial para mitigar ataques de fuerza bruta (por ejemplo, contra un panel de login) o DDoS a nivel de aplicación.&#xA;&lt;span style=&#34;color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;&#34;&gt;limit&lt;/span&gt;&lt;span style=&#34;color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;&#34;&gt;req&lt;/span&gt;&lt;span style=&#34;color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;&#34;&gt;zone $binary&lt;/span&gt;&lt;span style=&#34;color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;&#34;&gt;remote&lt;/span&gt;&lt;span style=&#34;color: #1e1e1e; font-family: Menlo, Consolas, monaco, monospace; font-size: 15px; white-space-collapse: preserve;&#34;&gt;addr zone=login:10m rate=1r/s; # Si lo pones en nginx.conf&lt;/span&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;span style=&#34;font-size: revert; color: initial; font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, Oxygen-Sans, Ubuntu, Cantarell, &#39;Helvetica Neue&#39;, sans-serif;&#34;&gt;En el server block o location que quieres proteger&lt;/span&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre&gt;server {&#xA;...&#xA;location /login.php {&#xA;limit_req zone=login burst=5 nodelay;&#xA;...&#xA;}&#xA;}&lt;/pre&gt;&#xA;Este ejemplo limita a los usuarios a una petición por segundo a la página de login, con un pequeño búfer de 5 peticiones. El &lt;strong&gt;nginx hardening&lt;/strong&gt; pasa, sí o sí, por controlar el ritmo al que te hablan.&#xA;&lt;h2&gt;Securizar Nginx con PHP-FPM&lt;/h2&gt;&#xA;Si usas PHP (¿quién no?), lo más probable es que lo hagas a través de PHP-FPM. Una mala configuración aquí es una puerta de entrada directa a &lt;a href=&#34;https://www.amazon.es/dp/B0CJQG8CWJ?tag=javierin-21&amp;amp;linkCode=osi&amp;amp;th=1&amp;amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow noopener sponsored&#34;&gt;tu servidor&lt;/a&gt;.&#xA;&lt;h3&gt;Aísla tus Sitios con Pools Separados&lt;/h3&gt;&#xA;No ejecutes todos tus sitios web bajo el mismo usuario de PHP-FPM (&lt;code&gt;www-data&lt;/code&gt; por defecto). Si un atacante compromete uno de tus sitios, tendrá acceso a todos los demás.&#xA;&#xA;&lt;strong&gt;La mejor práctica es crear un pool de PHP-FPM por cada sitio web, cada uno ejecutándose con su propio usuario y grupo.&lt;/strong&gt; De esta forma, un incidente en &lt;code&gt;sitioA.com&lt;/code&gt; no afectará a &lt;code&gt;sitioB.com&lt;/code&gt;. Es un poco más de trabajo de configuración, pero la ganancia en seguridad es brutal.&#xA;&lt;h3&gt;Parámetros Clave de FastCGI&lt;/h3&gt;&#xA;Dentro de tu bloque &lt;code&gt;location ~ \.php$&lt;/code&gt;, hay que tener cuidado.&#xA;&#xA;&lt;strong&gt;1. Evita la Ejecución de Ficheros Fantasma:&lt;/strong&gt; Una vulnerabilidad clásica permitía ejecutar código si subías un fichero llamado, por ejemplo, &lt;code&gt;imagen.jpg/fichero.php&lt;/code&gt;. Para prevenirlo, asegúrate de tener &lt;code&gt;cgi.fix_pathinfo=0&lt;/code&gt; en tu &lt;code&gt;php.ini&lt;/code&gt; y utiliza &lt;code&gt;try_files&lt;/code&gt; en tu configuración de Nginx.&#xA;&#xA;&lt;code&gt;nginx&#xA;location ~ \.php$ {&#xA;try_files $uri =404;&#xA;fastcgi_split_path_info ^(.+\.php)(/.+)$;&#xA;fastcgi_pass unix:/var/run/php/php8.3-fpm-misitio.sock; # Usando el socket del pool específico&#xA;fastcgi_index index.php;&#xA;include fastcgi_params;&#xA;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&#xA;}&#xA;&lt;/code&gt;&#xA;El &lt;code&gt;try_files $uri =404;&lt;/code&gt; es crucial. Le dice a Nginx: &#34;si el fichero .php no existe físicamente en el disco, devuelve un error 404 en lugar de pasárselo a PHP&#34;.&#xA;&#xA;&lt;strong&gt;2. No Confíes en las Extensiones de Fichero:&lt;/strong&gt; Limita la ejecución de PHP solo a los scripts que tú quieres. Por ejemplo, si tienes una carpeta &lt;code&gt;/uploads&lt;/code&gt; donde los usuarios suben ficheros, deshabilita la ejecución de PHP dentro de ella.&#xA;&lt;pre&gt;location /uploads/ {&#xA;    location ~ \.php$ {&#xA;        return 403; # Prohibido&#xA;    }&#xA;    # Otras reglas para los ficheros de /uploads&#xA;}&lt;code&gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2&gt;Nginx como Proxy Inverso: Doble Deber, Doble Seguridad&lt;/h2&gt;&#xA;Usar Nginx como proxy inverso (delante de una aplicación Node.js, Python, Java o incluso otro Apache) es súper común. Aquí, el objetivo es &lt;strong&gt;securizar Nginx&lt;/strong&gt; para que actúe como un escudo protector.&#xA;&lt;h3&gt;Oculta la Identidad de tus Servidores Backend&lt;/h3&gt;&#xA;Tu servidor de aplicación backend (el que corre tu app) no debería hablar directamente con internet. Nginx es su único interlocutor. Asegúrate de que el backend no revela información sensible.&#xA;&#xA;Usa &lt;code&gt;proxy_hide_header&lt;/code&gt; para limpiar cabeceras que delaten al backend, como &lt;code&gt;X-Powered-By&lt;/code&gt; o &lt;code&gt;Server&lt;/code&gt;.&#xA;&lt;pre&gt;&#xA;location /api/ {&#xA;proxypass http://localhost:3000; # Tu app Node.js, por ejemplo&#xA;proxysetheader Host $host;&#xA;proxysetheader X-Real-IP $remoteaddr;&#xA;proxysetheader X-Forwarded-For $proxyaddxforwardedfor;&#xA;&#xA;# Ocultamos información del backend&#xA;proxy_hide_header X-Powered-By;&#xA;proxy_hide_header Server;&#xA;&#xA;&#xA;}&lt;/pre&gt;&#xA;&lt;h3&gt;Bloquea el Acceso Directo al Backend&lt;/h3&gt;&#xA;Tu aplicación backend solo debería aceptar conexiones desde Nginx. La forma más sencilla es hacer que escuche solo en &lt;code&gt;localhost&lt;/code&gt; (&lt;code&gt;127.0.0.1&lt;/code&gt;). Si está en otra máquina, &lt;strong&gt;usa un firewall&lt;/strong&gt; (como &lt;code&gt;ufw&lt;/code&gt; o &lt;code&gt;firewalld&lt;/code&gt;) para bloquear el acceso público a su puerto, permitiendo únicamente las conexiones desde la IP del servidor Nginx.&#xA;&lt;h2&gt;Herramientas y Monitorización: Tus Ojos en el Servidor&lt;/h2&gt;&#xA;Un buen &lt;strong&gt;nginx hardening&lt;/strong&gt; no termina con la configuración. Necesitas vigilar.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Fail2ban:&lt;/strong&gt; Esta herramienta es tu mejor amiga. Monitoriza los logs de Nginx y banea automáticamente las IPs que muestran un comportamiento malicioso (intentos de login fallidos, búsqueda masiva de ficheros, etc.). Configurar &lt;code&gt;fail2ban&lt;/code&gt; para que vigile &lt;code&gt;nginx-http-auth&lt;/code&gt; o &lt;code&gt;nginx-badbots&lt;/code&gt; es un &lt;em&gt;must&lt;/em&gt;.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Web Application Firewall (WAF):&lt;/strong&gt; Para una capa extra de protección, puedes usar un WAF como &lt;strong&gt;ModSecurity&lt;/strong&gt;. El conector oficial de Nginx te permite integrar este potente cortafuegos de aplicaciones que puede detectar y bloquear ataques complejos como inyecciones SQL o XSS en tiempo real. Puedes encontrar el proyecto en el &lt;a href=&#34;https://github.com/SpiderLabs/ModSecurity-nginx&#34;&gt;repositorio de ModSecurity-nginx en GitHub&lt;/a&gt;.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Logs, Logs y más Logs:&lt;/strong&gt; Revisa tus logs de acceso y error periódicamente. Son una mina de oro para detectar patrones de ataque y problemas de configuración.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Conclusión: Un Proceso Continuo&lt;/h2&gt;&#xA;¡Y ya está! Has pasado de una instalación básica a una configuración de Nginx robusta y preparada para lo que venga.&#xA;&#xA;Recuerda que la &lt;strong&gt;seguridad nginx&lt;/strong&gt; no es algo que haces una vez y te olvidas. Es un proceso continuo de actualización, monitorización y ajuste. Las amenazas evolucionan, y tu defensa también debe hacerlo.&#xA;&#xA;Pero con esta guía como punto de partida, has dado un paso de gigante. Ahora tu Nginx no solo es endiabladamente rápido, sino que también es una auténtica fortaleza digital. ¡A dormir un poco más tranquilo&#xA;&#xA;&lt;small&gt;Este articulo puede contener enlaces de afiliación&lt;/small&gt;&#xA;&lt;h2&gt;Preguntas Frecuentes&lt;/h2&gt;&#xA;&lt;div class=&#34;faq-container&#34;&gt;&#xA;&lt;div class=&#34;faq-item&#34;&gt;&#xA;&lt;p class=&#34;faq-question&#34;&gt;&lt;strong&gt;Q: Son muchas configuraciones. Si tuviera que empezar por algo, ¿cuáles son las 3 medidas de seguridad más críticas e indispensables para cualquier servidor Nginx?&lt;/strong&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Guía Definitiva 2025: Cómo Optimizar PHP-FPM y PHP.ini para Volar</title>
				<link>https://javierin.com/mejor-configuracion-optimizada-php-fpm/</link>
				<pubDate>Wed, 05 Nov 2025 00:03:00 +0000</pubDate>
				<guid>https://javierin.com/mejor-configuracion-optimizada-php-fpm/</guid>
				<description>&lt;p&gt;¿Sientes que tu web podría ir más rápido? ¿Has instalado el último tema, optimizado las imágenes y puesto un CDN, pero la cosa sigue sin volar? A veces, el verdadero tesoro del rendimiento no está en el frontend, sino en las tripas del servidor. Y ahí, amigo mío, es donde brilla &lt;strong&gt;PHP-FPM&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Si usas un stack moderno con Nginx, lo más seguro es que estés usando PHP-FPM para gestionar las peticiones PHP. Pero, ¿lo tienes bien configurado? Por defecto, viene con unos valores bastante conservadores que no le sacan todo el jugo a tu máquina.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Nginx: &#34;listen ... http2&#34; deprecated - Solución y Guía Completa</title>
				<link>https://javierin.com/nginx-listen-http2-deprecated-solucion-y-guia-completa/</link>
				<pubDate>Mon, 01 Sep 2025 05:18:37 +0000</pubDate>
				<guid>https://javierin.com/nginx-listen-http2-deprecated-solucion-y-guia-completa/</guid>
				<description>&lt;h2&gt;¿Tu Nginx se queja de «listen http2»? No te preocupes, tiene fácil solución&lt;/h2&gt;&#xA;&lt;p&gt;Si eres de los que &lt;a href=&#34;https://www.amazon.es/dp/B0BZVCMMT7?tag=javierin-21&amp;amp;linkCode=osi&amp;amp;th=1&amp;amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow noopener sponsored&#34;&gt;gestiona servidores web&lt;/a&gt;, es muy probable que, tras una actualización reciente de Nginx, te hayas topado con un aviso un tanto molesto en tus logs o al reiniciar el servicio. Un mensaje que dice algo como: &lt;code&gt;nginx: [warn] the &#34;http2&#34; parameter of the &#34;listen&#34; directive is deprecated, use the &#34;http2&#34; directive instead&lt;/code&gt;.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Permission denied en php5-fpm.sock</title>
				<link>https://javierin.com/permission-denied-php5-fpm-sock-2/</link>
				<pubDate>Mon, 24 Oct 2016 13:11:59 +0000</pubDate>
				<guid>https://javierin.com/permission-denied-php5-fpm-sock-2/</guid>
				<description>&lt;p&gt;Hace un tiempo tuve que actualizar versiones de php5 y nginx en &lt;a href=&#34;https://www.amazon.es/dp/B08S3N34QM?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;una serie de servidores&lt;/a&gt; y según los iba actualizando empezaban a aparecer errores &lt;strong&gt;502 Bad Gateway&lt;/strong&gt; en los servidores Nginx. Por lo general los errores 502 Bad Gateway responden a un intento de conectar a un backend que no está levantado o escuchando en donde le decimos.&lt;/p&gt;&#xA;&lt;p&gt;Viendo que esto ocurría de repente, me fijé en que nginx estaba soltando los siguientes errores de &lt;strong&gt;permission denied en php5-fpm.sock&lt;/strong&gt;:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Resolver Error 504 Gateway Timeout en Nginx: Guía Definitiva 2025</title>
				<link>https://javierin.com/resolver-error-504-gateway-timeout-en-nginx/</link>
				<pubDate>Mon, 24 Oct 2016 10:54:12 +0000</pubDate>
				<guid>https://javierin.com/resolver-error-504-gateway-timeout-en-nginx/</guid>
				<description>Seguro que te suena la situación: estás trabajando en tu web, todo va como la seda, y de repente, ¡zas! Pantalla en blanco y un mensaje que te hiela la sangre: &lt;strong&gt;504 Gateway Timeout&lt;/strong&gt;. Si has llegado hasta aquí, es probable que tu servidor web sea Nginx y que este error te esté quitando el sueño.&#xA;&#xA;¡Que no cunda el pánico! En este artículo, actualizado para 2025, vamos a desglosar qué significa este error, por qué aparece y, lo más importante, cómo puedes solucionarlo. Y te lo explicaré de una forma sencilla, para que no necesites ser un administrador de sistemas con 20 años de experiencia para entenderlo. ¡Vamos al lío!&#xA;&lt;h2&gt;¿Qué es exactamente un error 504 Gateway Timeout?&lt;/h2&gt;&#xA;Imagina que Nginx es el camarero de un restaurante muy eficiente. Tú, el cliente, le pides un plato (accedes a una URL). El camarero (Nginx) va a la cocina (el backend de tu aplicación, como PHP-FPM, Node.js, Python...) y le pasa la comanda.&#xA;&#xA;El problema viene cuando la cocina tarda demasiado en preparar el plato. El camarero tiene una paciencia limitada; no puede esperar eternamente. Si la cocina no saca el plato a tiempo, el camarero vuelve a tu mesa y te dice: &#34;Lo siento, ha habido un problema de tiempo de espera en la cocina&#34;.&#xA;&#xA;Eso es, en esencia, un &lt;strong&gt;error 504 Gateway Timeout&lt;/strong&gt;. Nginx, actuando como un &lt;em&gt;gateway&lt;/em&gt; o proxy inverso, ha esperado una respuesta del proceso que está detrás (el backend), pero este no ha respondido en el tiempo estipulado. Es importante entender que &lt;strong&gt;el problema no es de Nginx en sí mismo&lt;/strong&gt;, sino de la comunicación con lo que hay detrás o del propio backend que está sobrecargado o es demasiado lento.&#xA;&lt;h2&gt;Causas más comunes del dichoso error 504&lt;/h2&gt;&#xA;Antes de tocar nada, es fundamental entender por qué puede estar pasando esto. Las causas más habituales son:&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Scripts que tardan una eternidad:&lt;/strong&gt; Tienes un proceso en tu aplicación (un script PHP, por ejemplo) que realiza una tarea muy pesada. Puede ser una consulta a la base de datos muy compleja, la importación de un archivo enorme, la generación de un informe o la comunicación con una API externa que está lenta.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;El backend está sobrecargado o &#34;muerto&#34;:&lt;/strong&gt; El servicio que ejecuta tu aplicación (normalmente PHP-FPM si usas WordPress, Laravel, etc.) está saturado. Puede que no tenga suficientes &#34;trabajadores&#34; (workers) para atender todas las peticiones o que el servidor se haya quedado sin CPU o memoria RAM.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;La configuración de timeout de Nginx es demasiado estricta:&lt;/strong&gt; A veces, el camarero es simplemente muy impaciente. Nginx tiene unos tiempos de espera por defecto que, para ciertas tareas, pueden ser demasiado cortos.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Problemas de red o firewall:&lt;/strong&gt; Si Nginx y tu aplicación están en servidores diferentes, un firewall podría estar bloqueando la conexión o puede haber problemas de red entre ellos.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;La guía paso a paso para Resolver Error 504 Gateway Timeout en Nginx&lt;/h2&gt;&#xA;Ahora que ya tenemos una idea de las posibles causas, vamos a la acción. Sigue estos pasos de forma ordenada para &lt;strong&gt;resolver el error 504 Gateway Timeout en Nginx&lt;/strong&gt;.&#xA;&lt;h3&gt;Paso 1: Aumentar los valores de timeout en Nginx&lt;/h3&gt;&#xA;Esta es la solución más rápida y común. Vamos a darle un poco más de paciencia a nuestro &#34;camarero&#34;. Para ello, necesitas editar tu fichero de configuración de Nginx. Este suele estar en &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt; o en un fichero específico para tu sitio dentro de &lt;code&gt;/etc/nginx/sites-available/&lt;/code&gt;.&#xA;&#xA;Busca el bloque &lt;code&gt;http&lt;/code&gt; o, si es específico para un sitio, el bloque &lt;code&gt;server&lt;/code&gt; o &lt;code&gt;location&lt;/code&gt;. Añade o modifica las siguientes directivas:&#xA;&#xA;```nginx&#xA;http {&#xA;# ... otras configuraciones ...&#xA;&lt;pre&gt;&lt;code&gt;proxy_connect_timeout 600s;&#xA;proxy_send_timeout 600s;&#xA;proxy_read_timeout 600s;&#xA;fastcgi_send_timeout 600s;&#xA;fastcgi_read_timeout 600s;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;}&#xA;```&#xA;&#xA;&lt;strong&gt;¿Qué significa cada una?&lt;/strong&gt;&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;code&gt;proxy_..._timeout&lt;/code&gt;: Se usan cuando Nginx actúa como proxy inverso para otro servidor web (como Apache) o una aplicación (Node.js, Python...). &lt;strong&gt;&lt;code&gt;proxy_read_timeout&lt;/code&gt;&lt;/strong&gt; es la más importante aquí, ya que define cuánto tiempo esperará Nginx a que el backend envíe una respuesta. Puedes encontrar más detalles en la &lt;a href=&#34;https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout&#34;&gt;documentación oficial de Nginx sobre el módulo proxy&lt;/a&gt;.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;code&gt;fastcgi_..._timeout&lt;/code&gt;: Son cruciales si usas PHP-FPM. &lt;code&gt;fastcgi_read_timeout&lt;/code&gt; es el equivalente a &lt;code&gt;proxy_read_timeout&lt;/code&gt; pero para FastCGI, el protocolo que Nginx usa para hablar con PHP.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;He puesto &lt;code&gt;600s&lt;/code&gt; (600 segundos o 10 minutos) como un valor alto para asegurarnos de que el problema no viene de aquí. Puedes ajustarlo a un valor más razonable una vez soluciones el problema de fondo.&#xA;&#xA;&lt;strong&gt;Importante:&lt;/strong&gt; Después de guardar los cambios, no te olvides de recargar la configuración de Nginx para que los aplique:&#xA;&#xA;&lt;code&gt;bash&#xA;sudo systemctl reload nginx&#xA;&lt;/code&gt;&#xA;&lt;h3&gt;Paso 2: Ajustar la configuración de PHP (PHP-FPM)&lt;/h3&gt;&#xA;Si has aumentado el tiempo de espera de Nginx pero el error persiste, es muy probable que el problema esté en la &#34;cocina&#34;. Aunque Nginx espere 10 minutos, si PHP tiene configurado un límite de ejecución de 30 segundos, el script morirá mucho antes y Nginx recibirá una conexión cerrada, lo que puede derivar en un 504.&#xA;&#xA;Hay dos sitios principales donde mirar:&#xA;&lt;ol&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;El fichero &lt;code&gt;php.ini&lt;/code&gt;:&lt;/strong&gt; Busca la directiva &lt;code&gt;max_execution_time&lt;/code&gt;. Este valor define el tiempo máximo en segundos que un script puede tardar en ejecutarse.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;Localiza tu &lt;code&gt;php.ini&lt;/code&gt; (la ubicación varía, pero puedes usar &lt;code&gt;php --ini&lt;/code&gt; para encontrarla).&lt;/li&gt;&#xA; &#x9;&lt;li&gt;Aumenta el valor: &lt;code&gt;max_execution_time = 300&lt;/code&gt; (5 minutos).&lt;/li&gt;&#xA; &#x9;&lt;li&gt;Puedes consultar la &lt;a href=&#34;https://www.php.net/manual/es/info.configuration.php#ini.max-execution-time&#34;&gt;documentación oficial de PHP sobre esta directiva&lt;/a&gt; para más información.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;La configuración del pool de PHP-FPM:&lt;/strong&gt; A menudo, esta configuración anula lo que ponga en &lt;code&gt;php.ini&lt;/code&gt;. El fichero suele estar en &lt;code&gt;/etc/php/[tu_version]/fpm/pool.d/www.conf&lt;/code&gt;. Busca la directiva &lt;code&gt;request_terminate_timeout&lt;/code&gt;.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;Si está definida y tiene un valor bajo, auméntala. Este valor indica el tiempo tras el cual se da por finalizada una petición. Si pones &lt;code&gt;0&lt;/code&gt;, se desactiva el límite y se usará el &lt;code&gt;max_execution_time&lt;/code&gt; de &lt;code&gt;php.ini&lt;/code&gt;.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;code&gt;request_terminate_timeout = 300&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;Después de cambiar cualquiera de estos valores, &lt;strong&gt;recuerda reiniciar el servicio de PHP-FPM&lt;/strong&gt;:&#xA;&#xA;&lt;code&gt;bash&#xA;sudo systemctl restart php8.3-fpm # Cambia &#34;8.3&#34; por tu versión de PHP&#xA;&lt;/code&gt;&#xA;&lt;h3&gt;Paso 3: Optimizar es la verdadera solución a largo plazo&lt;/h3&gt;&#xA;Aumentar los timeouts es como poner un parche. Funciona, pero si tus scripts son lentos, el problema de fondo sigue ahí. Tu web será lenta para los usuarios y consumirá más recursos del servidor. La verdadera solución para &lt;strong&gt;resolver el error 504 Gateway Timeout en Nginx&lt;/strong&gt; de forma definitiva es optimizar.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Optimiza las consultas a la base de datos:&lt;/strong&gt; Una consulta lenta es una de las causas más frecuentes. Usa herramientas como &lt;code&gt;EXPLAIN&lt;/code&gt; en SQL para analizar tus queries y asegúrate de que estás usando índices en las columnas por las que buscas o filtras.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Utiliza caché:&lt;/strong&gt; Si una página genera contenido que no cambia a menudo, ¿por qué generarlo cada vez? Usa sistemas de caché (Redis, Memcached, o incluso plugins de caché para WordPress) para servir una versión estática y ultrarrápida.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Mueve las tareas pesadas a segundo plano:&lt;/strong&gt; Si un usuario solicita una acción que tarda mucho (ej: exportar un informe de ventas de todo el año), no le hagas esperar. Utiliza colas de trabajos (background jobs). La petición del usuario simplemente añade la tarea a una cola, y un proceso en segundo plano la ejecuta. Cuando esté lista, se le puede notificar al usuario. Esto libera al proceso principal y mejora drásticamente la experiencia de usuario.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3&gt;Paso 4: Revisa los recursos del servidor y los logs&lt;/h3&gt;&#xA;Si todo lo demás falla, es hora de investigar más a fondo.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Revisa el consumo de CPU y RAM:&lt;/strong&gt; Usa comandos como &lt;code&gt;top&lt;/code&gt; o &lt;code&gt;htop&lt;/code&gt; en tu terminal. Si ves que la CPU está al 100% o que la memoria RAM está casi agotada, es probable que tu servidor no tenga suficientes recursos. Quizás sea el momento de optimizar más o de ampliar tu plan de hosting.&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;¡Mira los logs!:&lt;/strong&gt; Los archivos de registro son tus mejores amigos.&#xA;&lt;ul&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Log de errores de Nginx:&lt;/strong&gt; &lt;code&gt;/var/log/nginx/error.log&lt;/code&gt;&lt;/li&gt;&#xA; &#x9;&lt;li&gt;&lt;strong&gt;Log de errores de PHP-FPM:&lt;/strong&gt; La ubicación varía, pero suele estar en &lt;code&gt;/var/log/php8.3-fpm.log&lt;/code&gt; (cambia la versión).&lt;/li&gt;&#xA; &#x9;&lt;li&gt;Busca en los logs mensajes que coincidan con la hora en que se produjo el error 504. A menudo encontrarás pistas muy valiosas, como &#34;PHP-FPM process timed out&#34; o &#34;upstream timed out&#34;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2&gt;Conclusión: Mantén la calma y sigue los pasos&lt;/h2&gt;&#xA;El error 504 Gateway Timeout puede parecer intimidante, pero como has visto, casi siempre se reduce a un desajuste de tiempos de espera o a un cuello de botella en el rendimiento de tu aplicación.&#xA;&#xA;El enfoque correcto es ir de lo más sencillo a lo más complejo. Empieza &lt;strong&gt;aumentando los timeouts en Nginx y PHP-FPM&lt;/strong&gt; para ver si eso soluciona el problema de inmediato. Si lo hace, ¡genial! Pero no te quedes ahí. Investiga qué proceso está tardando tanto y optimízalo. Esa es la clave para tener una web robusta, rápida y libre de errores.&#xA;&#xA;Así que la próxima vez que te encuentres con este error, respira hondo, vuelve a esta guía y empieza a investigar. ¡Seguro que das con la tecla</description>
			</item>
			<item>
				<title>Sacar estadisticas de acceso por user agent con logs de nginx</title>
				<link>https://javierin.com/estadisticas-de-acceso-por-user-agent-en-nginx/</link>
				<pubDate>Mon, 11 Nov 2013 10:04:25 +0000</pubDate>
				<guid>https://javierin.com/estadisticas-de-acceso-por-user-agent-en-nginx/</guid>
				<description>&lt;p&gt;Seguro que a alguien le puede ser util sacar estadisticas de acceso por user agent en nginx para poder clasificar los dispositivos que utilizan sus visitantes.&lt;br /&gt;&#xA;Aunque pueda ser absurdo, saber el user agent de tus visitantes a partir de los logs de nginx te da una visibilidad de que tipo de gente visita tu web, si puedes necesitar una versión web de tu &lt;a href=&#34;https://www.amazon.es/dp/B0C572FQXX?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;sitio web&lt;/a&gt;, etc.&lt;/p&gt;&#xA;&lt;pre&gt;cat nombre-vhost-access.log |awk -F&#34;&#34; &#34;&#34; &#39;NF &amp;gt; 1 { print $(NF - 1); }&#39; |sort |uniq -c |sort -n&lt;/pre&gt;&#xA;&lt;p&gt;Ten presente que si usas un formato personalizado de logs, los números de columna se pueden ver desplazados. En ese caso, para obtener estadisticas de acceso por user agent en nginx deberás adaptar el comando al formato de tus logs.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Visualizar cabeceras HTTP de un servidor remoto</title>
				<link>https://javierin.com/visualizar-cabeceras-http-de-un-servidor-remoto/</link>
				<pubDate>Sat, 08 Jun 2013 13:11:16 +0000</pubDate>
				<guid>https://javierin.com/visualizar-cabeceras-http-de-un-servidor-remoto/</guid>
				<description>&lt;p&gt;Hoy me ha llamado un amigo preguntándome como saber si una petición que estaba haciendo a un &lt;a href=&#34;https://www.amazon.es/dp/B0CJQG8CWJ?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;servidor&lt;/a&gt; era correcta o no.&lt;/p&gt;&#xA;&lt;p&gt;Lo primero en lo que pensé fue en usar curl, pero luego me quedé pensando en otras formas de hacerlo, desde wget hasta netcat. Sin ir a opciones raras, aquí van 3 formas de obtener las cabeceras HTTP de respuesta:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Mirar cabeceras HTTP con Curl&lt;/strong&gt; (La primera porque es la que suelo usar) Incluyo la opción de seguir las redirecciones indicadas por el servidor.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Error en NginX &#34;could not build the server_names_hash, you should increase server_names_hash_bucket_size&#34;</title>
				<link>https://javierin.com/error-en-nginx-server_names_hash-server_names_hash_bucket_size/</link>
				<pubDate>Tue, 28 Sep 2010 12:10:54 +0000</pubDate>
				<guid>https://javierin.com/error-en-nginx-server_names_hash-server_names_hash_bucket_size/</guid>
				<description>A veces puede ocurrir cuando ponemos muchos servidores en un NginX que nos saque este error:&#xA;&#xA;&lt;code&gt;[emerg] 12299#0: could not build the server_names_hash, you should increase server_names_hash_bucket_size: 128&#xA;[emerg] 12299#0: the configuration file /etc/nginx/nginx.conf test failed&lt;/code&gt;&#xA;&#xA;Este parametro ha de ser siempre un multiplo del tamaño de cache del procesador (core). El propio error te indica cuanto poner. En mi caso yo puse 128. Esta variable va en /etc/nginx/nginx.conf</description>
			</item>
			<item>
				<title>Balanceo de carga usando NginX</title>
				<link>https://javierin.com/balanceo-de-carga-usando-nginx/</link>
				<pubDate>Tue, 28 Sep 2010 11:56:50 +0000</pubDate>
				<guid>https://javierin.com/balanceo-de-carga-usando-nginx/</guid>
				<description>&lt;p&gt;Nginx permite balancear la carga entre &lt;a href=&#34;https://www.amazon.es/dp/B0C572FQXX?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;distintos servidores backend&lt;/a&gt; cuando esta funcionando en modo proxy. Aqui pongo una &lt;strong&gt;configuracion de proxy para nginx&lt;/strong&gt; que pueden ser utiles para tener a &lt;strong&gt;nginx como balanceador&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;pre&gt;upstream &lt;span style=&#34;color: #008000&#34;&gt;servidores&lt;/span&gt;  {&#xA;  server &lt;span style=&#34;color: #ff0000&#34;&gt;127.0.0.1&lt;/span&gt; weight=5 max_fails=2 fail_timeout=10s;&#xA;  server &lt;span style=&#34;color: #ff0000&#34;&gt;127.0.0.1:80&lt;/span&gt; weight=5 max_fails=2 fail_timeout=10s;&#xA;  server &lt;span style=&#34;color: #ff0000&#34;&gt;localhost:80&lt;/span&gt; weight=5 max_fails=2 fail_timeout=10s;&#xA;}&#xA;&#xA;server {&#xA;  server_name &lt;span style=&#34;color: #ff0000&#34;&gt;www.tudominio.tld otrohost.tudominio.tld otrodominio.tld&lt;/span&gt;;&#xA;  location / {&#xA;    proxy_set_header Host $host;&#xA;    proxy_set_header X-Real-IP $remote_addr;&#xA;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&#xA;    proxy_pass  http://&lt;span style=&#34;color: #008000&#34;&gt;servidores&lt;/span&gt;;&#xA;  }&#xA;}&lt;/pre&gt;&#xA;&lt;p&gt;El parametro de configuracion Weight, que por omision es «1», indica cuantas peticiones seguidas se dirigiran a ese backend. Si es 5, pues mandará 5 a ese, luego 5 al siguiente, y asi.&lt;br /&gt;&#xA;El parametro fail_timeout indica el tiempo que esperara a enviar peticiones a un backend tras detectar un fallo y considerarlo caido.&lt;br /&gt;&#xA;El parametro max_fails indica cuantas veces ha de dar error el backend para marcarlo como caido.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Configuracion de Wordpress 3.0 para NginX</title>
				<link>https://javierin.com/configuracion-de-wordpress-3-0-para-nginx/</link>
				<pubDate>Tue, 28 Sep 2010 11:42:46 +0000</pubDate>
				<guid>https://javierin.com/configuracion-de-wordpress-3-0-para-nginx/</guid>
				<description>&lt;p&gt;Aqui va una configuracion funcional para &lt;strong&gt;WordPress 3.0 para &lt;a href=&#34;https://www.amazon.es/dp/B0BZVCMMT7?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;NginX&lt;/a&gt;&lt;/strong&gt;. Aunque no lo tengo activado, tambien soporta el modulo MultiSite. aunque pueda aparecer cortado por ser lineas demasiado largas, con copiar y pegar funciona bien.&lt;/p&gt;&#xA;&lt;pre&gt;server{&#xA;    server_name &lt;span style=&#34;color: #ff0000&#34;&gt;dominio.tld&lt;/span&gt;;&#xA;    listen 127.0.0.1:80;&#xA;    client_max_body_size 32M;&#xA;    #on server block&#xA;    ##necessary if using a multi-site plugin&#xA;    server_name_in_redirect off;&#xA;    ##necessary if running Nginx behind a reverse-proxy&#xA;    port_in_redirect off;&#xA;    access_log /var/log/nginx/&lt;span style=&#34;color: #ff0000&#34;&gt;dominio.tld&lt;/span&gt;-access.log;&#xA;    error_log /var/log/nginx/&lt;span style=&#34;color: #ff0000&#34;&gt;dominio.tld&lt;/span&gt;-error.log;&#xA;&#xA;    location / {&#xA;        root   &lt;span style=&#34;color: #ff0000&#34;&gt;/ruta/al/wordpress&lt;/span&gt;;&#xA;        index  index.html index.htm index.php;&#xA;        rewrite ^.*/files/(.*)$ /wp-includes/ms-files.php?file=$1 last;&#xA;        if (!-e $request_filename) {&#xA;            rewrite ^.+/?(/wp-.*) $1 last;&#xA;            rewrite ^.+/?(/.*.php)$ $1 last;&#xA;            rewrite ^(.+)$ /index.php?q=$1 last;&#xA;        }&#xA;    }&#xA;&#xA;    location ~* ^.+.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js)$&#xA;    {&#xA;        root &lt;span style=&#34;color: #ff0000&#34;&gt;/ruta/al/wordpress&lt;/span&gt;;&#xA;        rewrite ^/.*(/wp-.*/.*.(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$ $1 last;&#xA;        rewrite ^.*/files/(.*(html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js))$/wp-includes/ms-files.php?file=$1 last;&#xA;        expires 30d;&#xA;        break;&#xA;    }&#xA;&#xA;    location ~ wp-.*.php|wp-admin|.php$ {&#xA;        include /etc/nginx/fastcgi_params;&#xA;        fastcgi_pass  127.0.0.1:9000;&#xA;        fastcgi_index index.php;&#xA;        &lt;span style=&#34;color: #ff0000&#34;&gt;&lt;strong&gt;&lt;span style=&#34;color: #ff0000&#34;&gt;###IMPORTANTE: NO PONER / antes de fastcgi_script_name&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&#xA;        fastcgi_param  SCRIPT_FILENAME  &lt;span style=&#34;color: #ff0000&#34;&gt;/ruta/al/wordpress&lt;/span&gt;$fastcgi_script_name;&#xA;    }&#xA;}&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;small&gt;Este articulo puede contener enlaces de afiliación&lt;/small&gt;&lt;/p&gt;</description>
			</item>
			<item>
				<title>Syntax Highlight de NginX para vim</title>
				<link>https://javierin.com/sintax-highlight-de-nginx-para-vim/</link>
				<pubDate>Tue, 28 Sep 2010 11:34:11 +0000</pubDate>
				<guid>https://javierin.com/sintax-highlight-de-nginx-para-vim/</guid>
				<description>He encontrado este fichero de configuracion con el que podemos tener syntax highlighting (como se dice esto en castellano????) para las configuraciones de NginX en vim:&#xA;&lt;pre&gt;mkdir -p ~/.vim/syntax/; cd ~/.vim/syntax/;&#xA;wget -O nginx.vim http://www.vim.org/scripts/download_script.php?src_id=12990&#xA;touch ~/.vim/filetype.vim&#xA;echo &#34;au BufRead,BufNewFile /etc/nginx/* set ft=nginx&#34; &amp;gt;&amp;gt; ~/.vim/filetype.vim&#xA;&lt;/pre&gt;&#xA;Y el resultado queda asi:&#xA;&lt;a href=&#34;http://javierin.com/wp-content/uploads/2010/09/vim-nginx-syntax-highlight.png&#34;&gt;&lt;img class=&#34;aligncenter size-full wp-image-172&#34; title=&#34;vim-nginx-syntax-highlight&#34; src=&#34;http://javierin.com/wp-content/uploads/2010/09/vim-nginx-syntax-highlight.png&#34; alt=&#34;vim-nginx-syntax-highlight&#34; width=&#34;844&#34; height=&#34;422&#34; / loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&lt;/a&gt;</description>
			</item>
			<item>
				<title>Instalar Nginx en ubuntu con soporte PHP5 (php5-fpm)</title>
				<link>https://javierin.com/instalar-nginx-en-ubuntu-con-soporte-php5-php5-fpm/</link>
				<pubDate>Mon, 27 Sep 2010 09:35:09 +0000</pubDate>
				<guid>https://javierin.com/instalar-nginx-en-ubuntu-con-soporte-php5-php5-fpm/</guid>
				<description>&lt;p&gt;Hace no mucho hice el &lt;strong&gt;cambio de apache a Nginx&lt;/strong&gt; en un &lt;a href=&#34;https://www.amazon.es/dp/B0C572FQXX?tag=javierin-21&amp;linkCode=osi&amp;th=1&amp;psc=1&#34; target=&#34;_blank&#34; rel=&#34;nofollow sponsored&#34;&gt;servidor&lt;/a&gt;. La impresión general es del todo favorable. Aunque no era un servidor especialmente cargado, sí que en temas de memoria he podido apreciar que tengo mas espacio disponible para otras cosas.&lt;/p&gt;&#xA;&lt;p&gt;Vamos por pasos. Lo primero, es ponerse el repositorio de &lt;a href=&#34;http://nginx.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Nginx&lt;/a&gt;. Tenemos un repositorio estable y otro de desarrollo.&lt;/p&gt;&#xA;&lt;p&gt;Si queremos el &lt;strong&gt;repositorio de nginx estable&lt;/strong&gt;:&lt;br /&gt;&#xA;&lt;code&gt;sudo su -&lt;br /&gt;&#xA;echo &#34;deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main&#34; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;&#xA;apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C&lt;br /&gt;&#xA;apt-get update&lt;br /&gt;&#xA;apt-get install nginx&lt;/code&gt;&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
