¿Cómo configurar un proxy inverso en un VPS?
En este artículo detallado, nosotros, como administradores de sistemas experimentados, compartiremos conocimientos sobre la configuración de un proxy inverso en su servidor privado virtual (VPS). Un proxy inverso es una herramienta poderosa que le permite mejorar la seguridad, el rendimiento y la capacidad de administración de sus aplicaciones web. Veremos el proceso de instalación y configuración de un proxy inverso utilizando Nginx, uno de los servidores web más populares y confiables, que se usa con frecuencia como proxy inverso. Aprenderá cómo enrutar el tráfico, configurar SSL/TLS, almacenar en caché contenido y mucho más. Este artículo será útil tanto para usuarios principiantes como para usuarios experimentados que buscan optimizar el funcionamiento de sus servidores web. ¡Empecemos!
Contenido:
- ¿Qué es un proxy inverso y por qué es necesario?
- Elección de la herramienta: Nginx
- Instalación y configuración de Nginx
- Configuración del proxy inverso
- Seguridad: SSL/TLS
- Monitoreo y Resolución de Problemas
¿Qué es un proxy inverso y por qué es necesario?

Un proxy inverso es un servidor que actúa como intermediario entre los clientes y uno o varios servidores back-end. El cliente envía una solicitud al proxy inverso, que luego reenvía esta solicitud al servidor back-end correspondiente. La respuesta del servidor back-end se devuelve al proxy inverso, que luego la envía al cliente. Desde el punto de vista del cliente, solo interactúa con el proxy inverso, sin conocer la existencia de los servidores back-end. Esto proporciona varias ventajas importantes.
- Seguridad: El proxy inverso oculta la estructura de su red interna, sin revelar las direcciones IP de los servidores back-end. Esto dificulta que los atacantes obtengan información sobre su infraestructura. También puede actuar como un filtro, bloqueando solicitudes maliciosas y protegiendo los servidores back-end de ataques DDoS.
- Balanceo de carga: El proxy inverso puede distribuir el tráfico entrante entre varios servidores back-end, evitando la sobrecarga de un servidor y garantizando la alta disponibilidad de su aplicación.
- Almacenamiento en caché: El proxy inverso puede almacenar en caché contenido estático, como imágenes, archivos CSS y JavaScript, lo que reduce la carga en los servidores back-end y acelera la carga de páginas para los usuarios.
- Cifrado SSL/TLS: El proxy inverso puede manejar el cifrado SSL/TLS, liberando a los servidores back-end de esta tarea que consume muchos recursos. Esto también permite administrar los certificados SSL/TLS de forma centralizada.
- Simplificación de la administración: El proxy inverso simplifica la administración de aplicaciones web, lo que permite cambiar la configuración de los servidores back-end sin necesidad de realizar cambios en el lado del cliente.
Imagine que tiene una tienda online. Tiene varios servidores que procesan las solicitudes de los usuarios, procesan los pagos y administran la base de datos. Sin un proxy inverso, cada usuario se conecta directamente a uno de estos servidores. Si un servidor está sobrecargado, esto puede provocar que el sitio funcione lentamente o incluso que no esté disponible. Con un proxy inverso, todos los usuarios se conectan al servidor proxy inverso, que luego distribuye las solicitudes entre los servidores disponibles. Si un servidor falla, el proxy inverso reenvía automáticamente las solicitudes a otros servidores, lo que garantiza el funcionamiento continuo del sitio.
Ejemplo de comando para verificar la disponibilidad del servidor:
ping 192.168.1.10
Este comando enviará solicitudes de eco ICMP al servidor con la dirección IP 192.168.1.10. Si el servidor está disponible, verá respuestas del mismo. Si el servidor no está disponible, verá un mensaje de error.
Ejemplo de comando para verificar las conexiones de red:
netstat -tulnp
Este comando mostrará una lista de todas las conexiones de red activas en su servidor, incluido el protocolo, la dirección local, la dirección remota, el estado y el PID del proceso que está utilizando la conexión. Esto es útil para determinar qué puertos están abiertos y qué procesos los están utilizando.
Ejemplo de comando para verificar las rutas:
route -n
Este comando mostrará la tabla de enrutamiento del kernel. Esto es útil para determinar cómo se enruta el tráfico desde su servidor a otras redes.
El proxy inverso es un elemento clave de la infraestructura web moderna, que permite mejorar la seguridad y el rendimiento de las aplicaciones web.
John Doe, Administrador de Sistemas Senior
Ejemplo: Suponga que tiene dos servidores web: webserver1.example.com
(192.168.1.10) y webserver2.example.com
(192.168.1.11). Su proxy inverso tendrá una dirección IP externa 203.0.113.10
. Cuando un usuario intenta acceder a www.example.com
, la solicitud primero llega al proxy inverso (203.0.113.10
), que luego la reenvía a uno de los servidores web (por ejemplo, webserver1.example.com
). El usuario recibe una respuesta de webserver1.example.com
, pero desde su punto de vista se comunica directamente con www.example.com
.
Elección de la herramienta: Nginx

