Я хочу ограничить доступ только одним соединением на IP.
Фрагмент кода, который я использую с официальной страницы:
Задает зону общей памяти и максимально допустимое количество подключений для заданного значения ключа.При превышении этого лимита сервер вернет ошибку в ответ на запрос. Например, директивы
limit_conn_zone $binary_remote_addr zone=addr:10m;
сервер {
местоположение /скачать/ {
limit_conn адрес 1;
}
разрешать только одно соединение с IP-адреса за раз.
Я использую nginx внутри контейнера докеров, и это default.conf:
limit_conn_zone $binary_remote_addr zone=addr:10m;
корень /usr/share/nginx/html;
сервер {
слушать 8080;
местоположение /загрузки/ {
limit_conn адрес 1;
включен автоиндекс;
}
}
Это ссылка, где объясняется, как проверить, работает ли ограничение IP:
https://blog.actorsfit.com/a?ID=00700-9f36887c-5d4b-4f0e-baf5-725ff22f2e42
Команда curl, которую я использовал:
curl -v http://192.168.0.13:8080/загрузки/ http://192.168.0.13:8080/загрузки/
Ответ:
* Попытка 192.168.0.13:8080...
* Установлен TCP_NODELAY
* Подключено к порту 192.168.0.13 (192.168.0.13) 8080 (#0)
> ПОЛУЧИТЬ /загрузки/ HTTP/1.1
> Хост: 192.168.0.13:8080
> Пользовательский агент: curl/7.68.0
> Принять: */*
>
* Отметить пакет как не поддерживающий многоразовое использование
< HTTP/1.1 200 ОК
< Сервер: nginx/1.21.4
< Дата: воскресенье, 28 ноября 2021 г., 11:53:36 по Гринвичу
< Тип содержимого: текст/html
< Transfer-Encoding: фрагментировано
< Соединение: поддержание активности
<
<html>
<head><title>Указатель /downloads/</title></head>
<тело>
<h1>Индекс /downloads/</h1><hr><pre><a href="../">../</a>
<a href="text">текст</a> 28 ноября 2021 г. 10:51 2
</pre><hr></тело>
</html>
* Соединение №0 с хостом 192.168.0.13 осталось нетронутым
* Найден бандл для хоста 192.168.0.13: 0x55e1cd185b50 [последовательно]
* Нельзя мультиплексировать, даже если бы мы захотели!
* Повторное использование существующего соединения! (#0) с хостом 192.168.0.13
* Подключено к порту 192.168.0.13 (192.168.0.13) 8080 (#0)
> ПОЛУЧИТЬ /загрузки/ HTTP/1.1
> Хост: 192.168.0.13:8080
> Пользовательский агент: curl/7.68.0
> Принять: */*
>
* Отметить комплект как не поддерживающий многоразовое использование
< HTTP/1.1 200 ОК
< Сервер: nginx/1.21.4
< Дата: воскресенье, 28 ноября 2021 г., 11:53:36 по Гринвичу
< Тип содержимого: текст/html
< Transfer-Encoding: фрагментировано
< Соединение: поддержание активности
<
<html>
<head><title>Указатель /downloads/</title></head>
<тело>
<h1>Индекс /downloads/</h1><hr><pre><a href="../">../</a>
<a href="text">текст</a> 28 ноября 2021 г. 10:51 2
</pre><hr></тело>
</html>
* Соединение №0 с хостом 192.168.0.13 осталось нетронутым
Журнал Nginx:
192.168.0.3 - - [28/ноября/2021:11:53:36 +0000] "GET /downloads/ HTTP/1.1" 200 276 "-" "curl/7.68.0" "-"
192.168.0.3 - - [28/ноября/2021:11:53:36 +0000] "GET /downloads/ HTTP/1.1" 200 276 "-" "curl/7.68.0" "-"
Я попробовал то же самое с telnet и получил тот же результат, я могу получить доступ к серверу несколько раз с одного и того же IP-адреса.