Un proxy inverso se ubica frente a un servidor web y recibe todas las solicitudes antes de que lleguen al servidor de origen. Funciona de manera similar a un proxy de reenvío, con la excepción de que en este caso es el servidor web el que utiliza el proxy y no el usuario o el cliente. Los proxies inversos se utilizan normalmente para mejorar el rendimiento, la seguridad y la fiabilidad del servidor web.

Por ejemplo, puedes tener un sitio, que no usa WordPress, alojado en el dominio example.com del servidor A y tener tu blog en WordPress en la URL example.com/blog alojada en el servidor B. Puedes lograrlo añadiendo un proxy inverso para el servidor que aloja tu sitio principal. Puedes configurar el proxy inverso para redirigir las solicitudes del blog a un servidor diferente (por ejemplo, un host de WordPress administrado como Kinsta).

En este artículo, aprenderás los conceptos básicos de los servidores proxy inversos, cómo funcionan, cuáles son sus principales beneficios y cómo puedes usarlos para acelerar y proteger tu sitio de WordPress.

¿Ansioso? ¡Vamos a empezar!

¿Qué es un proxy inverso?

Para entender lo que es un servidor proxy inverso, primero hay que conocer su función y familiarizarse con todos sus términos relacionados.

Cuando navegas por la web normalmente introduciendo un nombre de dominio o haciendo clic en un enlace, tu navegador/dispositivo se conecta directamente al servidor del sitio web y comienza a descargar sus recursos.

Cómo funciona la navegación en Internet normalmente
Cómo funciona la navegación en Internet normalmente

Si quieres anonimizar tu dirección IP de los sitios web que visitas, entonces puedes usar un servidor proxy para enviarle todas tus solicitudes primero. Éste reenviará tus solicitudes al resolvers de DNS y luego descargará los recursos del sitio web desde su servidor de origen.

Después, pasará esos recursos a tu dispositivo. Esto se llama un proxy de reenvío.

Cómo funciona un servidor proxy de reenvío
Cómo funciona un servidor proxy de reenvío

Estás completamente oculto en el sitio web, ya que piensa que tu solicitud se origina en el proxy de reenvío.

Además de mejorar la privacidad del usuario, un proxy de reenvío se utiliza principalmente para evitar las restricciones de contenido geográfico. Por ejemplo, si deseas ver un vídeo que está bloqueado en tu región, puedes utilizar un proxy de reenvío con una dirección IP en la que el vídeo esté disponible para su visualización.

Un proxy de reenvío funciona casi de la misma manera que una Red Privada Virtual (VPN), pero son tecnologías distintas con casos de uso únicos (aunque a veces pueden superponerse).

Servidor proxy inverso vs. servidor proxy de reenvío

Un servidor proxy inverso actúa como una fachada para que el servidor de origen mantenga el anonimato y mejore la seguridad, al igual que un usuario/cliente puede utilizar un proxy de reenvío para lograr lo mismo. Garantiza que ningún usuario o cliente se comunique directamente con el servidor de origen.

Cómo funciona un servidor proxy inverso
Cómo funciona un servidor proxy inverso

La diferencia entre un proxy de reenvío y un proxy inverso es menor, pero funcionan de manera diferente.

Ambos pueden trabajar juntos, ya que no hay superposición en su funcionamiento. Normalmente, los usuarios/clientes utilizan un proxy de reenvío, mientras que los servidores de origen utilizan un proxy inverso.

Servidores proxy de avance vs. servidores proxy de retroceso
Servidores proxy de reenvío vs. servidores proxy inverso

Dado que el administrador del servidor puede controlar el funcionamiento del proxy inverso, puedes utilizarlo para habilitar muchas funciones útiles.

Enumeraremos todos sus beneficios más adelante en este post.

¿Por qué usar un proxy inverso?

Muchas empresas, especialmente las grandes empresas, utilizan sitios web a medida que se adaptan a sus necesidades específicas y no usan WordPress. Algunos ejemplos incluyen sitios web de bancos y seguros.

En otros casos, una empresa puede alojar su sitio en un servicio externo que no le permite instalar ningún software externo (por ejemplo, WordPress). Por lo general, se trata de pequeños y medianos comerciantes que utilizan una plataforma de comercio electrónico como Shopify.

Dado que WordPress tiene sólidas características de CMS, muchas empresas, incluidas las grandes empresas con sitios web a medida, pueden preferir alojar sus blogs utilizando WordPress.

