オリジナル:http://php-note.com/article/detail/488
client_max_body_size
client_max_body_sizeのデフォルト1M、クライアントは、サーバは、ヘッダ「のContent-Length」要求で指定された最大許容サイズを表して要求します。体が要求されたデータclient_max_body_sizeよりも大きい場合は、HTTPプロトコルが大きすぎる413要求エンティティが与えられます。これは、要求が身体client_max_body_sizeよりも大きい場合、故障でなければなりません。あなたが大きなファイルをアップロードする必要がある場合は、値を変更してください。
client_body_buffer_size
要求されたデータが先に直接メモリに格納されているclient_body_buffer_sizeデータよりも小さい場合、バッファnginxのは、要求のデータサイズを割り当て。要求された値がclient_max_body_size未満をclient_body_buffer_sizeよりも大きい場合、それは一時的なファイルもこれで、一時ファイルに格納された第1のデータになりますか?
指定されたパスをclient_body_temp、デフォルト値は、パスを/ tmp /です。
このように構成client_body_tempアドレスは、ユーザーのグループは、nginxの読み取りおよび書き込み権限いる実行することができます。データ送信がclient_body_buffer_sizeよりも大きい場合にそうでない場合は、一時ファイルに書き込まれ、エラーが失敗しました。
私たちが遭遇した問題。
20648がオープン() "/usr/local/openresty-1.9.7.5/nginx/client_body_temp/0000000019" 失敗(13:アクセスが拒否されました)
/usr/local/openresty-1.9.7.5/nginx/client_body_temp/権限がnginxのユーザーグループを実行するように変更し、このフォルダを解消することができます。
この問題では、関連する言語で、あなたがPHPを使用している場合、内部に配置するために要求されたデータを読み出しますが、PHPが一時ファイルを所有することになり、これは問題ありません、開発者は気にする必要はありません。確かに完全なデータ。
openresty LUA-使用の開発なら、私たちは、論理のその後の使用するように読み出し自分自身を開発する必要があります。
機能はgetFile(FILE_NAME)
ローカルF =アサート(io.open(file_nameに、R ''))
ローカル文字列= F:読み取り( "*すべて")
F:クローズ()
の戻り文字列の
末尾の
ngx.req.read_body()
ローカルデータ= ngx.req.get_body_data()
もしゼロ==データ次いで
ローカルFILE_NAME = ngx.req.get_body_file()
ngx.say( ">>一時ファイル:"、FILE_NAME)
場合FILE_NAME次いで
データはgetFile =(FILE_NAME)
エンド
エンド
NGX .say( "こんにちは"、データ)
概要
- データ送信がclient_max_body_sizeよりも大きい場合、それは失敗し合格しなければなりません。
- 効率的にメモリに直接格納client_body_buffer_size未満。
- 如果大于 client_body_buffer_size 小于 client_max_body_size 会存储临时文件,临时文件一定要有权限。
- 如果追求效率,就设置 client_max_body_size 和 client_body_buffer_size 相同的值,这样就不会存储临时文件,直接存储在内存了。