S3 CDN URL ignored when uploading into posts

All of our traffic goes through CloudFront, and static content is fetched by CloudFront from one of several S3 buckets.

With uploads being sent to S3, Discourse embeds the content with a generic bucket URL despite our having s3 cdn url set. Once submitted, posts appear to use the correct URL set in s3 cdn url, although this may also be because we have DISCOURSE_CDN_URL set as well (both are set to the same URL).

The post preview window references the standard S3 URL seen in the unbaked post, though. This is a problem because we use a private ACL on files uploaded to our Discourse uploads bucket, as content on this bucket should never be accessed outside of CloudFront. The result is a broken image in the preview window.

2 лайка

Разочаровывает, что об этом сообщают уже столько лет, но исправления так и нет.

@DanielMarquard, вам удалось найти обходной путь или вы были вынуждены сделать ACL для S3 публичным?

Я не уверен, что справедливо утверждать, что это сломано, скорее, более сложная реализация не полностью поддерживается.

Загрузка в S3, как описано в документации, работает и ведёт себя корректно.

@Stephen Определённо вопрос интерпретации…

По мне так это выглядит «сломанным»: в одном случае используется URL CDN, а в другом — нет, и при этом навязывается конфигурация S3, которую AWS на самом деле не рекомендует (публичный ACL для бакета S3).

Я новичок в проекте Discourse в целом, но, конечно, могу поработать над PR.

Возможно, стоит исправить это сейчас — AWS всё серьёзнее относится к уведомлению пользователей о публичных ACL на чтение.

4 лайка

Учитывая, что в нашей текущей реализации больше нет тега IMG, например:

![image|690x298,50%](upload://eGAOR4Xy4aRM2lwPIuTokBf60jS.png)

Применить CDN к этому должно быть довольно просто, и это сэкономит трафик.

@vinothkannans, не могли бы вы исправить это, чтобы превью использовало URL CDN?

Вместо того чтобы превью показывало:

<img src="//assets-meta-cdck-prod-meta.s3.dualstack.us-west-1.amazonaws.com/original/3X/6/6/66ef078b3ef9da9aa1b3356cb21fe22a0d25eaf0.png" alt="image" class="resizable" width="345" height="149">

Мы должны показывать URL CDN, который выглядит так:

<img src="https://d11a6trkgmumsb.cloudfront.net/original/3X/6/6/66ef078b3ef9da9aa1b3356cb21fe22a0d25eaf0.png" alt="image" class="resizable" width="345" height="149">
6 лайков

Теперь это исправлено согласно коммиту ниже

6 лайков

Эта тема была автоматически закрыта через 32 часа. Новые ответы больше не принимаются.

Продолжение обсуждения из S3 CDN URL игнорируется при загрузке в сообщения:

Кажется, что эта проблема вернулась — я могу воспроизвести её здесь, на meta.

3 лайка

Можно ли это проверить, @vinothkannans или @falco?

3 лайка

В соответствии с недавними изменениями, URL загруженного файла теперь получается непосредственно из первоначального запроса на загрузку. Ранее мы получали его из эндпоинта /uploads/lookup-urls.json. Этот коммит должен исправить проблему.

5 лайков

Похоже, это исправление не охватывает пользовательские эмодзи в предпросмотре, например :allthethings:.

4 лайка

Также отсутствуют вложения, такие как экспорт данных или любые другие файлы. Они по-прежнему загружаются из S3.

Я могу это исправить!

3 лайка