Как стать автором
Обновить
1.2

Nginx *

Веб-сервер и почтовый прокси-сервер

Сначала показывать
Порог рейтинга
Уровень сложности

Как настроить Nginx в качестве балансировщика нагрузки

Время на прочтение 9 мин
Количество просмотров 55K

Что такое балансировка нагрузки?


Балансировка нагрузки подразумевает эффективное распределение входящего сетевого трафика между группой бэкенд-серверов. Задача же регулятора — распределить нагрузку между несколькими установленными бэкенд-серверами.

Существует несколько типов балансировщиков нагрузки:

  • Балансировщик нагрузки приложений.
  • Сетевой балансировщик нагрузки.
  • Балансировщик нагрузки шлюза.
  • Классический балансировщик нагрузки.
Читать дальше →
Всего голосов 25: ↑21 и ↓4 +17
Комментарии 22

Босяцкий кластер высокой доступности

Время на прочтение 8 мин
Количество просмотров 16K

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

Читать далее
Всего голосов 50: ↑45 и ↓5 +40
Комментарии 41

Как я создавал собственный сервер трансляции видео на базе домашнего ПК

Время на прочтение 10 мин
Количество просмотров 23K

Сразу хочу отметить, что в Интернете много статей на похожую тему, но каждая статья имеет те или иные нюансы. Здесь я напишу про свой личный опыт.

История примерно такая. В нашем городе имеется своё местное телевидение. Оно транслируется в сети кабельного телевидения в аналоговом и цифровом (DVB-C) виде. Точнее, оно транслируется в определённое время по полчаса в день на телеканале-партнёре (в нашем случае – телеканал «Продвижение»). Кабельное телевидение доступно не каждому жителю. В основном оно протянуто в многоквартирных домах, каковым мой дом не является. А до сентября прошлого года телеканал местного ТВ вещали в ДМВ диапазоне в аналоговом виде. Именно этот и только этот телеканал я и смотрел, пока не прекратили вещание. Также имеется канал местного телевидения на ютубе, но там информация публикуется только на следующий день после премьеры. И то, информация не полная, только видеосюжеты. Мне пришла такая идея: сделать каким-то образом передачу местного телеканала с кабельного телевидения к себе домой через Интернет. У многих моих хороших знакомых в квартире есть кабельное телевидение. На базе одного из них я и решил осуществить задуманное.

Читать далее
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 10

Как я развёртывал прямой proxy на базе nginx

Уровень сложности Средний
Время на прочтение 6 мин
Количество просмотров 28K

Ты как специалист в области IT, после февральских событий скорее всего столкнулся с проблемой недоступности некоторых ресурсов и наверняка подумал о том, как это дело обойти. Но использовать "бесплатный" или сторонний сервис кажется небезопасным или не даёт нужную ширину канала. У тебя есть навыки работы с Linux и свой сервер где-нибудь за бугром. Почему бы собственно говоря не сделать свой прямой прокси?

Читать далее
Всего голосов 11: ↑8 и ↓3 +5
Комментарии 38

Истории

Шифруем передаваемые на сайт данные с алгоритмом на основе хаотической системы Лоренца

Время на прочтение 10 мин
Количество просмотров 3.1K

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

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

За основу взял систему дифференциальных уравнений Лоренца и написал новый алгоритм шифрования на njs – на практике это можно применить, например, для шифрования данных на веб-сервере. В посте расскажу, почему Лоренц, почему njs, какие есть варианты реализации и ограничения у выбранного решения.

Читать далее
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 7

Развертывание GitLab CE в контейнерах Docker за обратным прокси

Время на прочтение 3 мин
Количество просмотров 27K


В этом руководстве мы рассмотрим, как быстро поднять свой GitLab сервер на контейнерах Docker, находящийся за обратным прокси сервером NGINX. Предполагается, что у вас уже установлен движок контейнеризации приложений Docker и Compose, а также обратный прокси сервер NGINX.
Читать дальше →
Всего голосов 3: ↑3 и ↓0 +3
Комментарии 12

Веб-приложение для видеотрансляций на Laravel

Время на прочтение 12 мин
Количество просмотров 5.4K

Привет, Хабр. В этой статье я хочу поделиться своим опытом создания приложения на фреймворке Laravel по трансляции видеоконтента. Итак начнём.

Проект опубликован как свободное ПО

Читать далее
Всего голосов 13: ↑11 и ↓2 +9
Комментарии 4

Как я разогнал fail2ban* в тысячу раз с помощью SIMD

Время на прочтение 15 мин
Количество просмотров 20K

Fail2ban — утилита чрезвычайно полезная во многих случаях. Думаю, многие используют её для того, чтобы в автоматическом режиме блокировать особенно назойливых «посетителей». К сожалению, если входящий поток становится слишком большим, fail2ban теряет все свои полезные свойства, потому что разбор лога безнадёжно отстаёт от реальности.