Nginx es un servidor web y proxy inverso de alto rendimiento, conocido por su eficiencia, estabilidad y flexibilidad. Puede manejar miles de conexiones simultáneas y consume relativamente pocos recursos. Nginx es una excelente opción para usar como proxy inverso por varias razones:
- Alto rendimiento: Nginx está diseñado para manejar una gran cantidad de conexiones simultáneas con demoras mínimas.
- Flexibilidad: Nginx ofrece una amplia gama de configuraciones y módulos, lo que permite adaptarlo a diversas tareas.
- Simplicidad de configuración: Nginx tiene una sintaxis de configuración clara y lógica.
- Soporte SSL/TLS: Nginx proporciona un excelente soporte para el cifrado SSL/TLS, lo que permite garantizar una conexión segura entre el cliente y el servidor.
- Almacenamiento en caché: Nginx puede almacenar en caché contenido estático y dinámico, lo que mejora significativamente el rendimiento de las aplicaciones web.
Existen otras alternativas, como Apache, pero Nginx a menudo supera a Apache en rendimiento, especialmente en escenarios con una gran cantidad de conexiones simultáneas. Además, la configuración de Nginx a menudo se considera más simple y clara que la configuración de Apache.
Función | Nginx | Apache |
---|---|---|
Rendimiento (conexiones concurrentes) | Alto | Medio |
Uso de recursos | Bajo | Alto |
Configuración | Relativamente simple | Más compleja |
Soporte SSL/TLS | Excelente | Bueno |
Almacenamiento en caché | Excelente | Bueno (con módulos) |
En esta guía, utilizaremos Nginx como proxy inverso. Antes de comenzar, asegúrese de tener un VPS con un sistema operativo Linux instalado (por ejemplo, Ubuntu o Debian) y acceso a la línea de comandos.
Ejemplo de comando para verificar la versión de Nginx:
nginx -v
Este comando mostrará la versión de Nginx instalado.
Ejemplo de comando para verificar la sintaxis del archivo de configuración de Nginx:
nginx -t
Este comando verificará la sintaxis de su archivo de configuración de Nginx e informará sobre errores, si los hay. Siempre ejecute este comando después de realizar cambios en el archivo de configuración.
Ejemplo de comando para reiniciar Nginx:
systemctl restart nginx
Este comando reiniciará Nginx. Es necesario hacerlo después de realizar cambios en el archivo de configuración para aplicar estos cambios.
Nginx no es solo un servidor web, es una herramienta poderosa para construir una infraestructura web confiable y de alto rendimiento.
Jane Smith, Ingeniera DevOps
Ejemplo: Está planeando implementar una nueva aplicación web. Puede usar Nginx como proxy inverso para distribuir el tráfico entre varias instancias de su aplicación, lo que garantiza una alta disponibilidad y escalabilidad. En caso de un aumento en el tráfico, simplemente puede agregar nuevas instancias de la aplicación y Nginx automáticamente comenzará a distribuir el tráfico también a ellas.
Instalación y configuración de Nginx

