こちらの記事で書いたように、メールクライアントとして Roundcube を使っています(Roundcube は QNAP NAS 上で docker で動かしています)。
いままで、順調に使えていたのですが、先日添付ファイルを送ろうとしたら、エラーが表示されて、添付ファイルをアップロードすることができないという事態が発生しました。
取り急ぎは、元のメールアカウントの Web メールを使って送信したので、事なきを得たのですが、このままだとせっかく Roundcube を使っている意味がありません。
ということで、原因の調査をしてみたので、ことの顛末をメモっておきます。現在の環境は以下の通りです。
- Roundcube: 1.5.3
- QNAP TS-251+
- QTS: 5.0.1.2425
- Container Station: 2.6.7.44
制限が発生する添付ファイルのファイルサイズ
この現象に遭遇する以前から、添付ファイルは問題なく送れています。今回送ろうとしたのが、 Roundcube に切り替えてからは初の accessのファイル ( .accdb ) だったので、考えられる原因は2つあります。
- ファイル種類の制限
- ファイルサイズの制限
最初は前者かと思い、いろいろと調べていたのですが、どうもそれらしい制限が見当たりません。
ここまではブラウザとして Chrome を使っていたのですが、試に Firefox でやってみたところ、下記の画像のように『 Request Entitiy too large 』と表示されました。
あぁ、ファイルサイズが原因っぽいですね。
ということで、新規メールの作成を使ってテストしてみます。PDFファイルは何度も過去に送ったことのあるので、 PDF ファイルでいろいろなサイズの添付ファイルを試してみたところ、だいたい 1MB を超えるとアップロードに失敗するようです。
やっぱりこれっぽいですね。
現状の設定の確認
どこか設定を間違えていないか確認します。 Roundcube は docker-compose で立ち上げているのですが、それには
roundcubemail: (略) environment: (略) - ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE=30M
と添付ファイルのサイズは 30MB まで OK と指定してあります。
念のため、 php info を確認すると
[ユーザ名@NAS名 application]$ docker exec -it myrc /bin/bash root@74a3150b44ab:/var/www/html# php --info | grep -i max_size post_max_size => 30M => 30M root@74a3150b44ab:/var/www/html# root@74a3150b44ab:/var/www/html# php --info | grep -i max_filesize upload_max_filesize => 30M => 30M
post_max_size , upload_max_filesize とも 30MB になってます。Roundcube 側の設定はここまで見る限り問題なさそうです。
こういう時はログを手がかかりに調べるのが常套手段なので、 NAS の Roundcube コンテナのコンソールを見て、標準出力に出てるログを確認してみます。
あれ?何にも出てません。
さて、こまったぞ。
原因
当初は、 Roundcube 自体の問題かと思い、いろいろと調べてたんですが、なかなか原因がわかりません。そのうち、(どういう経緯かは覚えていませんが)ふと、プロキシサーバーのサイズ制限、といった話題を目にしました。
ん?今の docker-compose で立ち上げた Roundcube は https 化するのにリバースプロキシとして https-portal を使ってた、ということを思い出しました。
ひょっとしたら、これかも。と思い調べてみると、見事ありました。
file size upload limit introduced by https-portal? · Issue #115 · SteveLTN/https-portal · GitHub
https-portal はデフォルトでボディサイズを制限しているとのことです。なるほどね。
で、 https-portal でひっかっかてるんだったら、 Roundcube 側にログがでないのもうなずけます。ということで、 https-portal のログを調べてみると、それっぽいのがあります。
ほぼ、これが原因と考えてよいでしょうね。
解決方法
じゃあ、上の記事を参考にして、設定を変更しようと思ったのですが、具体的にどうすればいいのかな? docker-compose.yml で設定変更できないかな?と思い、もうちょっと調べると、下記の記事が見つかりました。
Where to change docker nginx file upload limit? · Issue #173 · SteveLTN/https-portal · GitHub
どうも、 docker-compose.yaml の envirionment に書けば、反映されるようです。
ということで、 Container Station を開いて、『アプリケーションの編集』を押します。
docker-compose.yml が表示されるので、この内容に対して、
services: https-portal: (中略) environment: (中略) CLIENT_MAX_BODY_SIZE: 0 (後略)
のように CLIENT_MAX_BODY_SIZE を追加します( 0 はサイズチェックを行わないになります)。
編集後、『適用』ボタンを押します。
しばらくすると、コンテナが再起動するので、起動後、もう一度新規メール作成を選び、 1MB を超える添付ファイルを選択したら、問題なく添付できました!もちろん、送信も問題なくできます。
ずばり、これが原因だったんですね。
参考
ちなみに、最初は Chrome で試してたんですが、この時は『サーバーエラー』とだけ出てきていたので、何のことかさっぱりわかりませんでした。
で、試に Firefox でやってみたところ、上述のように『 Request Entitiy too large 』と表示されたという次第です。 にしても、(何かほかの理由原因が潜んでいるのかもしれませんが)ブラウザでエラーメッセージが変わるはやめてほしいです。