Curso de servidores linux
¿Qué es un proxy inverso?
Un proxy inverso:
- El cliente → habla con Nginx (puerto 80)
- Nginx → redirige internamente a Apache (8080)
- Apache → responde
- Nginx → devuelve la respuesta al cliente
👉 El cliente no sabe que Apache existe
Arquitectura final:
Cliente → Nginx (80) → Apache (8080)
Comprobamos los puertos actuales
Partimos de que has hecho las practias anteriores y tienes: * Apache escuchando en el puerto 80 * Nginx escuchando en el puerto 8080
Primero verificamos qué servicio está escuchando en cada puerto.
Opción 1 (recomendada)
1sudo ss -tulpn | grep -E '80|8080'
Opción 2
1sudo netstat -tulpn | grep -E '80|8080'
Deberías ver algo como:
tcp LISTEN 0 511 0.0.0.0:80 apache2
tcp LISTEN 0 511 0.0.0.0:8080 nginx
Comprobamos que cada servidor funciona
Probar Apache (80)
1curl http://localhost
Debe mostrar la página de Apache.
Probar Nginx (8080)
1curl http://localhost:8080
Debe mostrar la página de Nginx.
Cambio de estrategia
Para que Nginx pueda usar el puerto 80:
👉 Apache debe dejar libre el 80 👉 Apache pasará a usar el 8080
Cambiar Apache al puerto 8080
Editar puertos
1sudo nano /etc/apache2/ports.conf
Cambiar:
Listen 80
por:
Listen 8080
Editar VirtualHost
1sudo nano /etc/apache2/sites-available/000-default.conf
Cambiar:
<VirtualHost *:80>
por:
<VirtualHost *:8080>
Reiniciar Apache
1sudo systemctl restart apache2
Verificar
1sudo ss -tulpn | grep apache
Ahora debe estar en:
0.0.0.0:8080
Probar Apache en nuevo puerto
1curl http://localhost:8080
Debe funcionar correctamente.
Configurar Nginx como proxy inverso
Ahora Nginx puede usar el 80.
Editar configuración Nginx
1sudo nano /etc/nginx/sites-available/default
Buscar el bloque server y modificarlo:
1server { 2 listen 80; 3 server_name localhost; 4 5 location / { 6 proxy_pass http://127.0.0.1:8080; 7 8 proxy_set_header Host $host; 9 proxy_set_header X-Real-IP $remote_addr; 10 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 11 proxy_set_header X-Forwarded-Proto $scheme; 12 } 13}
¿Qué significa cada directiva?
| Directiva | Explicación |
|---|---|
proxy_pass | Redirige a Apache |
proxy_set_header Host | Mantiene el host original |
X-Real-IP | Envía la IP real del cliente |
X-Forwarded-For | Cadena de IPs si hay varios proxies |
X-Forwarded-Proto | Indica si es http o https |
Esto es fundamental para apps modernas (Node, Spring, etc.).
Comprobar sintaxis antes de reiniciar
MUY IMPORTANTE:
1sudo nginx -t
Debe salir:
syntax is ok
test is successful
Reiniciar Nginx
1sudo systemctl restart nginx
Verificar resultado final
Comprobamos puertos:
1sudo ss -tulpn | grep -E '80|8080'
Debe verse:
80 → nginx
8080 → apache2
Probar en navegador
Abrir:
http://IP_DEL_SERVIDOR
Si todo está correcto:
👉 Se mostrará la página de Apache 👉 Pero realmente estás entrando por Nginx
Prueba técnica profesional
Podemos comprobar que Apache está detrás usando:
1curl -I http://localhost
Si Apache devuelve headers típicos:
Server: Apache/2.4.x
Entonces está funcionando el proxy.
Resultado Final
Arquitectura correcta:
Cliente
↓
Nginx (80)
↓
Apache (8080)
Opcional: Configurar el firewall
Ver si el firewall está activo
Primero comprobamos el estado:
1sudo ufw status
Puede salir:
Status: inactive
Status: active
Abrir el puerto de Apache y Nginx
Si SSH está en el puerto Apache 80 y Nginx en el 8080:
1sudo ufw allow 80/tcp 2sudo ufw allow 8080/tcp
Ahora activamos:
1sudo ufw enable