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

nginx ограничивает соединения на основе параметров

Мой веб-сайт является форумом и имеет 3 типа URL-адресов, как показано ниже:

  1. Просмотр потока:

    forum.php? mod = viewthread & tid = 1256 & page = 2

  2. Список потоков:

    forum.php? mod = forumdisplay & fid = 125 & page = 61

  3. Показать картинки:

    forum.php? mod = вложение & помощь = afklafaklj

Поскольку сейчас на моем веб-сайте много данных и более 10 000 000 потоков, некоторые ребята пытаются замедлить работу моего веб-сайта, обращаясь к сотням страниц списка потоков. Например, они используют curl для одновременного получения ссылок ниже:

forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=600
forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=7000
forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=869
forum.php?mod=forumdisplay&fid=1&orderby=replies&filter=reply&orderby=replies&page=10000

Такой доступ создаст дополнительную нагрузку на MySQL и замедлит работу веб-сайта.

Поэтому я хочу добавить ограничение на количество подключений для этих URL. 1. Для отображения изображений и просмотра цепочки (тип 1 и 3) ограничение на количество подключений отсутствует; 2. Для списка потоков (тип 2) ограничьте до 5 на IP.

Я знаю что могу использовать limit_conn_zone и limit_req_zone сделать это. Но дело в том, что все мои URL-адреса начинаются с forum.php. Поэтому мне нужно ограничить подключения по разным параметрам.

Кто-нибудь может помочь? Спасибо.