pfaffman
(Jay Pfaffman)
1
我的一个网站上的 mp4 文件返回 404。
它们设置了 authorized_extensions 为 *。文件上传正常。我在文件系统中看到了它。权限是正确的。file 命令显示它是一个 MP4 文件。Rails 中的记录看起来没问题:
[1] pry(main)> u=Upload.find(196082)
=> #<Upload:0x00005601a1b56348
id: 196082,
user_id: 1,
original_filename: "PXL_20220617_184736219.mp4",
filesize: 9328093,
width: nil,
height: nil,
url: "/uploads/default/original/3X/5/6/5679d94dfce852f780afa5fcb7f1a29d810cc8fc.mp4",
created_at: Fri, 17 Jun 2022 18:53:41.130790000 UTC +00:00,
updated_at: Fri, 17 Jun 2022 18:53:41.176664000 UTC +00:00,
sha1: "5679d94dfce852f780afa5fcb7f1a29d810cc8fc",
origin: nil,
retain_hours: nil,
extension: "mp4",
thumbnail_width: nil,
thumbnail_height: nil,
etag: nil,
secure: false,
access_control_post_id: nil,
original_sha1: nil,
verification_status: 1,
animated: nil,
security_last_changed_at: nil,
security_last_changed_reason: nil>
但是访问它返回 404。最近对 mp4 有一些新功能和错误修复,但我刚刚进行了升级,它仍然无法正常工作。我不知道还能去哪里找。
pfaffman
(Jay Pfaffman)
2
问题在于 nginx 配置只允许某些文件类型。将其移至 bug。\n\n在 discourse.conf 中有此节:\n\n # this allows us to bypass rails\n location ~* \\.(gif|png|jpg|jpeg|bmp|tif|tiff|ico|webp)$ {\n add_header Access-Control-Allow-Origin *;\n try_files $uri =404;\n }\n \n\n我在容器内的 discourse.conf 中将 mp3 和 mp4 添加到文件类型(在 webp 和 mp4 之后,现在可以正常工作)中。我在 discourse_docker config/nginx.sample.conf 中看到“bypass rails”。我不知道它如何进入 Docker 内部的模板,所以我不知道如何找出何时发生的。\n\n他们允许的文件类型是 *。我不知道是否有某种魔法可以让 mp3/mp4 在站点设置中列出它们时工作,但我看不到它如何实现。
RGJ
(Richard - Communiteq)
3
但是,如果它不绕过 Rails,下载也应该可以正常工作。
有一个路由可以处理它
get \"uploads/:site/original/:tree:sha(.:extension)\" =\u003e \"uploads#show\", constraints: { site: /\\w+/, tree: /([a-z0-9]+\\/)+/i, sha: /\\h{40}/, extension: /[a-z0-9\\._]+/i }
并且 show 方法应该只是发送文件。nginx 配置只会通过绕过 rails 来提高效率,但这并非必需。
哦…… authorized_extensions 仅用于上传授权,而不是下载(即,不在列表中的扩展名不应阻止文件下载)。
我在最新的测试通过版本上无法重现此问题,所以你可能想将其移回 Support 
编辑:我搜索了该网站,似乎你还有其他问题。
现在当我简单地使用 wget 下载文件时,它可以正常工作。
(编辑 2:这可能是因为你在 nginx 配置中添加了 mp4 扩展名?不过,对我来说,它开箱即用。)
1 个赞
pfaffman
(Jay Pfaffman)
4
谢谢!我会第一时间查看。我猜我应该尝试过安全模式!
我对那个服务工作者感到很困惑。
不是错误。
pfaffman
(Jay Pfaffman)
5
我仍然不明白那个 Service Worker 消息,但我关闭了 prevent_anons_from_downloading_files,现在它能正常工作了。看起来“prevent_anons”设置与 CDN 不兼容?
RGJ
(Richard - Communiteq)
6
但是 CDN 没有从该网站检索上传的内容?它只是指向 www 上的某个位置
1 个赞
pfaffman
(Jay Pfaffman)
7
那么我就更困惑了。我猜那篇帖子在定义 CDN 后没有被重新烘焙。
但是 https://www.turiver.com/t/argentina-la-sociedad-perdida/117158/7909 是从 CDN 加载的,并且更改设置确实解决了问题。
我在控制台中也看到了一堆 404,但这是一个标准的双容器站点,只有这些插件:
- git clone https://github.com/discourse/docker_manager.git
- git clone https://github.com/discourse/discourse-akismet.git
- git clone https://github.com/discourse/discourse-spoiler-alert.git
- git clone https://github.com/discourse/discourse-chat-integration.git
- git clone https://github.com/discourse/discourse-solved.git
- git clone https://github.com/discourse/discourse-cakeday.git
- git clone https://github.com/discourse/discourse-data-explorer.git
- git clone https://github.com/discourse/discourse-checklist.git
- git clone https://github.com/discourse/discourse-canned-replies.git
- git clone https://github.com/discourse/discourse-chat
而且我认为您正在查看 https://www.turiver.com/t/argentina-la-sociedad-perdida/117158/8017,当我查看时,它正在从 CDN 加载,无论是否登录。