Nginx - Перенаправьте запрос, ПОЛУЧАЮТ шаблон параметров

Трафик к Вашему собственному серверу? => Установка OpenVPN или LogMeIn Hamachi ²

2
задан 17 May 2013 в 14:40
1 ответ

Перезапись в Nginx работает только по путям, поэтому вам нужно использовать сравнение переменных отдельно для их идентификации. То, что вы просили, будет выглядеть так:

if ($args ~ "([a-f0-9]{12,})=([a-f0-9]{12,})" ){
    rewrite ^/$ /404_rewrite?;
}

location  /404_rewrite {
    return 404;
}
  • Сопоставление аргументов должно быть внутри кавычек, иначе { и } запутают Nginx.

  • ? в конце перезаписи заставляет Nginx отбрасывать все параметры, а не добавлять их в перезаписанный URL.

Однако вы можете захотеть, чтобы Nginx пытался задерживать каждый запрос в DOS, а не обрабатывать их как можно быстрее.

limit_req_zone  $binary_remote_addr  zone=dos_attack:20m   rate=30r/m;

if ($args ~ "([a-f0-9]{12,})=([a-f0-9]{12,})" ){
    rewrite ^/$ /404_rewrite?;
}

location  /404_rewrite {
    limit_req   zone=dos_attack  burst=1;
    internal;
    return 404;
}

Это делает следующее:

  • Устанавливает количество запросов на 30r / m, что составляет 30 запросов в минуту или один запрос каждые две секунды.

  • Устанавливает пакет at 1. Для нормального ограничения скорости пакет устанавливается на> 1, чтобы позволить клиентам не быть ограниченными, если они случайно превышают лимит скорости в течение короткого периода времени.

  • Выделяет 20 мегабайт для хранения информации об ограничении скорости зона. Согласно документации по ограничению скорости каждый $ binary_remote_addr занимает 64 байта для хранения, так что это ограничение скорости будет работать до пары сотен тысяч отдельных машин, выполняющих DOS. Если бы машин было больше, ограничение скорости вышло бы из строя.

2
ответ дан 3 December 2019 в 11:47

Теги

Похожие вопросы