ログファイルに「/uploads/.... にアクセスできない」というエラーが表示されます。
Can't reach '/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png' to get its dimension.
URL をウェブブラウザに入力すれば、問題なく画像にアクセスできます:
https://domain.com/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png
Completed 200 OK in 23ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 3000)
Completed 200 OK in 318ms (Views: 1.2ms | ActiveRecord: 0.0ms | Allocations: 50347)
Can't reach '/uploads/default/original/1X/fe2af548af4a22f4802ddaa54afa557ae557417c.png' to get its dimension.
Started GET "/posts/96" for 84.115.50.36 at 2020-07-04 14:15:14 +0000
Processing by PostsController#show as JSON
Parameters: {"id"=>"96"}
https の強制が ない 場合はエラーは表示されません。
Completed 200 OK in 18ms (Views: 0.3ms | ActiveRecord: 0.0ms | Allocations: 3050)
Completed 200 OK in 296ms (Views: 0.5ms | ActiveRecord: 0.0ms | Allocations: 49562)
Started GET "/posts/97" for 84.115.50.36 at 2020-07-04 14:17:43 +0000
Processing by PostsController#show as JSON
Parameters: {"id"=>"97"}
どうやら Discourse が何らかの理由で、画像をウェブサーバーから再度ダウンロードして、lightbox 処理を行っているようです。
Discourse の Docker コンテナ内でこの画像を手動でダウンロードすると、プロキシ経由ではなく、内部 IP アドレスで直接ウェブサーバーにアクセスしようとするようになります。http 経由では動作しますが、https 経由では動作しません。
ウェブサーバー自体は http のみ利用可能ですが、https でアクセスしようとするため失敗しています。
なぜ Discourse が内部アクセス(http/https なし)ではなく、ウェブサーバーから再度画像をダウンロードしているのか疑問に思っています。
編集: app.yml を domain.name.yml にリネームしたことが原因で、Docker が domain.name の DNS 名を内部 IP アドレスに変更していたことが分かりました。domain_name.yml にリネームしたところ、すべて正常に動作するようになりました。