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?

DirectivaExplicación
proxy_passRedirige a Apache
proxy_set_header HostMantiene el host original
X-Real-IPEnvía la IP real del cliente
X-Forwarded-ForCadena de IPs si hay varios proxies
X-Forwarded-ProtoIndica 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