Лог nginx из 100 тысяч строчек fail2ban при самых простых настройках разбирает порядка 45 секунд. Нехитрыми манипуляциями его можно ускорить раз в 6, но этого оказалось недостаточно. Наивная реализация на аналогичного фильтра на Rust уже обеспечила требуемую производительность, но если уж взялся за оптимизацию, то остановиться трудно.

* только необходимую часть функционала

Читать далее
Всего голосов 121: ↑119 и ↓2 +117
Комментарии 76

Как защититься от dos/ddos, или Как я начал вновь высыпаться по ночам

Время на прочтение 16 мин
Количество просмотров 24K

Приветствую тебя, дорогой читатель. Скорее всего, если ты это читаешь, то уже очень устал получать кучу алертов о том, что твоя площадка загибается от регулярных набегов печенегов ботов или других нежелательных посетителей контента. Я надеюсь, что эта статья поможет тебе спать спокойно и оградит тебя от недугов, а также внесет больше ясности в твое понимание теории и практики защиты от dos и ddos. Приятного чтения!

Читать далее
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 33

Как избежать 10 частых ошибок в настройке NGINX

Время на прочтение 17 мин
Количество просмотров 51K


Помогая пользователям NGINX с разрешением проблемных ситуаций, мы поняли, что большинство из них часто совершает одни и те же ошибки конфигурации. Более того, подобные ситуации вполне могут возникнуть даже у самих инженеров NGINX! В этой статье рассмотрим 10 наиболее распространенных ошибок и объясним как их исправить.


  1. Недостаточное количество файловых дескрипторов;
  2. Директива error_log off;
  3. Отсутствие keepalive-соединения с вышестоящими серверами;
  4. Упущение механизмов наследования директив;
  5. Директива proxy_buffering;
  6. Неправильное использование директивы if;
  7. Чрезмерные проверки работоспособности;
  8. Незащищенный доступ к метрикам;
  9. Использование ip_hash, когда весь трафик поступает из одного и того же блока /24 CIDR;
  10. Игнорирование преимуществ вышестоящих групп.
Читать дальше →
Всего голосов 70: ↑70 и ↓0 +70
Комментарии 3

Кэш HTML на стороне NGINX с помощью Redis

Время на прочтение 6 мин
Количество просмотров 4K

Я поставил задачу сделать Кэш как можно проще, чтоб не увеличивать сложность сервиса и уровень вхождения программистов. На ум сразу приходит Varnish, и подобные инструменты выглядели заманчиво, но они кажутся оверхедом для такой задачи. Пилить микросервисы или масштабировать сервера тоже

Основная проблема - связать кэш с логикой, чтоб кэш сбрасывать только при изменениях. Если внутри Laravel или другого фреймворка мы имеем доступ к бизнес логике зависимых сущностей, то на стороне nginx у нас только параметры запроса.

Читать далее
Всего голосов 5: ↑2 и ↓3 -1
Комментарии 17

Tile server на коленке: навигация по старинным картам

Время на прочтение 5 мин
Количество просмотров 7.6K

Я являюсь full stack разработчиком на культурно-историческом IT портале Königsland, который успешно начал свою работу примерно месяц назад. Этот ресурс посвящается культуре и истории Восточной Пруссии и является своеобразной летописью времен, которая больше всего напоминает вирутальный музей, где можно получить довольно полную информацию об истории этого великого края, а эта информация пополняется по мере возникновения у меня свободного времени.

Страницы этой летописи приоткрывают завесу тайны и позволяют получить пользу от современных технологий тем, кто увлекается стариной.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 14

Рецепты Nginx: локализация страниц об ошибках

Время на прочтение 3 мин
Количество просмотров 4.7K

Для приготовления локализации страниц об ошибках нам понадобится сам nginx и его плагины error_page_inherit и include_server. Конечно, такую локализацию можно сделать и без этих плагинов, но у неё будет несколько недостатков. Во-первых, если в каком-то локейшене задаётся своя страница об ошибке, то все страницы об ошибках из предыдущих уровней не наследуются для этого уровня. Эту проблему решает первый плагин, позволяя наследовать страницы сообщений об ошибках. А, во-вторых, для каждого сервера придётся вручную включать локейшен обработки страницы об ошибке. И эту проблему как раз решает второй плагин, позволяя наследовать подключение файлов из главной конфигурации во все сервера.

Итак
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 3

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

Прикручиваем авторизацию на основе KeyCloak к веб-приложению

Время на прочтение 14 мин
Количество просмотров 58K

Жизненный цикл разработки корпоративного приложения в нашей компании привел меня к, по сути, банальной задаче - “прикручиванию” пользовательской авторизации к фронту приложения. Пользователями приложения должны быть сотрудники компании, а идентификационным провайдером должен стать корпоративный Active Directory (далее AD).

Было принято решение не работать с AD напрямую при авторизации сотрудников в корпоративных приложениях, а использовать для этого довольно удобный брокер авторизации – KeyCloak.

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 5