Una forma de evitar este problema es instalar WordPress en el subdominio del sitio web principal y estructurar los menús de navegación de manera que los usuarios puedan cambiar fácilmente entre el sitio web principal y el blog.

Dado que los subdominios se comportan como un dominio único, puede afectar al SEO de su sitio. Aunque Google trata los subdominios y los subdirectorios por igual, se requiere un mayor esfuerzo para optimizar un sitio web para las clasificaciones de los motores de búsqueda si está alojado en un subdominio que si está alojado en un subdirectorio.

Dos enfoques para alojar blogs en un sitio web
Dos enfoques para alojar blogs en un sitio web

Google ha reafirmado que trata por igual a los subdominios y subdirectorios, pero algunos expertos en SEO no están de acuerdo con ello. Y aunque no afecte al SEO del sitio, un sitio alojado en un subdirectorio es simplemente más fácil de mantener.

Por eso puedes usar un proxy inverso para redirigir las solicitudes al blog del sitio alojado en un servidor separado. Por ejemplo, un banco puede alojar su sitio web principal en sus servidores de forma segura, pero también puede alojar su blog alimentado por WordPress por separado en un host de WordPress administrado como Kinsta.

Un ejemplo de un caso de uso de proxy inverso
Un ejemplo de un caso de uso de proxy inverso

La unificación de dos sitios diferentes bajo un mismo nombre de dominio es una de las ventajas fundamentales de la utilización de un proxy inverso. Ayuda a las marcas a mantener sus sitios organizados, profesionales y a mantener la credibilidad.

Beneficios del uso de un proxy inverso

Además del caso de uso mencionado, los proxies inversos también tienen muchos otros beneficios. En la sección siguiente se examinan algunas de sus principales ventajas.

Balancear la carga

Un solo servidor de origen no puede manejar todo el tráfico entrante de un sitio web con millones de visitantes únicos diarios. En estos casos, puede distribuir el tráfico de forma inteligente entre un grupo de muchos servidores. Por lo general, todos los servidores alojarán el mismo contenido para eliminar un único punto de fallo, haciendo el sitio web más fiable.

Un proxy inverso es una gran forma de configurar esto, ya que puede recibir el tráfico entrante antes de que llegue al servidor de origen. Si el servidor de origen está sobrecargado o cae completamente, puede distribuir el tráfico a otros servidores sin afectar la funcionalidad del sitio.

Los proxies inversos también pueden dirigir las solicitudes entrantes a varios servidores, y cada servidor realiza una función específica para la que está optimizado. El proxy inverso puede entonces recoger las respuestas de todos los servidores y entregarlas al cliente.

Dado que usamos la mayoría de los proxies inversos populares principalmente para balancear la carga, también se les conoce como Balanceadores de Carga.

Equilibrio de Carga de Servidor Global (Global Server Load Balancing – GSLB)

GSLB es un método avanzado de balanceo de carga para distribuir el tráfico del sitio web entre muchos servidores colocados estratégicamente alrededor del mundo. Típicamente se hace a través de la técnica de enrutamiento anycast, donde el proxy inverso escoge el nodo del servidor basado en el tiempo de viaje más rápido entre el cliente y el servidor.

El GSLB no solo aumenta considerablemente la fiabilidad y seguridad del sitio, sino que también reduce la latencia y los tiempos de carga, mejorando así la experiencia del usuario. Puede utilizar GSLB con otras técnicas de optimización de la red como Spoon Feeding para liberar aún más los recursos computacionales de los servidores de origen.

Aunque puedes configurar el Equilibrio de Carga del Servidor Global manualmente en tu servidor, normalmente se encarga de ello un CDN dedicado como Cloudflare y KeyCDN (que también alimenta el CDN de Kinsta). Kinsta sirve todos los sitios web alojados con él a través de un Balanceador de Carga potenciado por la Plataforma de Nube de Google.

Seguridad mejorada

Los proxies inversos pueden ocultar la dirección IP y otras características de los servidores de origen. Así, el servidor de origen de tu sitio web puede mantener mejor su anonimato, aumentando su seguridad de manera significativa.

Dado que el proxy inverso recibirá todo el tráfico antes de que llegue al servidor principal, a cualquier atacante o pirata informático le resultará más difícil atacar tu sitio web con amenazas de seguridad como los ataques DDoS.

