На данный момент при работе с S3-совместимыми объектными хранилищами используют два способа формирование URL для доступа к объектам: virtual-hosted-style и path-style.
Virtual-hosted-style (далее vhs) - это стандарт для AWS (разработавшей и развивающей протокол S3) и в том числе поэтому остальные облачные провайдеры, использующие S3, постепенно также переходят на vhs.
Path-style - запасной вариант, его продолжает поджерживать Ceph, на базе которого построены многие облачные s3 сервисы в т.ч. и Объектное хранилище Linx.
Выбор между этими двумя способами влияет на TLS-сертификаты, совместимость с клиентскими приложениями, работу со смежными сервисами (например, CDN), DNS.
|
Стиль |
Признак |
Пример URL |
|---|---|---|
|
virtual-hosted-style |
имя бакета в имени хоста - в начале URL |
https://bucketname.r1g1z1.p20s3.linx.ru/objectname.txt https://bucketname.s3.amazonaws.com/objectname.txt |
|
path-style |
имя бакета в пути запроса - после адреса endpoint |
https://r1g1z1.p20s3.linx.ru/bucketname/objectname.txt https://s3.amazonaws.com/bucketname/objectname.txt |
В vhs заголовок host равен bucketname.r1g1z1.p20s3.linx.ru, в path-style - r1g1z1.p20s3.linx.ru.
При vhs сертификат должен содержать имя бакета в SAN (или использовать wildcard *. r1g1z1.p20s3.linx.ru для Linx).
Также при vhs точки в имени бакета (например, my.bucket.com) вызывают проблемы с wildcard-сертификатами: *.example.com не покрывает my.bucket.example.com. Требует SNI и специфичного сертификата.
|
Проблема |
Virtual-hosted-style |
Path-style |
|---|---|---|
|
Точки в имени бакета |
Проблема с wildcard-сертификатами, нужен SNI |
Нет затруднений |
|
TLS-сертификат |
Нужен SAN с именем бакета или wildcard *.s3.* |
Используется сертификат эндпоинта |
|
CDN/CloudFront |
Работает хорошо "из коробки" |
Требует rewrite правил |
|
Proxy/Ingress |
Нужен preserve Host header |
Настроить проще |
|
Имя бакета с дефисом/цифрами |
Работает |
Работает |
Полностью совместим с обоими способами работы. Дополнительной настройки не требуется.
Полностью совместим, надо придерживаться следующего синтаксиса:
Path-style
s3cmd --url-mode=URL --host=r1g1z1.p20s3.linx.ru --host-bucket='' \
ls s3://mybucket/
Virtual-hosted-style
s3cmd --host-bucket='%bucket.r1g1z1.p20s3.linx.ru' ls s3://mybucket/
Полностью совместим, требуется доп конфигурация:
Path-style
в конфигурации прописать
rclone copy source: remote:s3/mybucket/myobject.txt \
--s3-endpoint=https://r1g1z1.p20s3.linx.ru
rclone автоматически использует path-style при явном endpoint
Virtual-hosted-style
Чтобы в rclone применять virtual-hosted-style, необходимо в конфигурации отключить path-style:
--s3-force-path-style=false
Полностью совместим, требуется доп конфигураци:
По умолчанию используется vhs.
Для использования path-style пройдите в раздел Правка -> Настройки -> Profiles, в открывшемся разделе найдите и отметьте "S3 (Deprecated path style requests)".
Полностью совместим, требуется доп конфигураци:
По умолчанию используется vhs.
Для использования path-style при конфигурировании профиля нажмите advanced settings, в поле Addressing model выберите Path style.
|
Ошибка |
Причина |
Решение |
|---|---|---|
|
403 Forbidden с vhs |
Неверный Host/TLS или CORS |
Проверить Host заголовок (curl -v), сертификат (SAN/SNI), политику CORS |
|
SSL mismatch |
Точки в имени бакета + wildcard cert |
Использовать специфичный сертификат с SAN или path-style |
|
404 при proxy |
Proxy не сохраняет Host |
В nginx/Ingress добавить proxy_set_header Host $host |
|
Cannot resolve DNS |
Бакет не DNS-совместим |
Переключить на path-style или изменить имя бакета |