Haproxy

HAProxy tcp-check 期望 rstring 沒有按預期工作

  • March 20, 2019

我們有一個返回“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 結尾的行不匹配,因此探針按預期工作。

引用自:https://serverfault.com/questions/959169