Настройка Django и MinIO с использованием HTTPS на одном сервере

Я установил MinIO в качестве хранилища объектов моего приложения Django и интегрировал функциональность этого модуля на том же сервере. Я следовал инструкции в django-minio-backend, но получил следующую ошибку.

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='subdomain.domain.org', port=9000): Max retries exceeded with url: /django-backend-dev-public (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)')))

Несколько контекстных вопросов для среды установки:

  1. На сервере установлена операционная система Ubuntu 22.04 LTS. Версия MinIO - 2024-08-03T04-33-23Z. Версия Django - 5.0.6

    .
  2. Настройка MinIO отлично работала, когда я настроил ее на использование незащищенных соединений (http), а Django запускался на сервере без защиты. Веб-приложение Django могло загружать файлы и изображения на сервер MinIO без каких-либо проблем.

  3. Ошибка началась, когда я обновил настройки MinIO, чтобы он работал только с защищенными соединениями. В WebUI сервер прекрасно загружается по протоколу https (т.е. я могу войти в консоль, используя https://subdomain.domain.org:9000)

  4. Безопасная настройка осуществляется путем привязки MinIO к папке SSL сертификатов на сервере (/opt/minio/certs), которая содержит public.crt и private.key

    .

Соответствующие строки для настройки MinIO для моего веб-приложения Django в файле settings.py выглядят следующим образом:

ALLOWED_HOSTS = [
       'localhost',
       '127.0.0.1',
       'subdomain.domain.org'
]

CSRF_TRUSTED_ORIGINS = [
        'https://subdomain.domain.org',
        'https://127.0.0.1',
        'https://localhost'
]

CSRF_ALLOWED_ORIGINS = ["https://subdomain.domain.org", "https://localhost"]
CORS_ORIGINS_WHITELIST = ["https://subdomain.domain.org", "https://localhost"]


INTERNAL_IPS = ['127.0.0.1', 'localhost',  'subdomain.domain.org']

MINIO_CONSISTENCY_CHECK_ON_START = True
MINIO_ENDPOINT = 'subdomain.domain.org:9000'
MINIO_EXTERNAL_ENDPOINT = 'subdomain.domain.org:9000'
MINIO_EXTERNAL_ENDPOINT_USE_HTTPS = True 

MINIO_REGION = 'eu-west-1'  # Default is set to None, current is Ireland
MINIO_ACCESS_KEY = 'XXXXXX'
MINIO_SECRET_KEY = 'YYYYY'
MINIO_USE_HTTPS = True
MINIO_URL_EXPIRY_HOURS = timedelta(
    days=1)  # Default is 7 days (longest) if not defined
MINIO_PRIVATE_BUCKETS = ['django-backend-dev-private', ]
MINIO_PUBLIC_BUCKETS = ['django-backend-dev-public', ]
MINIO_POLICY_HOOKS: List[Tuple[str, dict]] = []

MINIO_MEDIA_FILES_BUCKET = 'bridge-media-files-bucket'
MINIO_PRIVATE_BUCKETS.append(MINIO_MEDIA_FILES_BUCKET)

MINIO_STATIC_FILES_BUCKET = 'bridge-static-files-bucket'
MINIO_PRIVATE_BUCKETS.append(MINIO_STATIC_FILES_BUCKET)
MINIO_BUCKET_CHECK_ON_SAVE = True

# SSL
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT = True
SECURE_HSTS_SECONDS = 31536000  # 1 year
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True

У кого-нибудь может возникнуть идея, почему безопасная конфигурация выдает ошибку urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='subdomain.domain.org', port=9000): Max retries exceeded with url: /django-backend-dev-public (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1006)')))

Вернуться на верх