我遇到了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设置有关,但我无法弄清楚它是什么。
谢谢!
答案 0 :(得分:1)
我很长一段时间以来一直在遭遇这个问题,并且它不依赖于浏览器。在任何浏览器上重现都相对容易。
问题的存在是因为NAT路由器表很容易溢出,因为它只能处理这么多的同时连接。现代AJAX网站,如Facebook和Twitter使用大量的连接。现在大多数此类网站都使用SSL连接,这个问题更加严重。
为什么这会加剧这个问题?
因为握手后SSL连接是相对永久的,并且如果NAT路由器丢弃了路由,浏览器无法真正处理这种情况,并且使用NO DATA或类似命令达到SSL的超时时间错误。但是,即使这次超时似乎没有在主要浏览器中正确地重新连接和重新握手SSL连接,因为SSL握手速度很慢,浏览器尝试尽可能地重用现有连接而不了解NAT路由相关连接不再存在。
此外,同一个SSL服务器的多个选项卡似乎都重用了相同的TCP连接,因此仅关闭一个选项卡肯定不会实际关闭连接。
因此,一种解决方法是以某种方式减少SSL NO DATA超时,并可能修复浏览器,以便实际上删除任何和所有预先存在的SSL连接的知识,打开一个全新的TCP连接来制作NAT路由器快乐,精神焕发。
我还没有找到解决此问题的实用方法,但上面的错误肯定与它有关,但似乎Chrome工程师并不了解其根本原因。