Puedes usar un estricto cortafuegos para endurecer el proxy inverso con una mayor seguridad contra los ataques cibernéticos comunes. Sin un proxy inverso instalado, es difícil eliminar el malware o comenzar a eliminarlo.

Un proxy inverso como HAProxy puede añadir la autenticación básica de acceso HTTP a un servidor web que no lo tiene activado. También puedes utilizar un proxy inverso para agregar una autenticación centralizada para varios tipos de solicitudes.

Potente Caching

Puede utilizar un proxy inverso para propósitos de aceleración de la web, almacenando en caché tanto el contenido estático como el dinámico. Esto puede reducir la carga en el servidor de origen, resultando en un sitio web más rápido.

Por ejemplo, si tu servidor de origen está en los Estados Unidos y un usuario de Europa visita tu sitio web, entonces puedes servir una versión en caché de tu sitio desde un servidor proxy inverso en Europa. Dado que el proxy inverso está más cerca del usuario que el servidor de origen, el sitio web tardará menos tiempo en cargarse, por lo que tendrá un rendimiento excelente.

Varnish y Nginx FastCGI son ejemplos destacados de proxies inversos que se utilizan para el almacenamiento en caché de contenido web. Si tu sitio está alojado en Kinsta, no tienes que preocuparte por el caching, ya que Kinsta se encarga de todo el trabajo de caching por ti.

Compresión superior

Las respuestas del servidor consumen mucho ancho de banda. Comprimir las respuestas del servidor (por ejemplo, con gzip) antes de enviarlas al cliente puede reducir la cantidad de ancho de banda necesario, acelerando las respuestas del servidor a través de la red.

Un proxy inverso es ideal para comprimir las respuestas del servidor, ya que se sitúa entre los servidores de origen y el cliente.

Cifrado SSL optimizado

Cifrar y descifrar las solicitudes SSL/TLS para cada cliente puede ser muy difícil xpara el servidor de origen. Un proxy inverso puede hacer esta tarea para liberar los recursos del servidor de origen para otras tareas importantes, como servir contenido.

Otra ventaja de descargar el cifrado y descifrado SSL/TSL es reducir la latencia para los clientes que están geográficamente distantes del servidor de origen.

También puedes optar por un proxy inverso con hardware de aceleración SSL/TLS especializado para optimizar aún más esta tarea. Este proxy inverso se llama proxy de terminación SSL/TLS. Algunos servidores como Varnish no soportan los protocolos SSL/TSL, por lo que un proxy de terminación inversa SSL/TSL puede ayudar a asegurar el tráfico que pasa a través de ellos.

Mejores pruebas A/B

La mayoría de las herramientas de prueba A/B requieren el uso de librerías externas de JavaScript para cargar sus funciones. Sin embargo, la carga de scripts de terceros puede ralentizar los tiempos de carga de la página y crear una experiencia mala para los usuarios.

En su lugar, puedes utilizar un proxy inverso para crear dos flujos separados a nivel de servidor. Por ejemplo, puedes usar los split_clientes de Nginx o los métodos de sticky routes para controlar la redirección del tráfico.

Puedes consultar los tutoriales de Nginx y freeCodeCamp para aprender más sobre la realización de pruebas A/B con un proxy inverso.

Monitoreo y registro del tráfico

Un proxy inverso captura cualquier petición que pase por él. Por lo tanto, puedes usarlos como un centro de control para monitorear y registrar el tráfico. Incluso si utilizas varios servidores web para alojar todos los componentes de tu sitio web, el uso de un proxy inverso facilitará la supervisión de todos los datos entrantes y salientes de tu sitio.

Los proxies inversos más populares

Según W3Techs, casi el 83% de los sitios web no usan servicios de proxy inverso que monitorean.

Estadísticas de proxies inversos utilizados por los sitios web (Fuente: W3Techs.com)
Estadísticas de proxies inversos utilizados por los sitios web (Fuente: W3Techs.com)

Del 17% de los sitios web que usan un proxy inverso (enumerados arriba), notarás que la mayoría de ellos son CDNs. Eso es porque la mayoría de los proxies inversos ocultan su existencia por defecto como medida de seguridad. Por lo tanto, no puedes confiar en los servicios de monitoreo de sitios web como W3Techs para encontrar cuáles son los proxies inversos más populares.

Por nuestra investigación y experiencia, los proxies inversos más populares en uso hoy en día son:

Nginx

