2012-01-14 149 views
1

我有HTTPS的问题,我似乎无法解决我自己或任何大量的研究。有时,HTTPS请求会超时并导致“无数据收到”错误。当我使用从HTTP到HTTPS的虚拟主机重定向时,通常会发生这种情况。它不会每次都发生,bot可能只有8次,它只是坐着直到超时。 我通过一个Amazon负载均衡器,然后在Ubuntu 10.04上运行Apache 2的服务器(EC2)。 我不能说这是否是重定向问题,尽管它似乎不是。这很可能是一个设置问题,所以我将把我的设置放在下面,以便您可以看到它。HTTPS没有收到数据

我想尽快解决这个问题,任何帮助将不胜感激。 在此先感谢!

虚拟主机文件在为myurl.com启用的站点中。这应该强制HTTPS除了deploy.php之外的所有内容。

<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 [email protected] 
     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

我已经很久没有遇到这个问题了,它不依赖于浏览器。在任何浏览器上重现都相对容易。

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

为什么这会加剧问题?

由于SSL连接在握手后相对永久,并且如果NAT路由器丢弃路由,浏览器无法真正处理这种情况,并且以无数据或类似错误命中长SSL超时。然而,即使这个时候,在主流浏览器中似乎没有正确地重新连接和重新握手SSL连接,因为SSL握手非常慢,浏览器尽可能重复使用现有连接,而不理解NAT路由相关到连接不再存在。

此外,同一SSL服务器的多个选项卡似乎都重复使用相同的TCP连接,因此只关闭一个选项卡并不会真正关闭连接。

因此,一种解决方法是以某种方式减少SSL NO DATA超时,并且可能修复浏览器,以便实际上消除了现有SSL连接的任何和所有知识,打开全新的TCP连接以使NAT路由器开心和刷新。

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