HTTPS没有收到数据

时间:2012-01-14 05:26:47

标签: ubuntu https apache2 amazon-ec2

我遇到了HTTPS问题,我似乎无法自行解决或进行任何研究。有时,HTTPS请求将超时并导致“无数据接收”错误。当我使用从HTTP到HTTPS的虚拟主机重定向时,通常会发生这种情况。每次都不会发生这种情况,机器人可能会在8次中出现1次,直到超时为止。 我通过Amazon Load Balancer将其传递给在Ubuntu 10.04上运行Apache 2的服务器(EC2)。 我不知道这是否是一个重定向问题,虽然它似乎不是。这很可能是一个设置问题,所以我将把我的设置放在下面,这样你就可以看到它。

我想尽快解决这个问题,我们将非常感谢任何帮助。 提前谢谢!

为“myurl.com”启用的网站中的虚拟主机文件。除了deploy.php之外,这应该强制使用HTTPS。

<VirtualHost *:80>
ServerName myurl.com
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} !^[A-Z]+\s/deploy.php [NC]
RewriteRule !^deploy.php https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
</VirtualHost>

<VirtualHost *:80> ServerName myurl.com RewriteEngine On RewriteCond %{HTTPS} !=on RewriteCond %{THE_REQUEST} !^[A-Z]+\s/deploy.php [NC] RewriteRule !^deploy.php https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] </VirtualHost>

启用了网站的“myurl-ssl”的虚拟主机文件。

<VirtualHost *:80>
        ServerName www.myurl.com
        RewriteCond %{HTTPS} !=on
    RewriteCond %{THE_REQUEST} !^[A-Z]+\s/deploy.php [NC]
    RewriteRule !^depoy.php https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L]
    NameVirtualHost *:443
    </VirtualHost> 

    <IfModule mod_ssl.c> 
    <VirtualHost *:443>
        SSLEngine on
        ServerAdmin admin@myurl.com
        ServerName myurl.com
        SSLCertificateFile /etc/apache2/certs/myurl.pem
        SSLCertificateKeyFile /etc/apache2/certs/private.key
        SSLCertificateChainFile /etc/apache2/certs/AddTrustExternalCARoot.crt
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM
        DocumentRoot /var/www

        ErrorLog /var/log/apache2/error.log
        LogLevel info
        CustomLog /var/log/apache2/access.log combined
    </VirtualHost>

同样,问题似乎出现在我的设置或我的重定向中,以强制使用HTTPS,我会收到“无数据接收”错误(Chrome中为324,但每个浏览器都会出现此问题)。我确实认为它与某些地方的HTTPS设置有关,但我无法弄清楚它是什么。

谢谢!

1 个答案:

答案 0 :(得分:1)

我很长一段时间以来一直在遭遇这个问题,并且它不依赖于浏览器。在任何浏览器上重现都相对容易。

问题的存在是因为NAT路由器表很容易溢出,因为它只能处理这么多的同时连接。现代AJAX网站,如Facebook和Twitter使用大量的连接。现在大多数此类网站都使用SSL连接,这个问题更加严重。

为什么这会加剧这个问题?

因为握手后SSL连接是相对永久的,并且如果NAT路由器丢弃了路由,浏览器无法真正处理这种情况,并且使用NO DATA或类似命令达到SSL的超时时间错误。但是,即使这次超时似乎没有在主要浏览器中正确地重新连接和重新握手SSL连接,因为SSL握手速度很慢,浏览器尝试尽可能地重用现有连接而不了解NAT路由相关连接不再存在。

此外,同一个SSL服务器的多个选项卡似乎都重用了相同的TCP连接,因此仅关闭一个选项卡肯定不会实际关闭连接。

因此,一种解决方法是以某种方式减少SSL NO DATA超时,并可能修复浏览器,以便实际上删除任何和所有预先存在的SSL连接的知识,打开一个全新的TCP连接来制作NAT路由器快乐,精神焕发。

我还没有找到解决此问题的实用方法,但上面的错误肯定与它有关,但似乎Chrome工程师并不了解其根本原因。