附件仅服务器本地可用,但不对外公开

问题摘要

在访问 Discourse 网站 (https://techenclave.com) 的图片上传 URL 时,我遇到了 404 错误尽管图片确实存在于磁盘上并且在内部可以正确提供。我已经重新烘焙了帖子、重启了应用程序,并验证了内部服务可以正常工作,但外部访问仍然返回 404。


正常工作部分

1. 数据库中存在上传文件

使用 Rails 控制台,我确认上传文件存在且所有元数据都正确:

Upload.find_by(sha1: 'a8fbe877e685e6a6994532c946c446b1279da7d2')

输出包括

  • url: \"/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg\"
  • 文件名:IMG202506252257011.jpg
  • ID:170265
  • 使用的帖子 ID:3125774

2. 磁盘上存在文件

已验证文件存在于容器内部:

ls -l /shared/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

:check_mark: 文件存在,所有权和权限正确:
discourse:www-data-rw-r--r--


3. 公共文件夹的符号链接正常工作

public/uploads 符号链接完好无损:

ls -l /var/www/discourse/public/uploads
# =\u003e /shared/uploads

4. Discourse 可以内部提供文件

使用以下命令进行测试:

curl -I http://localhost:3000/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

结果:HTTP/1.1 200 OK


5. 帖子已重新烘焙

使用以下命令重新烘焙了帖子:

Post.find(3125774).rebake!

6. 应用程序已重启

运行了:

./launcher restart app

也尝试了:

sudo ./launcher rebuild app

(Docker 守护进程暂时不可用,但后来已修复。)


未正常工作部分

图片外部访问

访问:

https://techenclave.com/uploads/default/original/3X/a/8/a8fbe877e685e6a6994532c946c446b1279da7d2.jpeg

返回:

404 Not Found

这种情况发生在所有浏览器和隐身模式下。


需要帮助的部分

能否有人帮助确定可能导致以下情况的原因:

  • 一个可以正常工作的上传文件,通过 localhost:3000 提供,
  • 但在公共域名的外部访问时返回 404?

我还需要检查什么?是否有相关的配置或日志需要检查?

提前感谢!

即使是刚上传的图片也无法加载。出现 404

我猜这不是标准安装?这里主要就支持这些。

你是如何安装 Discourse 的?

1 个赞

下次也许可以提一下你们最近才迁移?

你们是从 temp.techenclave.com 迁移到 techenclave.com 的吗?有参考这个指南吗?

2 个赞

谢谢。

安装是 GitHub 上的标准 discourse 安装指南。

是的,我在笔记本电脑上进行了本地迁移,进行了备份,然后通过上传文件并从管理面板执行备份还原,将备份还原到了服务器上。本不应该那样做,因为尽管显示成功,但并非所有附件文件都已还原。无论如何,我从笔记本电脑上的本地安装同步了文件到服务器,以使它们保持最新。

接下来是域名迁移,正如您正确指出的那样,在测试设置一天后,从临时域名迁移到根域名。

我没有提及以上内容的原因是,即使在所有上述活动之后上传的最新文件也没有显示。尽管进行了重建。所以我认为这些信息不相关。

没有遵循该指南。但当我查看它时,我可以看到只有一步是

  1. 旧域与新域一起出现在设置中的允许 iframe 列表中。
  2. 在帖子中重新映射域,我无论如何都会稍后进行,包括在解决此问题后进行重新烘烤。所讨论的帖子已被重新烘烤,并且图像的 URL 中没有旧域。

这两个点相关吗?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.