我有一臺nginx服務器負載均衡幾個express(node.js)服務器。每當我在查詢表單上獲得未編碼的空白請求時關閉連接,nginx認爲它已關閉。然後它向下一個快速上游發出相同的請求,獲得相同的結果,並因此設置整個集羣,當沒有任何事情真的停止時。在nginx上的URL查詢中重寫空格(使用快遞)
望着日誌,這些請求都從舊的瀏覽器,如Mozilla 4.未來我也可以效仿,捲曲的行爲:
curl "http://mysite.com/path/?q=foo bar"
我已經嘗試添加重寫規則與各種正則表達式使用%20編碼該空格:
rewrite "^(.*)\ (.*)$" "$1%20$2" last;
rewrite "^(.*)\s(.*)$" "$1 $2" last;
rewrite "\s" "%20" last;
...
但似乎沒有任何工作。這是我的正則表達式的問題還是隻是nginx不允許只是切換一個字符? 你是否知道解決問題的其他方法?也許在express/node級別,爲了避免它關閉連接?
是的,我做到了。它也不起作用。這個問題似乎只是取代url的查詢部分的字符。例如,如果我嘗試替換字符'a',它會替換路徑中的a,而不是查詢中的a。它是否提供任何線索? –
它只是無法替代%20,因爲它編碼後的結果。我的意思是,在應用正則表達式之後,它將用%25更改%,結果是%2520。 –
好吧,我明白了。你可以使用$ args變量來做到這一點。 –