Nginx es un servidor web de código abierto que también puede servir como proxy inverso. Además de ser usado para alojar sitios web, es también una de las soluciones de proxy inverso y balanceo de carga más utilizadas. Según Netcraft, más de 479 millones de servidores web utilizaban Nginx en diciembre de 2019, lo que lo convierte en el líder del mercado de servidores web.

Cuota de mercado del servidor web de todos los sitios
Cuota de mercado de los servidores web de todos los sitios (Fuente: Netcraft)

Nginx proporciona todos los beneficios del proxy inverso discutidos anteriormente, y más. Mejora el rendimiento, la seguridad, la fiabilidad y la escalabilidad de la web. Puedes configurar Nginx usando su archivo de configuración, el cual es también recargable en caliente. En Kinsta, el proxy inverso Nginx es uno de los muchos complementos premium que puedes utilizar.

Pero también puedes usar Nginx Plus, una oferta comercial, para obtener acceso a las opciones de configuración basadas en API y otras características adecuadas para los sitios web de grandes empresas.

Kinsta alimenta todas sus páginas web con Nginx. Se ha clasificado en el estado de alojamiento web de nivel superior de Review Signal en todas las categorías en las que ha competido. Otras grandes compañías que usan Nginx son MaxCDN, Cloudflare y Netflix.

Configurar Nginx como un proxy inverso básico es simple. Nginx también te proporciona varias directivas para personalizar el proxy inverso de tu servidor según tus requerimientos. Discutiremos cómo hacer esto en una sección posterior. Si eres cliente de Kinsta, también aprenderás a utilizar un proxy inverso para los sitios web alojados en Kinsta en la misma sección.

Varnish

Varnish es un proxy inverso HTTP de código abierto con un motor de caché incorporado. Está diseñado principalmente para sitios web de alto tráfico que sirven contenido dinámico. También puedes usar Varnish como balanceador de carga, un cortafuegos de aplicaciones web (WAF) y un servidor de autenticación y autorización de bordes.

Funciona en todas las versiones modernas de Linux y FreeBSD, siendo usado principalmente como fachada para los servidores web Nginx o Apache. El poderoso y altamente flexible Varnish Configuration Language (VCL) te permite definir varias características como el manejo de solicitudes HTTP, almacenamiento en caché y conexión a uno o más servidores web.

Por esta razón, muchos CDNs usan el Varnish como su principal base para entregar el contenido rápidamente.

El Varnish también es compatible con Edge Side Includes (ESI), un lenguaje que ayuda a reutilizar secciones de una página web en otras páginas web. Si tu sitio web utiliza mucho contenido repetido en diferentes páginas, ESI puede ayudarte a acelerar los tiempos de carga de la página de tu sitio mediante el almacenamiento en caché de las secciones más utilizadas.

Puedes extender el Varnish con sus varios módulos (VMODs). Dirígete al tutorial oficial de Varnish para aprender a configurar Varnish como un proxy inverso para WordPress.

Apache Traffic Server

Apache Traffic Server es un servidor proxy de cacheo de código abierto. Es popular por sus características rápidas y escalables. Fue un producto comercial desarrollado por Yahoo! hace mucho tiempo, pero lo hicieron de código abierto y lo donaron a la Fundación Apache para su mantenimiento.

Varias de las principales redes de contenido y CDNs como Comcast, Akamai, LinkedIn, Yahoo y Apple utilizan el Apache Traffic Server para potenciar su tecnología.

También puedes usar el servidor Apache HTTP (Apache httpd), un demonio de servidor HTTP, para configurar un proxy inverso en tu servidor web. Además de actuar como un servidor web básico, también te ayuda a servir contenido estático y dinámico a los usuarios. Más adelante en este artículo aprenderás a configurar Apache como proxy inverso.

HAProxy

HAProxy es un proxy inverso y balanceador de carga de código abierto. Está diseñado para integrarse con la mayoría de las arquitecturas de servidores web existentes, incluyendo distribuciones Linux y plataformas en la nube. Similar a Nginx, HAProxy utiliza un modelo de E/S basado en eventos y soporta la división de solicitudes a través de múltiples procesos de trabajo.

Para las peticiones HTTP, HAProxy funciona excepcionalmente bien incluso bajo cargas pesadas. Algunos de los sitios web de mayor tráfico en Internet como Airbnb, Reddit, Instagram, Stack Overflow, Tumblr, GitHub, e Imgur usan HAProxy para entregar sus sitios web de manera eficiente.

