切换DNS正在打破httpsredirect

我们(我的公司)最近把我们的名字服务器从GoDaddy切换到亚马逊。 我们的网站仍然在GoDaddy托pipe。 在切换名称服务器之前,一切正常。

我们有一个网站https://example.com ,如果它最初是以http身份input的,它将redirect到https 。 我们有第二个网站位于example.com/second并在https://second.com解决。 这与从http请求redirect到https的第一个站点的作用相同。

现在我们切换了名称服务器, https不再parsing。 如果我去http://second.com/non-http-part不需要redirect,它的工作原理。 但是进入它redirect的索引,导致页面根本无法加载。 所有的https://example.com都不加载。

我们已经联系了亚马逊,他们认为这是.htaccess文件的问题。 这对我来说似乎很奇怪,因为这听起来更像是一个DNS问题,但这不是我的专业领域,所以我完全可能是错的。

以下是我们的.htaccess文件。

 rewriteengine on rewritecond %{HTTPS} off rewritecond %{HTTP_HOST} ^www.example.com$ [OR] rewritecond %{HTTP_HOST} ^example.com$ rewriterule ^(.*)$ "https\:\/\/example\.com\/$1" [R=301,L] #---[SITE PASSWORD PROECTION] #AuthName "Restricted Area" #AuthType Basic #AuthUserFile /home/some_user/public_html/example/includes/security/.htpasswd #AuthGroupFile /dev/null #require valid-user #---[CENTRALIZED REQUESTED] <IfModule mod_rewrite.c> RewriteBase / </IfModule> #---[OPTIONS AND ERROR DOCUMENT HANDLING] Options -Indexes IndexIgnore * Options +FollowSymLinks ErrorDocument 400 /index.php ErrorDocument 401 /index.php ErrorDocument 402 /index.php ErrorDocument 403 /index.php ErrorDocument 404 /index.php #---[DENY ACCESS TO SPECIFIC FILES] <FilesMatch "^(config\.php|\.htaccess|\.htpasswd|\.log|php\.ini|php5\.ini|readme\.html)"> Deny from all Allow from 127.0.0.1 </FilesMatch> rewritecond %{REQUEST_FILENAME} !-f rewritecond %{REQUEST_FILENAME} !-d rewriterule . /index.php [L] 

根据我的经验,当我们迁移我们的托pipe,那么我们也需要迁移我们的SSL。 只需获得.pfx密钥,然后将其设置在您的新的托pipe服务提供商。 如果我们不在新服务器上configurationSSL,那么https将无法正常工作。

即使是艰难的你的情况可能看起来很简单(毕竟这只是一个访问HTTPS站点的问题),事情有点复杂。 我会给你一些(希望详细)帮助解决问题的过程。

让我们从这个开始:“ …如果我去http://second.com/non-http-part不需要redirect,它可以工&#x4F5C;…

这表明“second.com”的DNSparsing运行正常。 无论如何,我会直接用主机或挖掘工具来检查它。 这是需要保证你的系统依赖于一些可以指向DNS以外的地址的“主机”文件。 此外,它完全绕过本地DNScaching问题。

下面你可以看到一个例子:

 verzulli@tablet-damiano:~$ host serverfault.com serverfault.com has address 190.93.246.183 serverfault.com has address 190.93.247.183 verzulli@tablet-damiano:~$ dig serverfault.com [...] ;; QUESTION SECTION: ;serverfault.com. IN A ;; ANSWER SECTION: serverfault.com. 194 IN A 190.93.247.183 serverfault.com. 194 IN A 190.93.246.183 ;; AUTHORITY SECTION: serverfault.com. 90428 IN NS cf-dns02.serverfault.com. serverfault.com. 90428 IN NS cf-dns01.serverfault.com. [...] ;; Query time: 63 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 6 09:15:13 2015 ;; MSG SIZE rcvd: 199 verzulli@tablet-damiano:~$ 

所以现在我们确定你的本地系统所依靠的DNS是正确解决的。

现在我要检查HTTPpath,确保本地系统和远程Web服务器之间没有任何内容正在损坏HTTP连接。 这在透明代理上下文中可能是典型的。 请注意,我假设您的浏览器正在直接访问Web,没有configuration显式代理。 如果情况并非如此,请详细说明。

所以我会检查你的系统的外部IP地址(你可以通过访问你的浏览器,像这样的网站看到的)与在正确执行的Apache服务器的访问日志中报告的一样。 在我的情况下,我得到:

  • 我的外部IP: aaa.bbb.ccc.ddd
  • 访问日志: aaa.bbb.ccc.ddd - - [06/Jun/2015:09:36:35 +0200] "GET / HTTP/1.1" 200 3650 "-" "[...]"

所以,现在我们知道,当访问HTTP站点时,我们直接进入Web服务器(或者,更好的是,在两者之间没有容易检测到的变形)。

现在我们可以继续进行HTTPStesting。 我不知道你是否有交互式访问你的远程系统,所以我不确定你可以运行一个tcpdump ,所以我们坚持进行日志检查(因为我确定你有权访问你的日志文件) 。 ID:

  • 打开浏览器
  • 访问您的未运行的HTTPS URL
  • 检查Web服务器LOGS是否报告正确的日志行

如果在LOGS中没有任何内容出现,比 – 正确地logging你的HTTPS服务器正确logging – 我们可以假设你的浏览器和你的服务器之间的SSL连接有问题。

如果LOG行存在,那么我们可以说你的浏览器已经正确地到达了HTTPS服务器。

在这两种情况下,浏览器的“开发工具”都可以获得更多的帮助(Chrome / Chromium和Firefox有内置的function,可以使用CTRL-SHIFT-I启动)。 开发工具可以跟踪浏览器注册的所有networking活动(请参阅“networking”选项卡),包括HTTP / HTTPS请求和相关响应。 有了它,你还应该在HTTP响应中看到REDIRECT,指向在.htaccess规则中定义的HTTPS URL。

最后一点:如果浏览器在与HTTPS服务器build立HTTPS连接时出现问题(因此,开发者工具中没有任何内容),您可以尝试使用openssl c_client实用程序进行低级检查,如在:

  openssl s_client -connect your.remote.https.site:443 

上面的命令会显示所有的SSL握手,包括服务器证书的所有详细信息,并且会引导您看到一个不可见的提示,等待您的常用HTTP方法(GET,POST等,如“GET /”)。

不幸的是,我无法给你进一步的细节。 如果您仍然有麻烦,请提供有关上述检查结果的信息。