У меня здесь немного уникальная ситуация.Остановить Cloudflare от переадресации кеширования
У нас есть домен, на котором размещены загруженные пользователем носители (на которые были применены операции с изображениями) (usermedia.com). Медиа хранится в ведро Amazon S3, а Cloudflare - перед этим ведром.
Если пользователь запрашивает изображение, он может перейти на https://usermedia.com/my-image-resize-200-200.jpg.
Если этот образ существует, то она подается, в противном случае Amazon S3 делает 302 редирект (с помощью правил маршрутизации) к https://app.com/generate/my-image-resize-200-200.jpg, который генерирует уменьшенное изображение, загружает его в S3, а затем делает другое перенаправление на https://usermedia.com/my-image-resize-200-200.jpg. На этот раз файл существует в S3 и обслуживается.
Проблема заключается в том, что у нас есть прокси-сервер Cloudflare - он перенаправляет кеширование, поэтому, если носитель не существует, Cloudflare застревает в непрерывном цикле перенаправления. Я попытался использовать перенаправление 307, но проблема не устранена.
Любые идеи, как обойти эту проблему?
Вы уверены, что это CloudFlare, а не ваш браузер или Amazon, что это проблема? Я создал точную функцию на сайте, но на сервере вместо AS3. CloudFlare обрабатывает его просто отлично. Следующий вызов изображения загружает его почти мгновенно. – Jules
У меня есть аналогичная настройка «перенаправить, если не найдена» с CloudFront, а не с Cloudflare, но я использую CloudFront> HAProxy (EC2)> S3. HAProxy изменяет значение 403 на 302, устанавливает 'Location:' и устанавливает 'Cache-Control: no-cache, no-store' для решения этой проблемы ... местоположение фактически не изменилось, за исключением того, что строка запроса добавлена для указания размера действие и HAProxy отправляет их на сервер resizer. Тогда resizer фактически сохраняет значение S3, но не перенаправляет - он просто возвращает изображение, чтобы избежать возможных проблем с последовательностью S3. Но я вернусь к своим заметкам о правилах переадресации. –
@Jules делает хороший момент. S3 в конечном итоге согласуется с созданием нового объекта при одном условии: если вы уже делали 'GET' до того, как объект был создан, - и вы сделали это по дизайну. –