NodeJSベースのアプリケーションでは、Nginxサーバーは現在ユーザーに502を返しており、エラーログには次のものが表示されます。
2670 upstream sent too big header while reading response header from upstream
これはCookieが大きすぎる(リクエストごとのヘッダーが4Kを超える)ことがわかり、ユーザーにサイトCookieを削除するように指示する以外に、この状況を処理する方法がわかりません。この問題を解決する方法に関する提案はありますか?
nginxファイルのプロキシパスの設定:
location / {
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header x-forwarded-host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
}
Nginxインスタンスを渡して追加のテストを実行したところ、アップストリームNode.JSサーバーが4KBを超えるファイルを処理できることがわかりました。これは問題がNginxレベルにあることを示します。
私たちの周りの環境:
UbuntuベースのシステムのNginx 1.14.0の前にあるExpressベースのNode.js 10.19.0サーバー。 Node.jsサーバー上で実行されているアプリケーションはQuasar SSRを使用します。
答え1
私が下した解決策は、ヘッダサイズのバッファを16Kに増やすことでした。記事そしてNginxのドキュメント:
proxy_buffers 8 16k; # Buffer pool = 8 buffers of 16k
proxy_buffer_size 16k; # 16k of buffers from pool used for headers
文書内の特定のテキストを引用するには:
存在するproxy_buffers
:
構文:
proxy_buffers number size;
デフォルト:proxy_buffers 8 4k|8k;
コンテキスト:http, server, location
単一接続の場合は、プロキシサーバーから応答を読み取るために使用されるバッファの数とサイズを設定します。デフォルトでは、バッファサイズはメモリの1ページと同じです。プラットフォームに応じて4Kまたは8Kです。
存在するproxy_buffer_size
:
構文:
proxy_buffer_size size;
デフォルト:proxy_buffer_size 4k|8k;
コンテキスト:http, server, location
プロキシサーバーから受信した応答の最初の部分を読み取るために使用されるバッファサイズを設定します。この部分には通常、小さな応答ヘッダーが含まれます。デフォルトでは、バッファサイズはメモリの1ページと同じです。プラットフォームに応じて4Kまたは8Kです。しかし、より小さくすることができます。