事象はNginxのSSL通信において、2GB以上のPOSTができない。
POSTをしようとすると以下のようなエラーが出てClientから切断される。
非SSLの場合は転送ができるのでよくわからない。
非SSLの場合は転送ができるのでよくわからない。
$ curl -ikv -X PUT -T test4GB.img "https://server/upload/test.txt"
HTTP/1.1 100 ContinueNginxのログを見ても以下の通り。
* SSL read: errno -5961* Closing connection #0curl: (56) SSL read: errno -5961
2014/05/10 14:56:44 [info] 16121#0: *973320 client prematurely closed connection, client: client01, server: server001, request: "PUT /upload/test.txt HTTP/1.1", host: "server001"原因はNginxの client_body_buffer_size の設定。この設定値が大きかった。
client_body_buffer_size 3096m;
パフォーマンス向上になるかと値を大きくしたのだが、この設定はそれだけメモリを食う様子。
しかし、なぜかOut of MemoryにもならずNginxが起動してしまったので、これでいいかと思っていたが、そうではなかった。
おまけに、この値大きく変えても、POSTできないサイズは2GBで固定だったのでわからなかった。
設定値を小さくしてNginxをReload。これで解消された。
client_body_buffer_size 256k;何が起こっていたかは、これは予想だが以下の通りだと思われる。
- Nginxは正常に起動、しかしメモリがいっぱいいっぱい。
- SSL通信時にOpenSSLのライブラリがラージファイル用にメモリを確保?
- 確保できないのでハンドシェイクでエラーを返す?
- クライアントが通信を切断。
直ってしまったのでこれ以上の調査はしないけれど、この予想、間違ってたらだれか教えてください。
0 件のコメント :
コメントを投稿