Haproxy
HAProxy tcp-check 期望 rstring 沒有按預期工作
我們有一個返回“OK”或“Fail”的狀態頁面。我們設置了 tcp-check 來查找“OK”,不幸的是它不起作用,因為它也匹配“HTTP/1.1 200 OK”,我想我可以使用
rstring
類似.*^OK$
. 但是,這永遠不會匹配,即使它在我針對此響應測試模式時有效:HTTP/1.1 200 OK Cache-Control: private Content-Type: text/plain; charset=utf-8 Server: Microsoft-IIS/8.5 X-ServerName: myserver X-AspNet-Version: 4.0.30319 Date: Wed, 20 Mar 2019 16:23:48 GMT Content-Length: 2 OK
tcp-check expect rstring
不像我想的那樣工作?也許我缺少一個小細節?這是我在 haproxy 配置中嘗試的內容:這不起作用**(**對於 OK 和 Fail 響應的探測都失敗了)(我正在更改伺服器名稱和 IP,假設它們是有效的)
option tcp-check tcp-check connect tcp-check send GET\ /status.ashx\ HTTP/1.0\r\n\r\n tcp-check expect rstring .*^OK$ server myserver1 1.2.3.4:80 check server myserver2 1.2.3.5:80 check
以下總是說兩台伺服器都線上,無論探測返回 OK 還是 Fail,因為我之前提到的“200 OK”問題:
option tcp-check tcp-check connect tcp-check send GET\ /offline.txt\ HTTP/1.0\r\n\r\n tcp-check expect string 404 - File or directory not found. tcp-check connect tcp-check send GET\ /status.ashx\ HTTP/1.0\r\n\r\n tcp-check expect rstring OK server myserver1 1.2.3.4:80 check server myserver2 1.2.3.5:80 check
如此簡單的“OK”適用於 rstring,但是當我嘗試應用模式時,它並沒有按我期望的方式工作。
經過更多的測試和反複試驗,我發現我看到的差異是由於多行正則表達式選項造成的。如果沒有設置多行選項,我的模式將不起作用。所以 HAProxy 不能使用這個選項。順便說一句,在這種情況下,該模式
OK$
有效,因為它將這解釋為整個字元串以 OK 結尾。如果返回 Fail,則前面以 OK 結尾的行不匹配,因此探針按預期工作。