Quiero configurar mi distribución de Amazon CloudFront para dirigir diferentes tipos de solicitudes a servidores de origen específicos. Quiero dirigir cada solicitud al origen apropiado en función de la ruta de la URL.
Resolución
Definición de patrones de ruta
Al crear la distribución de CloudFront, define un comportamiento de caché. Si defines más de uno, cada comportamiento debe tener un patrón de ruta único. Luego, CloudFront compara la ruta de la solicitud con los patrones de ruta en el orden en que los enumeras en la distribución.
Los siguientes ejemplos muestran cómo los patrones de ruta coinciden con tus rutas de solicitud asociadas:
- /images/* coincide con /images/cat.jpg y /images/dog.png
- /en/* coincide con /en/about y /en/contact
- /app1/* coincide con /app1/index.html, pero no con /app1app2/index.html
Importante:
- Los patrones de ruta distinguen entre mayúsculas y minúsculas. Por ejemplo, /images/cat.jpg no coincide con /Images/cat.jpg.
- CloudFront gestiona el carácter # como un identificador de fragmento y no incluye identificadores de fragmentos en la coincidencia del patrón de ruta. Crea una función de CloudFront para que coincida con las URL que contienen el carácter #.
- CloudFront normaliza las rutas antes de hacerlas coincidir. Por ejemplo, /path//file coincide con el patrón /path/.
Uso de varios orígenes
De forma predeterminada, solo puedes asociar un origen a cada patrón de ruta en un comportamiento de caché.
Para enrutar solicitudes con el mismo patrón de rutas a varios orígenes, sigue estos pasos:
- Utiliza un parámetro de cadena de consulta para diferenciar tus orígenes. Por ejemplo, usa /.jpg?origin=origin1 y /*.jpg?origin=origin2.
- Crea una distribución de CloudFront independiente para cada origen que desees usar con el mismo patrón de rutas.
- Usa CloudFront Functions o Lambda@Edge para escribir código personalizado que inspeccione la solicitud y la dirija dinámicamente a tu origen.
Enrutamiento de solicitudes en función de la ubicación geográfica
Utiliza una función de CloudFront para inspeccionar el encabezado cloudfront-viewer-country y dirigir las solicitudes a diferentes orígenes en función de la ubicación geográfica del espectador.
El siguiente código de ejemplo muestra una función de CloudFront que redirige las solicitudes de países específicos a un comportamiento de caché diferente:
function handler(event) {
var request = event.request;
var headers = request.headers;
var country = headers['cloudfront-viewer-country'];
// List of country codes to route to the first origin
var allowedCountries = ['US', 'CA'];
// Create the new URI to redirect to
var newUri = request.uri.replace('/api/', '/api-geo/');
if (allowedCountries.includes(country.value)) {
return request;
} else {
var response = {
statusCode: 302,
statusDescription: 'Found',
headers: {
location: {
value: newUri
}
}
};
return response;
}
}
La función comprueba si el país del espectador está en la lista de allowedCountries. Si el país está en la lista, la función permite que la solicitud continúe con el comportamiento /api/. Si el país no está en la lista, la función redirige la solicitud al comportamiento /api-geo/. Para realizar el redireccionamiento, la función crea una nueva URI y devuelve una respuesta de redireccionamiento 302.
Prevención de problemas de almacenamiento en caché
De forma predeterminada, CloudFront almacena en caché las respuestas en función del URI de la solicitud y de determinados encabezados. Si usas CloudFront Functions o Lambda@Edge para modificar el URI o los encabezados de la solicitud antes de que lleguen al origen, es posible que se produzcan incoherencias en el almacenamiento en caché.
Para evitar problemas de almacenamiento en caché, lleva a cabo una de las siguientes acciones:
- Si debes modificar las solicitudes solo antes de que lleguen al origen y deseas mantener tu estrategia de almacenamiento en caché actual, utiliza una función de Lambda@Edge. El evento de solicitud de origen debe desencadenar la función. Se recomienda mover la lógica de modificación de solicitudes a una función de Lambda@Edge. La función debe ejecutarse en el desencadenador de solicitud de origen que se active después de la búsqueda en la caché. La clave de caché se basa entonces en la solicitud original que proviene del espectador.
- Para crear entradas de caché independientes en función de atributos de solicitud específicos para tener más control sobre el almacenamiento en caché, crea una política de caché personalizada. Incluye encabezados de solicitud o cadenas de consulta adicionales en la clave de caché para tener claves de caché únicas para las diferentes solicitudes.
Si cambias el comportamiento de almacenamiento en caché, se recomienda eliminar los archivos en caché existentes que CloudFront ha atendido. Las actualizaciones del comportamiento de almacenamiento en caché pueden entonces surtir efecto inmediatamente.
Información relacionada
Referencia de toda la configuración de distribución
Almacenamiento en caché de contenido en función de parámetros de cadenas de consulta
Leverage Amazon CloudFront geolocation headers for state level geo-targeting (Aprovechamiento de los encabezados de geolocalización de Amazon CloudFront para la segmentación geográfica a nivel de estado)