CloudFront: sirva un sitio web estático desde S3, enrute las solicitudes de API a EC2 en un puerto personalizado

2

Tengo una configuración similar a esta pregunta .

He configurado CloudFront como CDN. En CloudFront creé dos orígenes:

  • El cubo S3 sirve contenido estático (funciona bien)
  • La máquina EC2 con algún servidor API ejecutándose en el puerto 8888

Ahora, en CloudFront, agregué un comportamiento ( precedence 0) en el que todas las solicitudes a " /api/*" se reenvían a la instancia EC2, incluidos todos los encabezados y lo que sea. Todo debería funcionar a través de HTTPS (S3 y EC2).

El problema es que las solicitudes a / api parecen agotar el tiempo de espera. No estoy seguro de dónde está el problema. Quizás esté relacionado con:

  • El puerto: ¿dónde puedo / debo reflejar que es el número de puerto 8888? También intenté definir el puerto HTTPS en la configuración de origen como " 8888" en lugar de " 443"
  • ¿Alguna otra configuración de seguridad o mapeo?

Nota : Todavía no he actualizado la configuración de DNS, que CloudFront apunta al dominio real. Actualmente, solo se utiliza el dominio generado por CloudFront.

2

Creo que el problema es el puerto. No conozco una forma de reenviar algunas solicitudes a un puerto de servidor de origen diferente a través de CloudFront. ¿Por qué no colocar un Balanceador de carga de aplicaciones frente a la instancia EC2, escuchando en el puerto estándar 443 y reenviando al puerto 8888 en el servidor? Eso también le permitiría ampliar su grupo de servidores API en el futuro.

2
  • Gracias por la respuesta. Intentaré esto la semana que viene y responderé entonces.
    david
    30 de septiembre de 2016 a las 16:37
  • Esa fue la solución más flexible, ya que Load Balancer permite muchas opciones de enrutamiento basadas en reglas.
    david
    18/10/2016 a las 1:02
0

Intentaría instalar Nginx en el servidor EC2 para aceptar las solicitudes (80/443) y enviarlas por proxy al puerto 8888. Parece una alternativa más sencilla que ejecutar ALB.