Proxy inverso con Nginx y Apache
1. 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)
2. 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.
3. Opción 1 (recomendada) #
1sudo ss -tulpn | grep -E '80|8080'
4. 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
5. Comprobamos que cada servidor funciona #
6. Probar Apache (80) #
1curl http://localhost
Debe mostrar la página de Apache.
7. Probar Nginx (8080) #
1curl http://localhost:8080
Debe mostrar la página de Nginx.
8. Cambio de estrategia #
Para que Nginx pueda usar el puerto 80:
👉 Apache debe dejar libre el 80 👉 Apache pasará a usar el 8080
9. Cambiar Apache al puerto 8080 #
10. Editar puertos #
1sudo nano /etc/apache2/ports.conf
Cambiar:
Listen 80
por:
Listen 8080
11. Editar VirtualHost #
1sudo nano /etc/apache2/sites-available/000-default.conf
Cambiar:
<VirtualHost *:80>
por:
<VirtualHost *:8080>
12. Reiniciar Apache #
1sudo systemctl restart apache2
13. Verificar #
1sudo ss -tulpn | grep apache
Ahora debe estar en:
0.0.0.0:8080
14. Probar Apache en nuevo puerto #
1curl http://localhost:8080
Debe funcionar correctamente.
15. Configurar Nginx como proxy inverso #
Ahora Nginx puede usar el 80.
16. 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}
17. 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.).
18. Comprobar sintaxis antes de reiniciar #
MUY IMPORTANTE:
1sudo nginx -t
Debe salir:
syntax is ok
test is successful
19. Reiniciar Nginx #
1sudo systemctl restart nginx
20. Verificar resultado final #
Comprobamos puertos:
1sudo ss -tulpn | grep -E '80|8080'
Debe verse:
80 → nginx
8080 → apache2
21. 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
22. 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.
23. Resultado Final #
Arquitectura correcta:
Cliente
↓
Nginx (80)
↓
Apache (8080)
24. 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