1MBのPDFをアップロードすると「アップロードが大きすぎます。最大4MBです」というエラーが表示されます

「アップロードが大きすぎます。最大サイズは4MBです」というエラーメッセージが4MB未満のPDFファイルをアップロードする際に表示されます。
以下に私のテスト結果を示します。

  • 68KBのPDFは、予想通り正常にアップロードされます。
  • 2.3MBのJPGは、予想通り正常にアップロードされます。
  • PDFファイル(2.3MB)は、2.3MBですがエラーが発生します!
  • 3.6MBのJPGは、予想通り正常にアップロードされます。

奇妙なことに、meta.discourse.orgではアップロードが正常に完了します。設定を変更されたのかもしれません。

max を含む設定は変更していません。

セルフホストインスタンス(https://discuss.afpy.org)で、バージョン2.9.0.beta9 4af080d20b を使用しています。

私のフォーラムでは、ファイルサイズの制限を変更していないため、このファイルに問題はありません。

「いいね!」 1

テストサイト (4b561277a9) で、max 設定やファイル制限を変更せずに実行したところ、authorized extensions に pdf を追加すると正常にアップロードでき、デフォルトに戻すと「申し訳ありませんが、アップロードしようとしているファイルは承認されていません」という正しいエラーメッセージが表示されました。

再現できるか試すために、他に何か試せることはありますか?

いいえ、そのファイルサイズはデフォルトのnginxサイズ制限を下回っています。しかし、それは良い手がかりです。

Julien_Palard氏がセルフホストしているサイトは、Discourseとブラウザの間にカスタムリバースプロキシを備えているため、そのエラーはおそらく設定ミスのあるリバースプロキシから来ているのでしょう。

「いいね!」 5

Discourse の前にリバースプロキシを設置していますか?どのようにインストールしましたか?

nginx を使用しています。設定は以下のようになります。

そのため、nginx の設定は次のようになります。

      server
      {
          listen [::]:80; listen 80;
          server_name {{ discourse_domain }};
          access_log /var/log/nginx/{{ discourse_domain }}-access.log;
          error_log /var/log/nginx/{{ discourse_domain }}-error.log;
          return 301 https://$host$request_uri;
      }
      server
      {
          listen [::]:443 ssl; listen 443 ssl;
          server_name {{ discourse_domain }};
          access_log /var/log/nginx/{{ discourse_domain }}-access.log;
          error_log /var/log/nginx/{{ discourse_domain }}-error.log;
          include snippets/letsencrypt-{{ discourse_domain }}.conf;
          location / {
              proxy_pass http://unix:/var/discourse/shared/standalone/nginx.http.sock:;
              proxy_set_header Host $http_host;
              proxy_http_version 1.1;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto https;
              proxy_set_header X-Real-IP $remote_addr;
          }
      }

これは Debian bullseye の nginx 1.18.0-6.1+deb11u2 です。

nginxから413 Request Entity Too Largeエラーが出ています。明らかに、「大きい」画像は問題ないのに、「それほど大きくない」PDFがそうではない理由をさらに詳しく調べる必要があります。

3.0MBのJPGのContent-Lengthは557215で、驚くべきことに0.5MBでした!
2.3MBのPDFのContent-Lengthは2460137で、予想通り2.3MBでした。

DiscourseはJPGをアップロード前にリサイズしていますか?

私がアップロードしたJPEGでは、Discourseにアップロードした後、画像の幅と高さが異なっていることがわかります(https://apod.nasa.gov/apod/image/2209/DSCF4968_PS_Lioce.jpgで試しました。これは5703x3892、3.6MBの画像ですが、アップロード後は1920×1310、153KBの画像になります)。

「いいね!」 1

nginx の client_max_body_size のデフォルトは 1MB で、クライアント側でリサイズされた jpeg はすべて 1MB 未満なので、すべてが明確になりました。

nginx の設定を修正しました: Set client_max_body_size to 4m to match Discourse configuration. · AFPy/infra@861af29 · GitHub

これで動作するようになりました。あなたの言う通りでした。私のリバースプロキシが原因でした。

皆さん、ありがとうございました :heart: そして、騒がせてごめんなさい!

「いいね!」 4

unsupported-install タグを誤って追加したくありませんが、このトピックには最初から付いているべきだったと思いますか?

リバースプロキシの設定方法を説明するトピックがありますので、通常はこれでお手伝いできます。

「いいね!」 1

The Officeの怒っているシーズン4GIF

はい!この超素晴らしい機能についてはブログ記事もあります。

「いいね!」 7

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