2016-12-16 301 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)。