[解決済み] nginx アップロードのclient_max_body_size問題
質問
nginx/ruby-on-rails を使用していて、ファイルをアップロードするためのシンプルなマルチパートフォームを持っています。
アップロードするファイルの最大サイズを制限することに決めるまでは、すべてうまくいっていました。
これを実現するために、nginx の
client_max_body_size
を
1m
(1MB) で、そのルールが破られたときの応答として、HTTP 413 (Request Entity Too Large) ステータスを期待します。
問題点 は、1.2 MB のファイルをアップロードすると、HTTP 413 エラー ページが表示されるのではなく、ブラウザが少しハングして、" Connection was reset while the page was loading" というメッセージで終了することです。
nginx が提供するすべてのオプションを試しましたが、何も動作しないようです。どなたか、これについて何かアイデアをお持ちではないでしょうか?
私の nginx.conf です。
worker_processes 1;
timer_resolution 1000ms;
events {
worker_connections 1024;
}
http {
passenger_root /the_passenger_root;
passenger_ruby /the_ruby;
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name www.x.com;
client_max_body_size 1M;
passenger_use_global_queue on;
root /the_root;
passenger_enabled on;
error_page 404 /404.html;
error_page 413 /413.html;
}
}
ありがとうございます。
**Edit**
環境/UA: Windows XP/Firefox 3.6.13
どのように解決するのですか?
を超えるサイズのボディを送信しようとしていることをクライアントが通知すると、nginx は "fail fast" となります。
client_max_body_size
を超えるサイズのボディを送信しようとすると、413 レスポンスを送信して接続を閉じます。
ほとんどのクライアントは、リクエストボディ全体が送信されるまでレスポンスを読みません。 nginxは接続を閉じるので、クライアントは閉じたソケットにデータを送信し、TCP RSTを引き起こします。
HTTP クライアントがサポートしている場合、これを処理する最良の方法は
Expect: 100-Continue
ヘッダを送ることです。 Nginx は 1.2.7 以降、これを正しくサポートしており、返信には
413 Request Entity Too Large
レスポンスではなく
100 Continue
もし
Content-Length
が最大ボディサイズを超えている場合。
関連
-
[解決済み] 0.0.0.0:80」と「:80」でのリスニングの違いは何ですか?
-
[解決済み] Google ChromeでSPDYを無効にする方法
-
[解決済み] Node.js + Nginx - 今度は何?
-
[解決済み] HTTPファイルアップロードの仕組みを教えてください。
-
[解決済み] ブラウザのCookieドメインはどのように機能するのですか?
-
[解決済み] POSTとGETの違いは何ですか?[重複しています]。
-
[解決済み】マイクロサービスのオーケストレーション
-
[解決済み] REST APIで "Not Ready Yet, Try Again Later "のHTTPステータスコードを選択するにはどうすればよいですか?[クローズド]。
-
[解決済み] なぜCache-Control属性はリクエストヘッダ(クライアントからサーバーへ)に送信されるのですか?
-
[解決済み] HTTPリダイレクトコードの違い
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTPの "Host "ヘッダーとは何ですか?
-
[解決済み] Cache-Control: max-age=0とno-cacheの違いは何ですか?
-
[解決済み] Chromeのネットワークデバッガをリダイレクトで使用する方法
-
[解決済み] POSTとGETの違いは何ですか?[重複しています]。
-
[解決済み] HTTPヘッダーの最大値?
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み】AngularでHTTPリクエストにURL引数(クエリ文字列)を渡すには?
-
[解決済み】GETリクエストで同じパラメータ名で複数の値を渡す場合の正しい方法
-
[解決済み】no-cacheとmust-revalidateの違いについて
-
[解決済み】ユーザーエージェント文字列の大きさはどれくらいになりますか?