Ограничения и лимиты в NGINX

Обновлено Обновлено: Опубликовано Опубликовано:

Термины по теме: NGINX, веб-сервер

Доступ с определенных IP-адресов

Данная возможность обеспечивается модулем ngx_http_access_module. Как правило, он входит в стандартную установку.

В общем конфигурационном файле nginx или настройке виртуального домена:

location / {
    deny  192.168.0.15;
    allow 192.168.0.0/24;
    allow 2001:0ab3::/32;
    deny  all;
}

* в данном примере мы разрешаем доступ для всех компьютеров сети 192.168.0.0/24 (за исключением 192.168.0.15) и компьютеру с адресом ipv6 2001:0ab3::. Остальным доступ запрещен. 

После перезапускаем NGINX одной из команд:

systemctl reload nginx

service nginx reload

Ограничение доступа к определенной папке

Стоит отметить, что блокировать доступ по IP-адресу можно не только ко всему сайту, но и к определенным директориям, например:

location /install {
    allow 192.168.0.15;
    deny  all;
}

* в данном примере мы запрещаем доступ к папке install, но разрешаем устройству 192.168.0.15.

Разрешить только локальные запросы

Самый правильный способ, настроить, чтобы NGINX слушал только на локальном адреса, например, listen 127.0.0.1:80;

Но если такой метод, по каким-либо причинам нам не подходит, делаем так:

location / {
    allow 127.0.0.1;
    deny  all;
}

Действие с IP по условию

В зависимости от определенного IP-адреса NGINX может выполнять различные действия, а не только запрет доступа. Например, перенаправление:

location / {
    ...
    if ($remote_addr != 127.0.0.1) {
        return 301 https://$host$request_uri;
    }
    ...
}

* в данном примере мы перенаправляем всех посетителей по пути https://$host$request_uri, кроме запросов с IP-адреса 127.0.0.1.

Доступ по паролю

В конфигурационном файле:

server {
    ....
    auth_basic "HTTP Basic Authentication";
    auth_basic_user_file htpasswd;
    ....
}

* где auth_basic указывает веб-серверу использовать обычную аутентификацию по логину и паролю; auth_basic_user_file задает путь хранения файла с паролями относительно папки nginx.

Генерируем хеш для пароля:

openssl passwd

* после ввода Enter необходимо дважды ввести желаемый пароль — на экран будет выведен хэш, который необходимо скопировать в буфер обмена.

Создаем файл с пользователями и паролями:

vi /etc/nginx/htpasswd

test:dzeEYeVIDk38.

* где test — логин; dzeEYeVIDk38. — результат команды openssl passwd.
* Для создания связки логина пароля также можно воспользоваться online генераторами, например, на htaccesstools.com.

После перезапускаем NGINX одной из команд:

systemctl reload nginx

service nginx reload

Лимит скорости

location / {
    limit_rate 1000k;
}

* в данном примере мы огрраничили пропускную способность канала до, примерно, 10 мбит.

location / {
    limit_rate_after 10m;
    limit_rate 1000k;
}

* также ограничиваем скорость до 10 мбит, но после первых 10 Мб загрузки.

Ограничение количества запросов с одного ip

http {
    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_conn_zone $server_name zone=perserver:10m;
    limit_req_zone $binary_remote_addr zone=dynamic:10m rate=5r/s;
    ...
    server {
        ...
        location / {
            limit_conn perip 10;
            limit_conn perserver 100;
        }
    }
}

* в данном примере мы создаем 3 зоны, размер каждой зоны — 10Мб; на один IP разрешено 10 подключений, но не больше 5 в секунду (rate=5r/s); общее число разрешенных соединений с сервером — 100.

# Сервера # Интернет # Безопасность # UNIX # NGINX # Linux
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет