Настройка производительности и безопасности Nginx

? Настройка производительности и безопасности Nginx

В этом руководстве мы рассмотрим, как настроить веб-сервер Nginx для производственной среды.

Веб-сервер в производственной среде отличается от веб-сервера в тестовой среде с точки зрения производительности, безопасности и так далее.

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

Однако конфигурация по умолчанию недостаточно хороша для производственной среды.

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

Если вы еще не установили Nginx на свой компьютер, вы можете произвести настройки локально.

Выберите установку Nginx через исходные файлы, потому что предварительно собранный Nginx не поставляется с некоторыми модулями, используемыми в этом руководстве.

Требования

На вашем компьютере должно быть установлено следующее программное обеспечение и убедитесь, что вы запускаете это руководство на любой платформе на основе Debian, такой как например Ubuntu.

Понимание структуры конфигурации Nginx

В этом разделе мы рассмотрим следующее:

Раздел Main

Разделы

Разделы в Nginx определяют конфигурацию для модулей Nginx.

Например, раздел http определяет конфигурацию для модуля ngx_http_core, раздел event определяет конфигурацию для модуля ngx_event_module, а mail определяет конфигурацию для модуля ngx_mail_module.

Вы можете посмотреть здесь полный список разделов в Nginx.

Директивы

Директивы в Nginx состоят из имени переменной и ряда аргументов, например:

Worker_processes – это имя переменной, в то время как auto служит аргументом.

Директивы заканчиваются точкой с запятой, как показано выше.

Наконец, файл конфигурации Nginx должен соответствовать определенному набору правил.

Ниже приведен правильный синтаксис конфигурации Nginx:

Настройка производительности Nginx

В этом разделе мы настроим Nginx, чтобы он работал надежнее во время интенсивного потока или скачка трафика и скачка.

Workers

Предполагая, что вы не закрыли редактор vim, нажмите кнопку i на клавиатуре, чтобы отредактировать файл nginx. conf.

Скопируйте и вставьте следующее в раздел event, как показано ниже:

Ввод / вывод диска

В этом разделе мы сконфигурируем активность асинхронного ввода-вывода в Nginx, чтобы позволить ему осуществлять эффективную передачу данных и повышать эффективность кэширования.

Дисковый ввод / вывод просто относится к операциям записи и чтения между жестким диском и оперативной памятью.

Мы будем использовать функцию sendfile () внутри ядра для отправки небольших файлов.

Вы можете использовать раздел http, раздел location и раздел server для директив в этой области.

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

Скопируйте и вставьте следующий код в раздел location, встроенный в раздел HTTP.

Сетевой уровень

В этом разделе мы будем использовать директивы tcp_nodelay и tcp_nopush, чтобы предотвратить ожидание небольших пакетов в течение определенного периода времени около 200 миллисекунд, прежде чем они будут отправлены сразу.

Обычно, когда пакеты передаются «кусочками», они имеют тенденцию насыщать высоконагруженную сеть.

Поэтому Джон Нейгл создал алгоритм буферизации для решения этой проблемы.

Цель алгоритма буферизации Nagle – предотвратить насыщение небольших пакетов высоконагруженной сети.

Скопируйте и вставьте следующий код в раздел HTTP.

Буферы

Давайте посмотрим, как настроить буферы запросов в Nginx для эффективной обработк.

Буфер – это временное хранилище, где некоторое время хранятся и обрабатываются данные.

Вы можете скопировать настройки, показанные ниже в разделе server.

Компрессия

Сжатие объема данных, передаваемых по сети, – это еще один способ повысить производительность вашего веб-сервера.

В этом разделе мы будем использовать директивы, такие как gzip, gzip_comp_level и gzip_min_length, для сжатия данных.

Вставьте следующий код в раздел http, как показано ниже:

Кэширование

Используйте функции кэширования, чтобы сократить количество загрузок одних и тех же данных в несколько раз.

Nginx предоставляет функции для кэширования метаданных статического содержимого с помощью директивы

Тайм-аут

Сконфигурируйте время ожидания, используя директивы, такие как keepalive_timeout и keepalive_requests, чтобы предотвратить долгое ожидание соединений от потери ресурсов.

В разделе HTTP скопируйте и вставьте следующий код:

Настройка безопасности Nginx

Далее рассказывается только о том, как безопасно настроить Nginx а не само веб-приложения.

Таким образом, мы не будем рассматривать веб-атаки, такие как SQL-инъекция и так далее.

В этом разделе мы рассмотрим, как настроить следующее:

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

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

Используя HTTP-аутентификацию

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

Запустите следующую команду, чтобы установить утилиту создания файла паролей, если вы ее еще не установили.

Затем создайте файл паролей и пользователя, используя инструмент htpasswd, как показано ниже.

Инструмент htpasswd предоставляется утилитой apache2-utils.

Вы можете подтвердить, успешно ли вы создали пользователя и случайный пароль, с помощью следующей команды

Используя директиву Allow

В дополнение к директиве basic_auth мы можем использовать директиву allow для ограничения доступа.

Внутри раздела location вы можете использовать следующий код, чтобы разрешить указанным IP-адресам доступ к конфиденциальной области.

Настрйка логов для мониторинга вредоносных действий

В этом разделе мы настроим журналы error и access, чтобы специально отслеживать допустимые и недействительные запросы.

Вы можете просмотреть эти логи, чтобы выяснить, кто подключился и в какое время, или какой пользователь получил доступ к определенному файлу и так далее.

Внутри раздела HTTP вы можете использовать следующую настройку:

Предотвращение DDOS

Вы можете защитить Nginx от DDOS-атаки следующими способами:

Ограничение запросов пользователей

Вы можете использовать директивы limit_req_zone и limit_req, чтобы ограничить частоту запросов, отправляемых пользователями в течение нескольких минут.

Добавьте следующий код в раздел location, встроенный в раздел server.

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

Вы можете использовать директивы limit_conn и limit_conn_zone, чтобы ограничить соединение с определенными местоположениями или областями.

Например, приведенный ниже код позволяет 15 соединений от клиентов за определенный период.

Следующий код должен быт помещен в раздел location.

Завершить медленные соединения

Вы можете использовать директивы timeouts, такие как client_body_timeout и client_header_timeout, чтобы контролировать, как долго Nginx будет ожидать записи из тела и заголовка клиента.

Добавьте следующее в разделе server.

Отключить список каталогов

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

Вам нужно установить его в значение off, чтобы отключить список каталогов.

Заключение

Мы настроили веб-сервер Nginx для эффективной работы и защиты от чрезмерного злоупотребления ресурсов в производственной среде.

Источники:

https://itsecforu. ru/2020/02/25/%F0%9F%8C%90-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B8-%D0%B1%D0%B5/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: