2017-08-29 163 views
1

我有一個Nginx服務集合,用作單個地址的負載平衡器,比如說www.example.com。我希望有一個測試套件可以獨立地針對每臺機器,而不是通過DNS負載平衡,就像直接訪問地址一樣。如何通過HTTPS測試特定負載均衡器實例?

當我嘗試做這樣的事情在curl我得到:

$ curl -H "Host: www.example.com" -v https://10.10.10.10/       
* Trying 10.10.10.10... 
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0) 
* found 173 certificates in /etc/ssl/certs/ca-certificates.crt 
* found 697 certificates in /etc/ssl/certs 
* ALPN, offering http/1.1 
* SSL connection using TLS1.2/ECDHE_RSA_AES_256_GCM_SHA384 
* server certificate verification OK 
* server certificate status verification SKIPPED 
* SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10' 
* Closing connection 0 
curl: (51) SSL: certificate subject name (www.example.com) does not match target host name '10.10.10.10' 

我知道10.10.10.10是不一樣的名字,但我想指示工具相信它是(因爲我知道它是,這些都是負載平衡器服務於同一個域)。

有沒有辦法做到這一點,不會涉及處理DNS解析?

+0

主機文件操作灰燼爲你工作? –

+0

另外如何在碼頭集裝箱內運行測試? –

回答

3

您遇到的問題是因爲您正在設置的主機頭正在發送到服務器,但未被curl用於SSL驗證。

可以在捲曲輸出看到這一點,注意到 「連接到10.10.10.10」:

$ curl -H "Host: www.example.com" -v https://10.10.10.10/       
* Trying 10.10.10.10... 
* Connected to 10.10.10.10 (10.10.10.10) port 443 (#0) 

你很可能尋找--resolve標誌:

--resolve <host:port:address>

爲特定主機和端口對提供自定義地址。使用這種方法,可以使curl請求使用指定的地址,並防止使用正常解析的地址。考慮它是在命令行上提供的一種/ etc/hosts替代品。

參見:curl man page

考慮到這一點,你可能也想嘗試:

curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com

這將使我們在捲曲正在使用的主機名的輸出明顯,從而,允許驗證證書使用者名稱:

$ curl -v --resolve www.example.com:443:10.10.10.10 https://www.example.com 
* Added www.example.com:443:10.10.10.10 to DNS cache 
* About to connect() to www.example.com port 443 (#0) 
* Trying 10.10.10.10... 
* Connected to www.example.com (10.10.10.10) port 443 (#0) 
+0

太棒了!這工作! –