Discutir cómo implementar la HAProxy está fuera del alcance de este artículo, pero puedes consultar su documentación para entender cómo funciona.

Nota: Traefik y Envoy son otras dos alternativas de código abierto a HAProxy. Ambos son proxies inversos de alto rendimiento y balanceadores de carga con muchas características avanzadas.

Otros proxies inversos populares son el equilibrador de carga elástica AWS, GLBC, DigitalOcean Load Balancer y el Google Cloud Load Balancer. Para una lista exhaustiva de los principales proxies inversos y balanceadores de carga que se utilizan hoy en día, puedes consultar Stackshare.io.

Proxy Inverso: Casos de uso para sitios de WordPress

Hay principalmente tres casos de uso para usar un proxy inverso para los sitios de WordPress, incluidos los sitios alojados en Kinsta.

Cargando un
Cargando un «Sitio Principal» vs. un «Sitio Proxy»

Solo usaremos Nginx para este ejemplo, ya que es el proxy inverso más popular usado para los sitios de WordPress hoy en día. Pero los mismos principios básicos se aplicarán a otros proxies inversos.

Los proxies inversos son a menudo difíciles de instalar, configurar y soportar. Por este motivo, Kinsta ofrece una suscripción adicional mensual de 50 dólares por cada proxy inverso que necesites ayuda para su configuración. Puedes contactar con el equipo de soporte de Kinsta para obtener más detalles.

1. Sitios principales y proxies están alojados en el mismo servidor

Si tanto el sitio principal como el sitio proxy están alojados en el mismo servidor, el sitio principal puede funcionar en una instalación de WordPress, mientras que una instalación separada de WordPress alimenta el sitio proxy.

Como tendrás acceso tanto a los sitios como a tu servidor web compartido, puedes configurar las reglas del proxy inverso para el sitio principal y luego configurar el sitio proxy para que se cargue desde el proxy inverso.

Si estás alojando estos dos sitios en Kinsta, puedes contactar con el equipo de soporte de Kinsta y pedirles que te configuren el proxy inverso. Este es el procedimiento que debes seguir:

  • Asegúrate de que tanto el sitio principal como el sitio proxy estén alojados en Kinsta. Si no lo están, entonces puedes migrar ambos sitios al entorno de Kinsta, ya sea manualmente o enviando una solicitud de migración.
  • Abre un ticket de soporte y proporciona al equipo de soporte de Kinsta una descripción clara de la configuración del dominio. Nos llevará aproximadamente un día laboral configurar el proxy inverso.
  • Kinsta establecerá las reglas de proxy inverso relevantes en el sitio principal y configurará el sitio proxy para que se cargue sobre el proxy inverso.

Aquí están las instrucciones estándar de proxy inverso de Nginx usadas por Kinsta para cargar un sitio de subdirectorios sobre un proxy inverso:

