У меня проблема со статическими файлами Django.Я использую админку Django и Django Rest Framework.Я пытаюсь обслуживать статические файлы для администратора и DRF с корзиной S3.Я могу успешно посетить URL любого файла в корзине, и он загрузится в моем браузере, и файл будет обслуживаться по HTTPS.
Я создал вложенный стек в CloudFormation для корзины S3:
Description: >
This template deploys S3 buckets for serving Django static files.
Parameters:
AppUrl:
Type: "String"
Description: "The URL for our app (e.g. mydomain.com)"
AllowedPattern: "[a-z0-9._-]+"
Resources:
AssetsBucket:
Type: "AWS::S3::Bucket"
Properties:
BucketName: !Sub ${AppUrl}-assets
AssetsBucketPolicy:
Type: "AWS::S3::BucketPolicy"
Properties:
Bucket: !Ref AssetsBucket
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: PublicReadForGetBucketObjects
Effect: "Allow"
Principal: "*"
Action: "s3:GetObject"
Resource: !Sub "${AssetsBucket.Arn}/static/*"
Когда мое приложение запускается, оно запускается collectstatic
и статические файлы перемещаются в корзину.Вот проблема, с которой я сталкиваюсь:
Когда я захожу на DRF URL с параметром запроса ?format=json
.Это возвращает ответ JSON без статических файлов из API с возможностью просмотра, и я не вижу никаких ошибок.Тем не менее, когда я захожу в браузерный API или интерфейс администратора, мне кажется, что я вижу одно из трех сообщений об ошибках.В Chrome я либо вижу два типа поведения.HTTPS удаляется из URL (зачеркнуто красным), но статические ресурсы загружаются с одной из следующих двух ошибок, отображаемых в консоли:
Access to font at 'https://mydomain.com-assets.s3.amazonaws.com/static/admin/fonts/Roboto-Bold-webfont.woff' from origin 'https://api.mydomain.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
или
GET https://mydomain.com-assets.s3.amazonaws.com/static/rest_framework/css/bootstrap.min.css net::ERR_CERT_COMMON_NAME_INVALID
В Firefox статические файлы не загружаются, HTTPS не удаляется, и я вижу следующую ошибку на вкладке сети окна отладки:
An error occured: SSL_ERROR_BAD_CERT_DOMAIN
Я пыталсядобавление политики CORS в корзину с использованием следующего XML:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Но это не решило проблему HTTPS.Есть ли что-то, чего мне не хватает, что поможет мне избавиться от перечеркнутого HTTPS?
Я уверен, что сертификат в порядке, и что проблема не связана с запросом HTTP через соединение HTTPS.Я считаю, что это проблема CORS, поэтому я не уверен, почему добавление политики корзины CORS не устранило это.
Кроме того, в моем приложении Django с CORS_ORIGIN_ALLOW_ALL = True
установлены django-cors-headers..