はじめに
JBS Tech Blogをクローズ環境としてWordPressで運用していた時のメモです。
利用者より、ファイルをアップロードしようとしたところ「サーバーから予期しないレスポンスがありました」のメッセージが出てファイルがアップロード出来ない、という連絡を受けて調査しました。
エラー時のファイルサイズは32MBで、21MBに縮小してもらったところアップロード出来たということで、ファイル単位のクォータ設定が怪しそうです。
WordPressのGUI上は50MBまでOKと書いてあるので、どこで引っかかっているか切り分けを行う必要があります

WordPress上の設定
WordPressのGUI上は50MBまでと書いてありますが、WordPressとして本当にその設定がされているか確認します。といっても、WordPress側でアップロードファイルサイズを設定する項目があるわけではなく、サーバー側の設定に依存するようです。
管理者権限でWorpPressにアクセスし、「ツール」から「サイトヘルス」を開きます。

そこでサーバー情報が確認できるのですが、「アップロードの上限ファイルサイズ」「PHP POST サイズ上限」ともに50MBになっていました。

少なくともWordPressとしては50MB上限と認識している事が分かります。
PHPの設定
では、PHP側での設定はどうなっているかですが、phpinfopで確認することにしました。App Service Editorを開き

phpinfo.phpを作成します。

post_max_sizeとupload_max_filesizeが50MBとなっており、WordPressの設定と一致している(というよりもWordPressがこの値を見ている)ようです。

ちなみにここまで書いて気づいたんですが、App Service Editorで.user.iniファイル見た方が早かったですね。

IISの設定
[WordPressの設定] = [PHPの設定] だとすると、残る設定はIISくらいになります。
探してみると、やや古い記事ですが、web.configで定義が出来るようです。
Uploading Large Files to Azure Web Apps | Microsoft Docs
IISとしてのデフォルト値は30000000byte (約 28.6MB)らしく、今回の「 エラー時のファイルサイズは32MBで、21MBに縮小してもらったところアップロード出来た 」という現象にも合致します。
App Service Editorで、今度はweb.configを設定しました。

追加した内容はこちらです。(今回は別件でweb.configを作成済みだったので、必要な箇所だけ追記しました)
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="52428800"/>
</requestFiltering>
</security>
この後で、App Serviceを再起動し、ダミーファイルとしてMaxより少し小さい45MBのダミーファイルをアップロードしたところ、エラーが出なくなったことを確認しました。(当初問題が発生していた32MBのファイルも大丈夫でした)

おわりに
実は調べるまではApp Service側の構成などに設定があるのではと思っていたのですが、そこには一切ありませんでした。
web.configや.user.iniなどファイルベースでしたね。
こいった、複数のレイヤで制限値決められるものは切り分けが複雑になりがちですね。勉強になりました。
舟越 匠(日本ビジネスシステムズ株式会社)
人材開発部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。好きなサービスはPower Automate / Logic Apps。好きなアーティストはZABADAK。
担当記事一覧