El proceso de instalación de Nginx depende de su sistema operativo. A continuación, se muestran las instrucciones para Ubuntu/Debian y CentOS/RHEL.
Instalación de Nginx en Ubuntu/Debian:
Primero, actualice la lista de paquetes:
sudo apt update
Luego, instale Nginx:
sudo apt install nginx
Después de la instalación, inicie Nginx y configure su inicio automático al arrancar el sistema:
sudo systemctl start nginx
sudo systemctl enable nginx
Instalación de Nginx en CentOS/RHEL:
Primero, instale el repositorio EPEL (si aún no está instalado):
sudo yum install epel-release
Luego, instale Nginx:
sudo yum install nginx
Después de la instalación, inicie Nginx y configure su inicio automático al arrancar el sistema:
sudo systemctl start nginx
sudo systemctl enable nginx
Después de la instalación, verifique el estado de Nginx para asegurarse de que esté funcionando:
sudo systemctl status nginx
Resultado esperado:
● nginx.service - The Nginx HTTP and Your VPS IP Address" class="internal-post-link">Your VPS: A Quick & Easy Guide" class="internal-post-link">reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-27 10:00:00 UTC; 10s ago
Docs: man:nginx(8)
Main PID: 1234 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
└─1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
Oct 27 10:00:00 your-vps systemd[1]: Started The Nginx HTTP and reverse proxy server.
Si Nginx está funcionando, debería ver «active (running)» en la salida del comando.
El archivo de configuración de Nginx generalmente se encuentra en /etc/nginx/nginx.conf
. Los sitios (virtual hosts) generalmente se almacenan en el directorio /etc/nginx/sites-available/
, y los enlaces simbólicos a los sitios activos se crean en el directorio /etc/nginx/sites-enabled/
.
Advertencia: Antes de realizar cambios en el archivo de configuración de Nginx, haga una copia de seguridad del mismo. Esto le permitirá restaurar fácilmente la configuración en caso de que surjan problemas.
Ejemplo: Ha instalado Nginx en su VPS. Ahora necesita configurarlo para que sirva un sitio estático. Puede crear un nuevo archivo de configuración en /etc/nginx/sites-available/mysite
y agregar la configuración para su sitio al mismo. Luego, puede crear un enlace simbólico a este archivo en /etc/nginx/sites-enabled/
y reiniciar Nginx para aplicar los cambios.
Configuración del proxy inverso

Para configurar Nginx como proxy inverso, debe crear o modificar el archivo de configuración del sitio. Por ejemplo, puede crear un nuevo archivo de configuración /etc/nginx/sites-available/example.com
y agregar la siguiente configuración al mismo:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://192.168.1.100:8080;
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;
}
}
En este ejemplo:
listen 80;
indica que Nginx escuchará el puerto 80 (HTTP).server_name example.com www.example.com;
indica los nombres de dominio para los que se procesará este sitio.proxy_pass http://192.168.1.100:8080;
indica la dirección del servidor back-end al que se reenviarán las solicitudes. En este caso, es el servidor con la dirección IP192.168.1.100
, que escucha el puerto8080
.- Las directivas
proxy_set_header
transmiten información sobre la solicitud del cliente al servidor back-end. Esto es necesario para que el servidor back-end pueda procesar correctamente las solicitudes.
Después de crear el archivo de configuración, cree un enlace simbólico al mismo en el directorio /etc/nginx/sites-enabled/
:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
Elimine el archivo de configuración estándar default
, si existe:
sudo rm /etc/nginx/sites-enabled/default
Verifique la sintaxis del archivo de configuración de Nginx:
sudo nginx -t
Reinicie Nginx para aplicar los cambios:
sudo systemctl restart nginx
Ahora, cuando un usuario accede a example.com
, la solicitud se reenviará al servidor back-end 192.168.1.100:8080
.
Balanceo de carga entre varios servidores back-end:
Para balancear la carga entre varios servidores back-end, debe definir un grupo de servidores en el archivo de configuración de Nginx:
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://backend;
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;
}
}
En este ejemplo, Nginx distribuirá el tráfico entre los servidores 192.168.1.100:8080
y 192.168.1.101:8080
. Nginx utiliza el algoritmo round-robin de forma predeterminada para distribuir el tráfico. Puede utilizar otros algoritmos, como least_conn (la menor cantidad de conexiones) o ip_hash (basado en la dirección IP del cliente).
Consejo: Utilice herramientas para monitorear la carga en los servidores back-end. Esto le permitirá determinar qué servidores están sobrecargados y, si es necesario, agregar nuevos servidores al grupo.
Documentación oficial de Nginx sobre proxy inverso.
Ejemplo: Está desarrollando una arquitectura de microservicios. Puede usar Nginx como proxy inverso para enrutar las solicitudes a diferentes microservicios según la dirección URL. Por ejemplo, las solicitudes a /api/users
pueden reenviarse al microservicio de administración de usuarios, y las solicitudes a /api/products
, al microservicio de administración de productos.
Seguridad: SSL/TLS

