部分用户使用 .htaccess 指令时网站速度异常缓慢

部分用户使用 .htaccess 指令时网站速度异常缓慢

为了保护共享主机方案上的网站,我将其添加到我的 .htaccess 文件中:

<Limit GET HEAD POST>
order deny,allow
deny from .ru
deny from .cn
deny from .in
deny from .de
deny from .cz
deny from .kp
deny from .kr
deny from .ng
deny from .pk
# other allows go here -- below is just a sample
allow from 10.10.10.
</Limit>

我这样运行了整整一年,没有出现任何问题。我也知道这样做是有效的,因为一个来自德国的人说:“嘿,我听说过你的网站,但我无法连接到它。”所以,我开始信任他,并为他打开了一个漏洞。然后他说:“我可以看到你的网站。谢谢!”(我屏蔽上述国家的原因有两个——第一,他们根本不是我的目标客户,第二,我从这些国家获得了大量垃圾邮件机器人流量。)

然而,一周前,共享托管计划服务器升级到了最新的 CentOS 和 cPanel。现在我突然发现页面加载时间要 13 到 15 秒。如果我注释掉上述块,那么就根本不会出现任何减速——页面加载速度超快。

我在家里的 Linux 和 Windows 工作站上测试了 Opera、Safari、Chrome、Firefox 和 IE。我的邻居使用 Windows 和 Firefox,和我一样使用 Frontier Communications DSL,她的延迟也一样。

我的客户和网络托管提供商也实现了即时页面加载。只有与 Frontier Communications DSL 的连接存在问题。

我更换了我的 DNS 以进行测试。在 Linux 上,我可以编辑 /etc/resolv.conf 并使用 Google DNS,这样网络速度就会更快。但是,我的网站仍然有延迟。

我知道如果我打电话给 Frontier,他们只会说他们不知道问题发生的原因,问题出在网络托管提供商身上。当我打电话给我的网络托管提供商 (a2hosting.com) 时,他们告诉我问题只出在我的 ISP Frontier Communications 身上,我应该打电话给他们。

仅 Frontier Communications 出现这种缓慢的情况的原因是什么?

答案1

按域限制意味着 Apache 需要对每个请求进行反向 DNS 查找。这就是速度变慢的原因。对此没有简单的解决方法。

更新:一种解决方法是在你的应用程序中实现 geoip,以便确定请求来自哪里(请参阅这里)。这样一来,您的网站速度将比现在快得多。

答案2

答案3

这是我从@Oliver 改编的答案。

他是对的——这家网络托管服务提供商突然在反向 DNS 查找方面遇到了大麻烦,而 Verizon(以及 Frontier Communications,该公司收购了大多数农村 Verizon DSL 帐户)因在反向 DNS 调用中提供所有必要响应的速度很慢而臭名昭著。我的意思是,我注意到我与互联网上各种服务器建立的一些 SSH 连接很慢,仅仅是因为我的 ISP 没有正确执行反向 DNS。

所以,我需要一个解决方法。我是这样实现的:

# I HAVE NO FREAKING IDEA WHAT THIS DOES, BUT CPANEL AUTOMATICALLY CREATES IT
<Files 403.shtml>
order allow,deny
allow from all
</Files>

# THIS IS FOR FUTURE EXPANSION -- I CAN DENY BY INDIVIDUAL IP ADDRESSES HERE,
# OR I CAN ALLOW CERTAIN IP ADDRESS HERE. I CANNOT, HOWEVER, ADD DOMAIN TLDS LIKE
# .ru HERE BECAUSE OF THE REVERSE DNS SLOWDOWN WITH THIS WEB HOSTING PROVIDER.
# FOR THAT, I USE THE REWRITE RULES BELOW.
<Limit GET HEAD POST>
order deny,allow
</Limit>

# THIS IS IMPORTANT. WHAT IT DOES IS LOOK AT ALL THE OTHER HTTP TYPE OF ACTIVITIES
# LIKE WEBDAV (A SECURITY HOLE, POTENTIALLY) AND BLOCK THOSE, LEAVING ONLY NORMAL
# BROWSER STUFF WHICH IS ALWAYS POST, HEAD, AND GET.
<LimitExcept POST HEAD GET>
deny from all
</LimitExcept>

# TURN ON REWRITE RULES
RewriteEngine on

# CHECK THE HOST NAME SENT BY THE BROWSER AND BLOCK IT WITH 403 FORBIDDEN IF
# FROM PARTICULAR COUNTRIES.
RewriteCond %{REMOTE_HOST} \.ru [NC,OR]
RewriteCond %{REMOTE_HOST} \.cn [NC,OR]
RewriteCond %{REMOTE_HOST} \.in [NC,OR]
RewriteCond %{REMOTE_HOST} \.de [NC,OR]
RewriteCond %{REMOTE_HOST} \.cz [NC,OR]
RewriteCond %{REMOTE_HOST} \.kp [NC,OR]
RewriteCond %{REMOTE_HOST} \.kr [NC,OR]
RewriteCond %{REMOTE_HOST} \.ng [NC,OR]
RewriteCond %{REMOTE_HOST} \.pk [NC]
RewriteRule .* - [F]

# NOW PLACE YOUR OTHER REWRITE RULES YOU MAY HAVE HERE.

相关内容