Nginx+FCGI(fastcgi-wrapper.pl)+perlでPOSTが80KBぐらいまでしか送れずそれ以上だと空になってしまう件

題名の通り。半日はハマったのでメモっておく。
この環境なので当然最初はNginxの設定を疑う。

エラーログに

client request body is buffered to a temporary file

も出ているしclient_body_buffer_sizeなどを弄ってみる。ワーニングは消えたが問題は解決なかった。

海外のサイトなどで同様の問題を探るがわからない。

fastcgi-wrapper.plのプログラムに問題があるのではないかと、ソースを見るが、サイズを固定しているような記述は見られないCONTENT-LENGTHを見ているようなのでやっぱりNginxのfastcgiのパラメータの記述当たりではないかと調べるが治らない。

いったいどれくらいのサイズまでならPOSTできるのかテキストのサイズを色々変えてみると80KBぐらいの様だ。だからなんだ。80KBをキーワードに含めてみたが変わらない。

もしかしてcloudflareのhttpsを初めて使ったからhttpsの通信でcloudflareが大きなPOSTをはじいてるのではないかですよねーwwwとか思って設定を見に行くがわからん。

じゃあほかのサーバーでもそうなのかと思ってhttpsになってないサーバーに置いてみたが同じcloudflareは無実だった。いやこのサーバーはhttpsではないがcloudflareを使ってる。じゃあ、全く素のサーバーならどうだ。やっぱりおんなじだった。cloudflare無実。

じゃあなに?途方に暮れる。

もしかして、プログラムが悪いんじゃね?
プログラムを見直す。FCGI.pm使ってるからFCGIでPOSTサイズ限定してるんじゃね?と思って調べるがしてない。
もしかして使ってる標準ライブラリのCGI::Simpleが制限してるんじゃ・・・。
CGI.pmに置き換えてみる。
あっ、大きいデーターもPOSTできる。

犯人はCGI::Simpleでした。

でもってCGI::Simpleのドキュメントを見ると

$CGI::Simple::POST_MAX = 1024000; # max upload via post default 100kB

で、自由に設定できる。-1にすると無制限らしい。デフォルトは100Kbらしい。
つかれた。関係ないところでハマって昨夜からハマってる寝て起きて半日つぶした。
上の設定だと適当に1MBくらい。

(Visited 392 times, 1 visits today)

タグ :