Сервер зависает при зажатии F5 на сайте

12
P
На сайте с 21.01.2012
Offline
72
2084

Здравствуйте!

Имеется проблема с падением сервера при большом кол-ве однообразных запросов.

Сервер:

VDS SSD

8 GB RAM

60 GB SSD

6 ядер CPU

Сайт на Wordpress

Посещаемость ~15.000 посетителей в сутки. Сайт работает без статичного кеширования страниц, использую только memcache. Производительность устраивает, но:

1. Сегодня какой-то умник 8000 раз за 20 минут запросил одну и ту же страницу вида site.ru/category/?id=<случайное число>&msg=

В результате чего все 20 минут сайт был в ауте, как только умник пропал - сайт стабилизировался.

Все это время выдавалась ошибка соединения с базой данных. Процессор был загружен на 100% и в htop висело куча процессов:

/usr/bin/php-cgi php (обычно их 15-20 одновременно, а в это время было больше 50)

2. Я выяснил что если зажать на любой странице сайта клавишу F5 и удерживать ее - происходит то же самое, т.е. сайт зависает, процессор грузится и т.д.

У умника, который запрашивал 8000 раз страницу IP был всегда один и тот же.

Вопрос: Как бороться с этим? Получается что любой человек может зайти на сайт, зажать F5 и положить его.

DV
На сайте с 01.05.2010
Offline
644
#1

Как бороться — nginx нормально настроить.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
RU
На сайте с 03.02.2015
Offline
25
#2
Preci:
Вопрос: Как бороться с этим? Получается что любой человек может зайти на сайт, зажать F5 и положить его.

Как вариант, можно и вот так.

L
На сайте с 07.12.2007
Offline
351
#3

Можно настроить кэширование на стороне клиента по заголовкам If-modified-since <-> Last-Modified. Тогда при нажатой <F5> браузер будет брать страницу из своего кэша.

Но может появиться вопрос о нажатой <Shift + F5> или <Ctrl + F5> :)

Можно и нужно поставить модуль кэширования WP.

PS: А вообще, бороться с http-флудом надо ограничением количества подключений с одного IP в единицу времени.

P
На сайте с 21.01.2012
Offline
72
#4
Можно настроить кэширование на стороне клиента по заголовкам If-modified-since <-> Last-Modified. Тогда при нажатой <F5> браузер будет брать страницу из своего кэша.

Но может появиться вопрос о нажатой <Shift + F5> или <Ctrl + F5>

Ну F5 только я тыкал, не замечал что бы кто-то такой гадостью занимался. А вот запросы на одну и ту же страницу вида sute.ru/?id=<рандом число>, с одного IP - довольно частое явление.

Как вариант, можно и вот так.

Спасибо, судя по описанию то что надо. Есть только вопрос: там как я понял автор ставит ограничение в 2 запроса в секунду с одного IP - это чиcло должно как то зависеть от посещаемости, или 2 это "универсально"?

[Удален]
#5

limit_req настройте, как RichUp предложил и забудьте про таких умников.

DV
На сайте с 01.05.2010
Offline
644
#6

C limit_conn тоже поиграйте.

L
На сайте с 07.12.2007
Offline
351
#7
Preci:
ограничение в 2 запроса в секунду с одного IP - это чиcло должно как то зависеть от посещаемости, или 2 это "универсально"?

Учтите, что современные браузеры качают скрипты и картинки параллельно, и не перебаньте роботов ПС под горячую руку.

lealhost
На сайте с 07.06.2014
Offline
136
#8
Ladycharm:
Учтите, что современные браузеры качают скрипты и картинки параллельно, и не перебаньте роботов ПС под горячую руку.

Статику обычно не лимитируют, только скрипты :)

Doroshev
На сайте с 21.01.2010
Offline
186
#9

А как протестить автоматически, зависнет ли сервак при зажатии? А то как-то не комильфо тестить свой сервер в ручную, думаю. Может есть софт?

Я для теста нагрузок использую сервис:

loadimpact.com

DV
На сайте с 01.05.2010
Offline
644
#10
Doroshev:
Может есть софт?

Apache => ab

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий