Categories: Шпаргалки

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

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

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

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

В настройке виртуального домена:

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 (всех сайтов), то прописываем настройки в общем конфигурационном файле секции http:

vi /etc/nginx/nginx.conf

http {

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

}

После перезапускаем 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 .

Указать список адресов в отдельном файле

При работе с большим списком адресов, удобнее их сохранить в отдельном файле и подключать данный файл в нужной части конфигурации.

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

vi /etc/nginx/blacklist.conf

deny 1.1.1.1/32;
deny 2.2.2.2/30;
deny 3.3.3.3/28;
deny 4.4.4.4/24;
allow all;

* в данном примере мы хотим блокировать 4 подсети. Остальным сетям мы разрешаем доступ.

Теперь в конфигурационном файле nginx подключим данный файл:

server {

include /etc/nginx/blacklist.conf;
….
}

* обратите внимание, что мы создали список доступа на уровке секции server . Также мы можем сделать подключение для location или http .

Не забываем проверить корректность конфигурации и применить ее:

nginx -t && nginx -s reload

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

Мы можем разрешить доступ по паролю ко всему сайту или конкретной странице (URL). Конфигурирование включает два процесса:

  1. Настройка NGINX.
  2. Создание файла с паролем.

Рассмотрим их по отдельности.

Конфигурация NGINX

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

а) для установки пароля на весь сайт:

server {
….
auth_basic «HTTP Basic Authentication»;
auth_basic_user_file htpasswd;
….
}

б) для установки пароля на конкретную страницу:

server {
….
location = /page7 {
auth_basic «HTTP Basic Authentication»;
auth_basic_user_file htpasswd;
}
….
}

в) для установки пароля на все вложенные страницы по URL /page7:

server {
….
location /page7/ {
auth_basic «HTTP Basic Authentication»;
auth_basic_user_file htpasswd;
}
….
}

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

г) также может потребоваться исключить авторизацию для некоторых вложенных скриптов. Это делается с помощью location и указания auth_basic off, например:

location /page7/ {
auth_basic «HTTP Basic Authentication»;
auth_basic_user_file htpasswd;
location ~ .(js|css|ttf|woff|woff2|otf)$ {
auth_basic off;
}
}

* в данном примере мы запрашиваем авторизацию для страниц, которые начинаются на /page7/ , но кроме файлов, которые заканчиваются на js, css, ttf, woff, woff2, otf .

д) еще один вариант, конда нам нужно требовать аутентификацию для всех, кроме некоторых IP-адресов:

server {
….
satisfy any;
allow 192.168.12.0/24;
deny all;

auth_basic «HTTP Basic Authentication»;
auth_basic_user_file htpasswd;
….
}

* в данном примере:

  • satisfy — со значением any разрешает доступ, если его разрешит allow или auth_basic .
  • allow — разрешает доступ для определенного адреса или подсети.
  • deny — запрещает доступ.
  • auth_basic — включает аутентификацию.

Создание файла с паролем

После настройки конфигурационного файла NGINX, генерируем хеш для пароля:

openssl passwd

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

Пароль должен быть длинной не более 10 символов.

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

vi /etc/nginx/htpasswd

test:dzeEYeVIDk38.

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

После перезапускаем NGINX:

nginx -t && nginx -s 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 .

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago