先日Pleskで管理しているサイトのメンテナンス中に、サイト内で413エラー(Request Entity Too Large)が発生しました。
そもそも413エラーに遭遇したことがなかったので、何のエラーか調べてみましたが、どうやらWebサイトにアップするファイルの容量が制限値を超えてしまっているようでした。
エラーも容量大きめのファイルをアップロードしたタイミングで起こっています。
「ファイルのアップロードサイズが原因か、、」
それならMemoly LimitとPost Max Size、Upload Max Filesizeを変更すれば良いなと思い、Plesk上で変更してみましたが、エラーが直らない。
phpinfoなどで、確認してみてもちゃんと設定したアップロードサイズになっている。
他の何かが問題になっている、しかし何が原因かわからない。
もう少しググって調べていくといくつか要因が上がってきました。
nginx側でもアップロードサイズの制限がされている場合もあるようです。
Plesk11環境でNginx 413 Request Entity Too Largeエラーが表示される
しかし、今回のPleskではそもそもnginxは無効化されており、Apacheのみの構成なので、原因に当てはまりませんでした。
Mod Securityは「WAF(Webアプリケーションファイアウォール)」です。オープンソースのソフトウェアであり、無償で利用できることから多くのサーバーで利用されているセキュリティサービスです。
このMod Securityがアップロードのファイルサイズを制限しているようです。
Pleskでは「ツールと設定 – セキュリティ」に「ウェブアプリケーションファイアウォール」の項目でMod Securityの設定が行えます。
しかし、ここの設定画面ではMod Securityは有効化されておらず、原因に当てはまらなさそうです。
まじで原因はなんなんだ。。
原因がわからん、とハマりかけていた所で、改めてエラーログを見ていないなと気づき(ajax処理のエラーだったので、ブラウザのコンソールでエラーに気づいていた)、ログを確認してみると下記のようなエラーが見つかりました。
ModSecurity: Request body (Content-Length) is larger than the configured limit (13107200). [hostname “www.xxxx.co.jp”] [uri “~~~”] [unique_id “~~~”], referer: http://www.xxx.co.jp/~~~
URLなどは載せられないので伏せておりますが、明らかにModSecurityがエラーを出しています。
Mod Securityは無効になっているのになんで?と、疑問に思いましたが、さらにググって調べてみるとmod_security.confにアップロードサイズの制限が書かれているということがわかりました。
どうやらPleskの管理画面上でMod Securityは無効になっていても、完全に無効化されているわけではないようです。
mod_security.confはPleskの画面上では編集できないので、サーバーにSSHでアクセスして変更していきます。
SSHでログインしたら、mod_security.confは下記のパスにあります。
/etc/httpd/conf.d/mod_security.conf
このファイルをviなどで編集していきます。
リミットで制限されているサイズは13107200byteなので、これをアップロードしたいファイルサイズを超えるように「SecRequestBodyLimit」と「SecRequestBodyNoFilesLimit」の値を変更します。
変更が完了したら保存してエディタを閉じ、apacheを再起動させます。
コマンド操作は少し怖いので、Plesk画面上から再起動を行いました。
Apacheを再起動して、再度ファイルのアップロードを試してみたところ、無事に動作してくれました。
やはりエラーログを確認するのは重要ですね。そしてGoogleで似たケース、その解決方法を探すスキルも大事です。
しかしサーバーの設定を変更するのは怖い、、サーバーチューニングはまだまだスキルアップが必要そうです。