複数のエクスプレス(node.js)サーバーの負荷を分散するnginxサーバーがあります。クエリエクスプレスでエンコードされていない空白を含むリクエストを取得するたびに、接続が閉じられ、nginx がダウンしていると見なされます。次に、次の Express アップストリームに同じ要求を行い、同じ結果を得て、その結果、クラスター全体をダウンに設定しますが、実際にはダウンしているものはありません。
ログを見ると、これらのリクエストは Mozilla 4 などの古いブラウザからのものです。curl を使用して動作をエミュレートすることもできます。
curl "http://mysite.com/path/?q=foo bar"
あらゆる種類の正規表現を使用して書き換えルールを追加して、その空白を %20 でエンコードしようとしました。
rewrite "^(.*)\ (.*)$" "$1%20$2" last;
rewrite "^(.*)\s(.*)$" "$1 $2" last;
rewrite "\s" "%20" last;
...
しかし、何も機能していないようです。それは私の正規表現の問題ですか、それともnginxが単に文字を切り替えることを許可していないだけですか? 問題を解決する他の方法を知っていますか?多分エクスプレス/ノードレベルで、接続を閉じるのを避けるために?