Кросс-компиляция NGINX (для случая GCC)

Время на прочтение 7 мин
Количество просмотров 3.2K

NGINX — это HTTP-сервер и обратный прокси-сервер, почтовый прокси-сервер, а также TCP/UDP прокси-сервер общего назначения, изначально написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных сайтов.


Однако кросс-компиляция NGINX практически невозможна, поскольку разработанные Игорем Сысоевым скрипты конфигурирования исходного кода в большинстве случаев используют так называемую процедуру «Try Run».


Те кто знаком с утилитами Autoconf, Automake знают, что проверки необходимых параметров системы и кросс-компилятора осуществляются различными процедурами, которые, в свою очередь, могут применять попытки сборки исходного кода (Try compile), линковки объектных файлов (Try link) и, наконец, попытки запуска тестовых программ (Try Run).


Естественно, если речь идет о кросс-сборке, операции «Try Run» недопустимы, ведь мы не можем запустить программу, собранную под целевую архитектуру отличающуюся от архитектуры машины сборки на самой машине сборки.


В Autotools проблемы, связанные с невозможностью запуска целевых программ на сборочной машине в некоторых случаях решаютcя кешированием переменных, которые могу быть переопределены пользователем в файле --cache-file или заданы в командной строке вызова скрипта ./configure.


Скрипты Игоря Сысоева не предусматривают такого переопределения машинно-зависимых величин. Однако величин, которые необходимо задать во время конфигурирования исходных кодов NGINX достаточно много. К ним, в первую очередь, относятся размеры типов данных. Именно с них мы и начнем.


Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 0

cors-anywhere на чистом конфиге nginx

Время на прочтение 5 мин
Количество просмотров 20K

Если вы сталкивались с CORS, то знаете всю ту боль, которую испытывает разработчик, когда нужно сходить к API на другом домене. Если конфигурация сервера не доступна для настройки, то использовали какое-нибудь решение на основе не менее популярного решения cors-anywhere.

Не одним CORS едины
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 12

Рецепты Nginx: авторизация через auth0

Время на прочтение 3 мин
Количество просмотров 8K

Для приготовления авторизации через auth0 нам понадобится сам nginx и его плагины encrypted-session, headers-more, auth_request, set-misc, echo, json, evaluate и jwt. Можно также воспользоваться готовым образом.

Для начала
Всего голосов 5: ↑5 и ↓0 +5
Комментарии 3

Флаг EPOLLEXCLUSIVE и проблема неравномерного распределения соединений в Nginx на Linux

Время на прочтение 5 мин
Количество просмотров 5.6K

Совсем недавно, 25 января 2022 года вышел новый релиз Nginx - 1.21.6, в котором исправлена проблема неравномерного распределения входящих соединений между несколькими worker процессами в дефолтной конфигурации на Linux системах. Если конкретнее - use epoll, accept_mutex off, reuseport выключен.

В данной конфигурации при определенном характере нагрузки большинство входящих в Nginx соединений обрабатывается лишь одним worker процессом. 

Насколько я понимаю, эта проблема существует уже более пяти лет и берет начало в версии 1.11.3 (Jul 2016), когда в Nginx по умолчанию отключили accept_mutex, а вместо него стали полагаться на флаг EPOLLEXCLUSIVE, появившийся в ядре Linux 4.5.

Стоит заметить, что проблема балансировки входящих соединений при использовании механизма epoll и флага EPOLLEXCLUSIVE более глобальна и касается не только Nginx, а любых сетевых приложений, работающих по аналогичной схеме.

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

Читать далее
Всего голосов 31: ↑29 и ↓2 +27
Комментарии 24

Базовые принципы Availability

Время на прочтение 5 мин
Количество просмотров 11K

О чем статья

В этой статье речь пойдет о БАЗОВЫХ подходах и принципах к такому quality attribute (QA) как Availability. Никаких сложных случаев, ничего слишком сложного, только теория с двумя примерами, скипайте, если искали что-то эдакое.

Вся информация основана на парах книг, статей, и моем опыте. В конце статьи я покажу, какие именно. Также, эта статья - по суть перевод моей же статьи, только написанной на английском.

Что такое Availability?

Перед тем, как рассматривать паттерны и техники для обеспечения availability мы должны определить сам термин.

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 0

Кибербезопасность для самых маленьких

Время на прочтение 10 мин
Количество просмотров 29K

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

Цель статьи - поделиться практиками, которые я применил для защиты данных при поднятии собственного VPS в публичной сети. Всегда, когда твой IP открыт всему Миру напоказ и доступен извне внутренних контуров сети - это означает, что любой прохожий может устроить тебе неприятности: похитить твои данные, завладеть твоим сервером и сломать твое замечательное приложение. Я буду приводить пример атаки, показывать, как ее можно заметить и после этого будем разбирать возможные способы защиты.

Защитить данные!
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 32

Вклад авторов