location ^~ /subfolder/ {
proxy_pass http://subfolder.domain.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}

En el código anterior, debes reemplazar el marcador de posición /subfolder/ con el nombre del subdirectorio actual (por ejemplo, /blog/, /shop/). Además, el subdominio http://subfolder.domain.com debe coincidir con la URL utilizada para apuntar el proxy inverso hacia el sitio proxy.

La instrucción location incluye los símbolos caret y tilde (^~) para decirle a Nginx que si encuentra la cadena definida, debe dejar de buscar más coincidencias y usar las directivas listadas aquí. Aprende más sobre las instrucciones de proxy inverso de Nginx en su documentación.
A continuación, tienes que configurar el sitio proxy para cargar sobre el proxy inverso. Estos son los pasos estándar seguidos por Kinsta para configurar el sitio proxy:

  • Crea un subdirectorio en la ruta desde donde se carga el sitio proxy. Todos los archivos del sitio proxies son movidos a este subdirectorio.
  • Actualiza los archivos de configuración del servidor web para definir el nuevo subdirectorio como el directorio raíz del sitio proxy. Además, es necesario añadir una regla de reescritura para eliminar el subdirectorio de la URI de la solicitud para cada solicitud entrante.
  • Actualiza todos los URLs en la base de datos del sitio proxy para que coincidan con los URLs del sitio en vivo (por ejemplo, example.com/blog).
  • Edita el archivo wp-config.php del sitio proxy con la definición $_SERVER['HTTP_HOST'], apuntando a la URL del sitio principal.
  • Si estás usando un certificado SSL, entonces necesitas definir reglas estrictas en el archivo wp-config.php para evitar los bucles de redirección.

Nota: Un sitio proxied no puede crear URLs que dupliquen el mismo subdirectorio bajo el cual se carga el sitio proxied. Por ejemplo, un sitio proxied en example.com/blog no puede crear una página o directorio en example.com/blog/blog.

2. Solo el sitio proxy está alojado en tu servidor

Si solo tienes acceso al sitio proxy y a su servidor web, entonces necesitas contactar al administrador del servidor del sitio principal y pedirle que establezca las reglas del proxy inverso para ti.

Para ello, debes seguir los mismos pasos indicados anteriormente, excepto que en este caso debes configurar las reglas en dos servidores diferentes.

Para alojar tu sitio proxy con Kinsta, añade un dominio al sitio que apunte al proxy inverso. Normalmente, el subdominio se adapta a este propósito (por ejemplo, blog.example.com) para cargar el sitio proxied a través de un enlace de subdirectorio (por ejemplo, example.com/blog).

Después de configurar tu sitio proxy en Kinsta, puedes contactar con el equipo de soporte de Kinsta para configurar el sitio proxy para que se cargue de proxy inverso. En este momento, nuestro equipo de soporte requerirá la IP real de tu servidor para completar el proceso de configuración de manera que cuente las visitas correctamente. Si no puedes proporcionar una IP estática debido a restricciones de IP dinámica de ciertos proveedores (por ejemplo, AWS CloudFront), tu plan será convertido a un plan comparable basado en el ancho de banda.

Por último, la configuración del proxy inverso en tu servidor queda fuera del alcance del soporte de Kinsta, ya que sólo el administrador del servidor puede encargarse de ello.

3. Solo el sitio principal está alojado en tu servidor

Si solo tienes acceso al sitio principal y a su servidor web, entonces debes configurar el proxy inverso y configurar sus reglas para cargar el sitio proxy desde un host externo. La instalación y configuración del sitio proxy para cargar sobre el proxy inverso es responsabilidad del administrador del servidor secundario.

El hecho de que tu sitio principal esté alojado en Kinsta te dará acceso al equipo de apoyo de Kinsta. Puedes subir un ticket de soporte con ellos para añadir las reglas estándar de proxy inverso que se listaron anteriormente en este artículo. También puedes hacer que se añadan personalizaciones adicionales a esas reglas si es necesario.

En este escenario, eres totalmente responsable de configurar el sitio proxy para cargarlo correctamente sobre el proxy inverso.

Cómo configurar Nginx como un proxy inverso

Si Kinsta no aloja tu sitio web y tú administras tus servidores, entonces debes configurar el proxy inverso por ti mismo y configurarlo para que apunte hacia el sitio proxy.

Dependiendo del sistema operativo de tu servidor web, puedes instalar Nginx de forma diferente. Para las distribuciones de Linux, puedes usar varios paquetes de Nginx basados en la versión de su distribución de Linux.

En el siguiente ejemplo, hemos instalado el sitio principal en el nombre de dominio example.com, mientras que el sitio proxied de WordPress está instalado en el subdominio blog.domain.com. Ambos están alimentados por Apache en un servidor web que funciona en Ubuntu 18.04. Instalaremos y configuraremos Nginx como proxy inverso en el servidor principal.

Para empezar, accede a la terminal de tu servidor a través de SSH. Luego usa el comando apt-get para actualizar la lista de paquetes de tu distribución e instalar Nginx en tu servidor web.

sudo apt update
sudo apt install nginx

A continuación, debes configurar Nginx para que haga peticiones de proxy para los dominios alojados en Apache. Para ello, crea un nuevo archivo de host virtual. Aquí, estoy usando el nano editor para añadir el código, pero puedes usar cualquier editor de código de tu elección.

sudo nano /etc/nginx/sites-available/example.com.conf

Luego establece las directivas de Nginx para que reenvíe las solicitudes a Apache agregando el siguiente server {...} y bloques de location:

server {
listen      80;
server_name example.com www.example.com;
index       index.php;
root        /var/www/example.com/public    # fallback for index.php
location / {
try_files $uri $uri/ /index.php?$query_string;
}location /blog {
proxy_pass http://blog.domain.com;proxy_http_version                 1.1;
proxy_cache_bypass                 $http_upgrade;

# Proxy headers
proxy_set_header Upgrade           $http_upgrade;
proxy_set_header Connection        "upgrade";
proxy_set_header Host              $host;
proxy_set_header X-Real-IP         $remote_addr;
proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host  $host;
proxy_set_header X-Forwarded-Port  $server_port;

# Proxy timeouts
proxy_connect_timeout              60s;
proxy_send_timeout                 60s;
proxy_read_timeout                 60s;
}

En el código anterior, estoy definiendo un subdirectorio example.com/blog link que será servido por el servidor Apache. Asegúrate de usar la dirección IP pública (o URL) de tu sitio web proxy en la directiva proxy_pass. En mi caso, mi sitio web proxy está alojado en el subdominio blog.domain.com.

Nota: Asegúrate de que el sitio web proxy está instalado y listo para ser servido antes de hacer cualquier cambio.

Puedes aprender más sobre todas las directivas de proxy inverso usadas aquí en el índice detallado de directivas de Nginx.

Guarda el archivo del host virtual. Luego activa el nuevo host virtual creando un enlace simbólico para los archivos llamados example.com.conf en los directorios /etc/nginx/sites-available y /etc/nginx/sites-enabled.

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/example.com.conf

Después de eso, prueba a Nginx por si hay algún error de configuración.

sudo nginx -t

Si no hay errores, recarga Nginx para aplicar los cambios.

sudo systemctl reload nginx

Ahora has configurado con éxito a Nginx para que trabaje como un proxy inverso. Para confirmarlo, puedes usar la función phpinfo() para comprobar las variables PHP cargadas cuando visitas tu sitio proxy.

Bajo las variables PHP SERVER_SOFTWARE y DOCUMENT_ROOT, verás que Apache sirve este dominio en el backend. Pero las variables HTTP_X_REAL_IP y HTTP_X_FORWARDED_FOR PHP confirman que Nginx fue usado como proxy inverso para reenviar las solicitudes.

Puedes acelerar el servicio de tu sitio de WordPress sobre Nginx usando los módulos fastcgi_cache y ngx_cache_purge. Mientras que el primer módulo guardará en caché tu sitio, el segundo módulo purgará automáticamente el caché basado en eventos específicos (por ejemplo, publicar o editar un post/página de WordPress).

Puedes usar el plugin WordPress del Controlador de Caché de Nginx para controlar el caché del servidor proxy de Nginx directamente desde tu panel de administración de WordPress. Si estás usando una instalación multisitio de WordPress, entonces puedes usar el plugin Nginx Helper para hacer lo mismo.

Revisa la documentación principal de Nginx y la guía de configuración de Nginx WordPress para una visión general detallada de cómo trabajar con Nginx y WordPress.

Cómo configurar el Apache como un proxy inverso

Antes de comenzar, asegúrate de que tienes dos sitios web en funcionamiento en example.com y blog.domain.com. El primer sitio web puede ser o no un sitio de WordPress, pero el segundo debe ser un sitio de WordPress, ya que se utiliza principalmente para cargar el blog del dominio raíz en el enlace del subdirectorio example.com/blog.

Comienza a configurar Apache abriendo la terminal de tu servidor vía SSH y habilitando el módulo proxy de Apache.

sudo a2enmod proxy proxy_http ssl

Al ejecutar el comando anterior, lo más probable es que se reinicie Apache para recargar las directivas recién definidas.

A continuación, edita el archivo de hosts virtuales de tu servidor principal para crear un proxy inverso. Aquí está el código que necesitas añadir:

<VirtualHost *>
DocumentRoot /var/www/app/public
SSLProxyEngine On    ProxyRequests off
ProxyPass /blog http://blog.domain.com
ProxyPassReverse /blog  http://blog.domain.com
</VirtualHost>

La directiva ProxyPass creará un proxy inverso para las rutas especificadas, mientras que la directiva ProxyPassReverse interceptará las cabeceras de respuesta HTTP enviadas a través de este proxy inverso y las reescribirá para que coincidan con el servidor Apache.

Después de guardar el archivo, debes editar tu archivo wp-config.php añadiendo el siguiente código justo antes de la línea que te pide que dejes de editar.

# ProxyPass Settings
# overrides the variables below to ensure that any
# request to /blog/* subdirectory is taken care of properly
$_SERVER['REQUEST_URI'] = '/blog' . $_SERVER['REQUEST_URI'];
$_SERVER['SCRIPT_NAME'] = '/blog' . $_SERVER['SCRIPT_NAME'];
$_SERVER['PHP_SELF'] = '/blog' . $_SERVER['PHP_SELF'];

Finalmente, necesitas actualizar base de datos de tu sitio de WordPress para añadir los valores de configuración para el enlace del subdirectorio /blog. Puedes hacerlo ejecutando la siguiente consulta SQL:

UPDATE wp_options SET option_value = 'https://www.example.com/blog' WHERE option_name IN( 'siteurl', 'home' );

Ahora deberías poder visitar la URL de https://www.example.com/blog y hacer que tu sitio de WordPress alojado en el subdominio http://blog.domain.com se cargue sin cambiar su URL. Puedes seguir usando WordPress como siempre para navegar, escribir, editar y administrar tu sitio.

Limitaciones de un proxy inverso

  • Un proxy inverso plantea un riesgo de seguridad importante, ya que puede leer y cambiar todo el tráfico que pasa por él. Si estás pasando tráfico HTTPS a través del proxy inverso, entonces necesitas desencriptar y volver a encriptar los datos que pasan. Esto significa que debes tener las claves privadas del certificado SSL/TLS. Por lo tanto, alguien malintencionado puede comprometer tu proxy inverso, puede registrar las contraseñas e inyectar malware en tus sitios web.
  • Si tu o tus usuarios no pueden acceder a tu servidor principal directamente, entonces el uso de un proxy inverso puede llevar a un único punto de fallo. Por ejemplo, si utilizas un proxy inverso como una fachada para servir a varios dominios, su interrupción puede provocar que todos los dominios se desconecten simultáneamente.
  • Si te basas en un proxy inverso de un tercero (por ejemplo, Cloudflare), entonces le estás entregando la información sensible de tu sitio. Aunque son de confianza, no puedes predecir a qué puede conducir.
  • La restauración de copias de seguridad o el impulso de sitios de escenificación en vivo en sitios web que se cargan a través de un proxy inverso puede hacer que el sitio proxy deje de cargarse correctamente.

Eligir entre un CDN y un proxy inverso

Los CDN son una forma avanzada de proxy inverso con la mayor parte de la configuración y el mantenimiento a cargo de un tercero. Pueden proporcionar increíbles beneficios de rendimiento a tu sitio de WordPress con un esfuerzo menor de tu parte.

Los CDN no solo almacenan en caché el contenido y lo sirven rápidamente a los usuarios, sino que también reducen la carga de tus servidores de origen, disminuyen los costos de ancho de banda, proporcionan una capa adicional de seguridad, impulsan el SEO de tu sitio y te ayudan a escalar mejor tu sitio web.

Notarás que la mayoría de los beneficios proporcionados por los CDN son los mismos que los proporcionados por los proxies inversos. Entonces, ¿deberías elegir un CDN en lugar de un reverse proxy, o viceversa?

No hay razón para que te conformes con una sola. Si ya tienes instalado un proxy inverso, seguirás viendo ganancias de velocidad y rendimiento al usar un CDN. Ambas cachés tienen una buena capa, y si tienes alguna necesidad de manejo de solicitudes únicas (por ejemplo, contenido dinámico, comercio electrónico), entonces puedes configurarlo fácilmente con algunos encabezados personalizados transmitidos por el CDN o el proxy inverso.

Resumen

WordPress es muy flexible. Puedes usarlo como un blog, un sitio de comercio electrónico o incluso un Sistema de Gestión de Aprendizaje. En la mayoría de los casos, puedes personalizar WordPress para que se adapte a tus necesidades particulares.

Sin embargo, a veces puede que tengas que utilizar un dominio separado o un servidor secundario para alojar un sitio adicional. Como se ha mencionado anteriormente, puede deberse a la utilización de pilas de tecnología diferente para un sitio de una gran empresa o al lanzamiento de un blog de WordPress para un sitio preexistente que no sea de WordPress.

Un proxy inverso puede ayudar en ambos casos, ayudándote a sacar el máximo provecho de WordPress sin tener que abandonar el sitio web principal y empezar de nuevo.

Salman Ravoof

Salman Ravoof es desarrollador web autodidacta, escritor, creador y un gran admirador del Software Libre y de Código Abierto (FOSS, Free and Open Source Software). Además de la tecnología, le apasionan la ciencia, la filosofía, la fotografía, las artes, los gatos y la comida. Obtén más información sobre él en su sitio web, y conecta con Salman en X.