
Webエンジニアリングしています。Docker開発便利ですね。
サーバーと同じ環境をローカルでも作れるんで、神ツールすぎます。
でも、本番サーバーにもDockerで運用していれば、さほど大きな問題は起きにくいんですが、
あるとき、開発サーバーで、作ったツールを、テストもデバッグも完了して、完璧版として、本番にデプロイしたところ、
とある機能で、"413 (Content Too Large)"というエラーが出るではないですか・・・
これは、ファイル容量がデフォルトの1MBを超えているというエラーだということは、調べてすぐにわかったんですが、
これを解消するために、Nginxの書き換えを行い、事なきを得ました。
でも、この設定について、エンジニアとして考えたいと思ったので、今回は、そんな戯言(ざれごと)際好きエンジニアの戯言(たわごと)ブログをお楽しみください。
スマホの写真データは1枚4MB越え
年々スマホの性能が上がっていて、その大半がカメラの性能向上が行われています。
画質のクオリティに加えてレンズの高品質化、編集昨日の充実など、映える写真を撮るためのありとあらゆる機能を搭載している裏側で、
クオリティ向上のために、画素数の向上に伴う、写真ファイルサイズの肥大化も発生しています。
iPhoneなどは、他デバイスに転送する時に、独自形式のHEIFからjpeg変換して、送信することで、サイズや容量が削減される場合もあり、
気がつきにくい場合もありますが、1枚4MB以上の容量を、100枚だと400MB、1000枚だと4GBもストレージを消費しているんですね。
最近では、毎日大量に写真を撮る習慣の人もいるかと思うと、もはや莫大な容量が必要になることは当然ですよね。
そうしたファイルをアップロードする場合に、サーバー側でデフォルト1MBの容量制限があるって知らなかったら、
Webサービスでは、大トラブルになるわけなんですよね。
写真ファイルに限らないけど
大容量時代
写真に限らず、WEBサービスを作っていると、いろいろなファイル形式をアップロードする場合があります。
今回作っているWEBサービスでは、エクセルファイルをアップロードして、
PHPえいい感じに内部のデータを読み取って、それをデータベースに格納するという仕様を実装したところ、
本番サーバーで1MB越えのエクセルファイルを添付した利用者がいて、Nginxの仕様が発覚したという経緯だったワケです。
でも、そもそも、1MBって、低回線速度やガラケ時代の名残のデフォルト値な気もしませんか?
Nginxの設定
とりあえず、今回設定追加した、Nginxのconf内容を備忘録しておきます。
default.conf
server{
...
client_max_body_size 20M;
...
}
20MBの容量を上限にしておきました。
これを書いておかないと、1MBが上限にデフォルトで設定されているので、サーバー管理者の人、適切な値セットを忘れないようにしましょう!
PHPにもアップロード容量制限設定がある
サーバー管理をしている人は、PHPなどのソフトウェア側でも、容量設定が存在するので、この点も要注意です。
ただ、PHPであれば、ini_setで、phpファイルに直接記述できてしまうので、コントロールはしやすいので、さほど心配はないのですが、
できれば、php.iniの設定は、nginxと合わせておくと、どこが原因でファイル容量が引っかかっているのかが明確になるので、
こうしたお作法は押さえておく必要があります。
アップロード容量サイズについて考える
そもそも、上限ファイルサイズ制限って、何のためにあるのかというと、
公開サービスの場合、サーバーのストレージサイズを食い潰されないようにするためですが、
S3などを使って、ストレージを食い潰されないようにする仕組みはたくさんあります。
でも、だからと言って、上限容量設定をしなくてもいいとおいうわけではありません。
世の中にはバケモノファイルもたくさん存在していて、
DTPの業界などで扱われているPhotoshopファイルは、1枚数逆MBぐらいの画像ファイルを扱うこともしばしばありますからね。
Web業界で、元データ以外でこんなファイルを扱っているデザイナーがいたとしたら、WEBデザインの素材作成の基本を学習し直すことをオススメしたいですね。
あとがき
トラブルから何かしらを学ぶ事は非常に有意義です。
エラーが起きて、それを直して終わりではなくて、
そこから、自分なりの学びに繋げることが、学習向上の効率をアップさせるちょっとした技でもあります。
今回は、開発途中だったため、被害はまるでなくて、学びが大きかったトラブルだったのですが、
見慣れないエラーが出たら、そこは"自分のスキルアップのチャンス"と考えてみると、エラーも楽しめる要素になりますよ。
IT学習中の人にちょっとした、プチ思考テクニックでした。
0 件のコメント:
コメントを投稿