Назад | Перейти на главную страницу

Причудливое замедление работы сайта для некоторых пользователей с директивой .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), они сказали мне, что проблема была только с моим интернет-провайдером, Frontier Communications, и что я должен им позвонить.

В чем причина такой медлительности только с Frontier Communications?

Ограничение по домену означает, что для каждого запроса apache должен выполнять обратный поиск в DNS. Отсюда и замедление. Для этого нет простого обходного пути.

Обновление: обходным путем было бы реализовать geoip в вашем приложении, чтобы решить, откуда исходит запрос (см. Вот). Благодаря этому ваш сайт будет невероятно быстрым по сравнению с тем, что у вас есть сейчас.

вы можете заблокировать IPS напрямую: http://www.wizcrafts.net/chinese-blocklist.html

Это был ответ, который я адаптировал из @Oliver.

Он был прав - внезапно у этого провайдера веб-хостинга возникли серьезные проблемы с обратным поиском DNS, и Verizon (и, следовательно, Frontier Communications, выкупившая большинство сельских учетных записей Verizon DSL) печально известна своей медлительностью в предоставлении всех необходимых ответов на обратный DNS. звонки. Я имею в виду, я заметил, что некоторые SSH-соединения, которые я использую с различными серверами в Интернете, медленные просто потому, что мой интернет-провайдер не выполняет обратный 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.