2016-12-16 57 views
0

我正在測試NGINX中的SSL/TLS流代理,它將使用gnutls作爲底層TLS API連接到Web服務器。使用gnutls(gnutls-serv)中的命令行測試工具,整個過程都能正常工作,但我無法理解這個邏輯:NGINX的gnutls和openssl握手

NGINX客戶端(代理從實際客戶端到gnutls服務器的HTTP請求)似乎想要多次握手連接。事實上,在大多數測試中,在服務器響應測試網頁之前,似乎握手3次而沒有錯誤。使用wireshark,或只是調試消息,它看起來像客戶端的套接字(在gnutls服務器的角度來看)正在關閉,並在不同的端口重新打開。最後,在成功的聯繫上,gnutls使用了恢復的會話,我想這是前面提到的成功握手之一。

我無法找到任何關於這種行爲的文檔,並且想知道這是不是'NGINX的東西'。

雖然握手最終可以與測試程序一起工作,但在非測試環境中實施握手邏輯似乎很棘手,但實際上並不瞭解客戶正在嘗試執行什麼操作,看起來很浪費(有多次昂貴的握手)。

我不認爲在傳輸上發生任何超時或問題,測試環境是在1臺交換機之間連接的同一子網上的幾個不同的虛擬機。

NGINX版本是最新的主線:1.11.7。我最初使用1.10.something,雖然有更多的傳輸錯誤,但行爲相似。升級後,這些錯誤似乎得到很好的清理。

任何信息或從其他人的經驗是非常感謝!

+1

客戶端是什麼?如果它是一個瀏覽器,它會爲每個圖像發出多個請求,CSS,Javadcript,圖像等。 – EJP

+0

嗯,我只是使用wget。我認爲它沒有做任何其他單一的GET。還設置了重試次數爲1。 – kris

回答

0

使用NGINX和後端服務器之間的RSA密鑰交換,或者使用LD_PRELOAD爲NGINX提供Wireshark解密數據所需的數據。

雖然單個傳入連接只能生成一個傳出連接,但NGINX可能會優化一些常用文件(favicon.ico,robots.txt)。