El cifrado SSL/TLS es necesario para garantizar la seguridad de la conexión entre el cliente y el proxy inverso. Esto protege los datos contra la interceptación y el acceso no autorizado. La forma más sencilla de obtener un certificado SSL/TLS es utilizar Let’s Encrypt, una autoridad de certificación gratuita y automatizada.
Instalación de Certbot (Let’s Encrypt):
En Ubuntu/Debian:
sudo apt install certbot python3-certbot-nginx
En CentOS/RHEL:
sudo yum install certbot python3-certbot-nginx
Obtención de un certificado SSL/TLS con Certbot:
sudo certbot --nginx -d example.com -d www.example.com
Este comando obtendrá e instalará automáticamente un certificado SSL/TLS para example.com
y www.example.com
. Certbot también configurará automáticamente Nginx para usar el certificado.
Después de obtener correctamente el certificado, Certbot le sugerirá que redirija el tráfico HTTP a HTTPS. Se recomienda elegir esta opción para garantizar la seguridad.
Su archivo de configuración de Nginx se actualizará automáticamente para incluir SSL/TLS. Ejemplo de configuración:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_pass http://192.168.1.100:8080;
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;
}
}
En este ejemplo:
- El primer bloque
server
redirige el tráfico HTTP (puerto 80) a HTTPS (puerto 443). - El segundo bloque
server
escucha el puerto 443 (HTTPS) y utiliza el certificado SSL/TLS ubicado en/etc/letsencrypt/live/example.com/fullchain.pem
y/etc/letsencrypt/live/example.com/privkey.pem
. include /etc/nginx/snippets/ssl-params.conf;
incluye los parámetros SSL/TLS recomendados por Certbot.
Certbot configura automáticamente la renovación automática de los certificados SSL/TLS. Puede verificar el estado de renovación con el comando:
sudo certbot renew --dry-run
Este comando verificará si es necesario renovar los certificados y mostrará el resultado. Si todo está bien, verá el mensaje «Congratulations, all renewals succeeded».
Advertencia: No olvide renovar los certificados SSL/TLS regularmente. Los certificados de Let’s Encrypt solo son válidos por 90 días. La renovación automática es la forma más sencilla de garantizar que sus certificados sean siempre válidos.
Ejemplo: Quiere proporcionar una conexión segura para su tienda online. Utiliza Certbot para obtener un certificado SSL/TLS para su dominio. Después de instalar el certificado, todo el tráfico entre los usuarios y su tienda se cifrará, lo que protegerá la información personal de los usuarios, como contraseñas y datos de tarjetas de crédito.
Monitoreo y Resolución de Problemas

El monitoreo y la resolución de problemas son importantes para garantizar el funcionamiento estable de su proxy inverso. A continuación, se muestran algunos comandos y herramientas útiles.
Verificación del estado de Nginx:
sudo systemctl status nginx
Este comando muestra el estado actual de Nginx, incluida información sobre si está en ejecución, cuándo se inició y qué procesos está utilizando.
Visualización de los logs de Nginx:
Los logs de Nginx se almacenan en el directorio /var/log/nginx/
. Los logs más importantes son access.log
(registro de acceso) y error.log
(registro de errores).
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Estos comandos muestran las últimas entradas en los logs de acceso y errores en tiempo real. Esto es útil para rastrear problemas y errores.
Uso de journalctl:
journalctl
es una herramienta para ver los logs del sistema. Puede usarlo para ver los logs de Nginx:
sudo journalctl -u nginx.service
Este comando mostrará todos los logs relacionados con el servicio Nginx.
Verificación de la disponibilidad de los servidores back-end:
Puede utilizar ping
o curl
para verificar la disponibilidad de los servidores back-end:
ping 192.168.1.100
curl http://192.168.1.100:8080
ping
verifica si el servidor está disponible por dirección IP. curl
envía una solicitud HTTP al servidor y verifica si devuelve una respuesta.
Verificación de la configuración de Nginx:
Siempre verifique la sintaxis del archivo de configuración de Nginx antes de reiniciarlo:
sudo nginx -t
Si la configuración contiene errores, Nginx lo informará.
Consejo: Utilice herramientas para monitorear el rendimiento de su proxy inverso, como Grafana o Prometheus. Esto le permitirá rastrear la carga del procesador, el uso de la memoria y el tráfico, e identificar problemas antes de que afecten el rendimiento.
Ejemplo: Ha notado que su sitio web funciona lentamente. Verifica los logs de Nginx y ve muchos errores 502 (Bad Gateway). Esto indica que los servidores back-end no responden a las solicitudes. Verifica la disponibilidad de los servidores back-end con ping
y curl
y descubre que uno de los servidores no está disponible. Reinicia este servidor y el problema se resuelve.
En conclusión, configurar un proxy inverso en un VPS utilizando Nginx es una forma poderosa de mejorar la seguridad, el rendimiento y la capacidad de administración de sus aplicaciones web. Siguiendo esta guía, podrá configurar correctamente un proxy inverso y garantizar el funcionamiento estable y confiable de su servidor web.
«`