No se puede entregar un archivo estático usando el frente de la nube con el servidor de origen como instancia ec2

0

Tengo una aplicación web que se ejecuta en la instancia centos ec2 detrás del proxy inverso Nginx con certificación SSL (Let's Encrypt).

Tengo un archivo javascript ubicado en la URL, por ejemplo https://example.com/static/src/js/allEnd.js
, usé CloudFront para entregar el archivo estático con el servidor de origen como la instancia HTTP ec2 (sin usar el depósito s3).
Mi servidor de origen está asignado con el nombre de dominio https://example.comTengo la siguiente configuración He hecho hasta ahora:
1. www.example.com se redirige a example.com en Nginx
2. La URL de CloudFront es un alias con mi dominio personalizado, es decir, cdn.example.com
3. SSL para example.com se realiza en Nginx mientras que SSL para cdn, example.com se realiza en AWS.

Lo que he entendido hasta ahora es la primera vez que CloudFront servirá el contenido estático obteniendo el archivo de mi servidor ec2 y luego la próxima vez lo servirá desde CloudFront, pero cada vez que CloudFront redirigirá al servidor de origen para obtener el archivo estático. que CloudFront no está sirviendo en mi caso.

Aquí está el encabezado tanto para el servidor de origen como para el servidor de CloudFront.

1. Origin server (https://example.com)
get https://example.com/static/src/js/allEnd.js
HTTP/2 200
server: nginx/1.12.2
date: Sun, 12 May 2019 12:27:50 GMT
content-type: application/javascript
content-length: 168435
etag: "wzsdm-1557567525-168435-283837276"
cache-control: max-age=604800, public
expires: Sun, 19 May 2019 12:27:50 GMT
strict-transport-security: max-age=15768000; includeSubdomains; preload
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
strict-transport-security: max-age=15768000

2. CloudFront with origin as https://example.com (https://cdn.example.com)
get https://cdn.example.com/static/src/js/allEnd.js
HTTP/2 301
content-type: text/html
content-length: 185
location: https://example.com/static/src/js/allEnd.js
server: nginx/1.12.2
date: Sun, 12 May 2019 09:17:40 GMT
strict-transport-security: max-age=15768000; includeSubdomains; preload
x-frame-options: SAMEORIGIN
x-content-type-options: nosniff
strict-transport-security: max-age=15768000
age: 17
x-cache: Hit from cloudfront
via: 1.1 76d9b50884e58e2463b175e34e790838.cloudfront.net (CloudFront)
x-amz-cf-id: HBbfJXbFgKQz4eYlQSpLPQAk8pxZRKuGsb6YjFu8-AJL0JwPfs8FZw==

Como puede ver, el encabezado de respuesta que cdn.example.com (CloudFront) redirige al origen (example.com). Además, estoy confundido con lo content-type:text/htmlque debería sercontent-type: application/javascript

¿Cuáles son las posibilidades de que haya configurado mal?

Si desea saber algo más, no dude en preguntar. Gracias.

PD: Soy nuevo en la configuración de Nginx y AWS y, lo más importante, en el control de caché.

1
  • Pruebe lo que mencionó Sqlbot, pero no olvide borrar el caché después de haber realizado los cambios, CloudFront almacena en caché la respuesta 3xx. 13 de mayo de 2019 a las 6:48
0

Deberá examinar la configuración del servidor de origen y los archivos de registro para comprender por qué sucedió esto.

Verifique los registros del servidor de origen y encontrará que el servidor de origen generó originalmente esa respuesta de redireccionamiento 301, no CloudFront.

Tenga en cuenta que los encabezados de respuesta de CloudFront incluyen server: nginx/1.12.2. CloudFront no agregó esto.

El tipo de contenido se establece como está, porque su servidor de origen también devolvió HTML que dice algo como "el objeto se ha movido" o "está siendo redirigido". Los navegadores modernos normalmente no muestran ese mensaje, solo siguen la redirección.

En cualquier caso, si el servidor de origen devuelve una redirección, CloudFront no sigue la redirección devuelta por el servidor de origen, simplemente devuelve la redirección al navegador.

Una posible explicación del comportamiento que ve es que establece la Política de protocolo de origen en CloudFront en "Solo HTTP" en lugar de "Solo HTTPS" o "Visor de coincidencias", por lo que el origen está tratando de redirigir la conexión para usar HTTPS ya que ve la conexión entrante (de CloudFront) como HTTP en lugar de HTTPS.

Otra posibilidad es que haya configurado la configuración de Comportamiento de caché de CloudFront para incluir el Hostencabezado en la lista blanca para reenviarlo al origen.