#nginx

10 постов
пост №1728Разработка и инженерия

Максим Дунин, один из ключевых разработчиков Nginx, форкнул проект, то есть сделал его копию, которую будет развивать независимо.

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

Это разработка российского инженера Игоря Сысоева из времен Рамблера (олды помнят). 4 года назад её купил американский F5, Рамблеру это не понравилось, Игоря какое-то время держали под арестом в Москве, в общем тот ещё блокбастер, мы даже делал специальный эпизод подкаста про это.

В 2022 году московский офис компании закрыли, Максим остался в России и, по его словам, работал над проектом как волонтер.

Причиной для развода Максим называет то, что компания f5 присвоила формальный номер (CVE) двум уязвимостям: CVE-2024-24989 и ...90, хотя разработчики, по его словам, были против, потому что это экспериментальный код. Говорит, freenginx — проект, свободный от корпоративного контроля.

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

Пока что ничего менять не нужно, пользуемся nginx как и раньше. Надеюсь, что происходящее не помешает развитию проекта.

Такие вот драмы в мире сисадминов!

пост №1204Разработка и инженерия

Карагодина Степана Ивановича расстреляли 21 января 1938. Почти у всех нас в России есть истории, связанные с большим террором — у кого-то предков сослали или расстреляли, кто-то — потомок палачей, бывает и оба вместе. Денис Карагодин уже много лет делает удивительный проект — расследует, кто и как убил его прадеда.

Позавчера Денис опубликовал на своем сайте востановленные нейросетями цветные фотографии убийц и предсмертную записку руководителя Томского НКВД. Смотреть жутко, потому что это обычные фотографии обычных людей, ничего особенного на лицах нет.

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

У Дениса, как и у многих медиа, wordpress на виртуалке и cloudflare для защиты от DDoS. Но, также как у многих, у него не были правильно настроены кеши. Кеш — это подготовленный заранее ответ сервера, который хранится в памяти и отдается по запросу пользователя практически мгновенно, с минимальной нагрузкой на сервер. Кешировать сайт можно на многих уровнях, начиная с самого вордпресса, заканчивая nginx и серверами cloudflare.

Я выбрал самый простой и бронебойный вариант — на серверах cloudflare. В этом способе запросы читателей вообще не доходят до вашего сервера, все страницы (из кеша) отдают серверы Cloudflare. Для того, чтобы его включить нужно: 1) настроить агрессивное кеширование в админке cloudflare; 2) порой ещё нужно настроить заголовки ответа сервера, которые разрешают кеширование страниц, для этого достаточно добавить две строчки в конфигурацию nginx. Voilà!

Ну а дальше я сконтачил Дениса с Васей Озеровым, основателем классной компании сисадминов fevlake, чтобы они потом сделали всё основательно и на века. Кстати, у Васи есть классный канал про devops, рекомендую.

Обращайтесь к нам с Федей, мы делаем так, чтобы сайты не падали!

пост №1115Разработка и инженерия

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

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

Кстати, про лямбды: для того, чтобы не попасть под блокировки РКН, пришлось завернуть все запросы через наш собственный nginx, расположенный в России. Не забывайте про это, если работаете в России.

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

пост №1071Разработка и инженерия

Первый эпизод по новостному поводу, про nginx! 90% эпизода — про технологии: что такое Nginx, почему и где он используется, что в нем нравится, а что — бесит. 10% — эмоции, получилось жарко и даже немного стыдно.

А ещё это первый эпизод, в котором два гостя, с которыми до записи я не был знаком даже шапочно.

Гости: Данила Штань, технический директор Яндекс.Вертикалей (Авто.ру, Яндекс.Недвижимость и Яндекс.Работа) и Дима Столяров — технический директор крупного русского devops аутсорсера Фланта.

Го слушать, мы создали: Apple, Google, Castbox, Spotify, Яндекс, Overcast, веб-версия.

пост №1064Технологии и общество

Nginx — один из главных русских экспортных IT-продуктов. Этой программой пользуются самые крупные сайты на свете, а саму компанию полгода назад купил американский гигант F5 за 670 миллионов долларов.

Сегодня Rambler предъявил претензии на эту программу. В офисе Nginx в Москве обыски. Ходят слухи, что основатели компании задержаны.

Да, Игорь Сысоев работал на Rambler, когда писал nginx. Допустим, там есть нерешенные вопросы с правами. Хотя, не представляю себе ситуации, когда F5 купил Nginx за 670 миллионов и не провел внимательный due diligence. Но зачем обыск в офисе? Зачем задержания?

Стыдно, что наше государство раз за разом говорит «сделали что-то ценное? валите не задерживаясь, пока не отобрали».

[vc]

пост №976Разработка и инженерия

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

У нас в результате запросы шли мимо кеша, сильно выросло время ответа сервера. Самое обидное (и стыдное), что на это не был включен мониторинг, так что мы узнали о проблеме только через несколько дней. Правило: все важные метрики должны быть заведены в мониторинг.

Интересно, что ввели мы дополнительную куку из-за изменений в Safari. Для большей приватности Safari начал сбрасывать куку поставленную через javascript, а не с сервера (чтобы рекламщики не могли следить за всеми). Если вы владелец макбука или айфона и вас регулярно выкидывает с сайтов — проблема именно в этом.

Такая вот цепочка событий.

upd: читатели замечают, что это поведение nginx — известная «фича, а не баг». Вот так и выдали мы себя, что не настоящие мы сварщики (админы), а только мимикрируем :)

пост №947Разработка и инженерия

Эти три поста — мини-ода серверу Nginx и его создателю Игорю Сысоеву. Я не написал о покупке компании NGINX американским гигантом F5 за 670 миллионов долларов в феврале (профайл в Ведомостях и в Форбсе), исправляюсь.

Nginx — это скотч веб-разработчика. Вы ведь знаете, что именно с помощью скотча астронавты починили свой автомобиль на луне? С помощью Nginx можно скрепить разные части сайта между собой (микросервисы, ау), ускорить сайт с помощью кеширования (скорость работы Медузы и RAWG), серьезно сэкономить на хостинге и даже защититься от DDoS-атак. Nginx поддерживает и простейшие одностраничные сайты и гигантские корпорации. Это сервер, который вобрал в себя лучшее от таможни, DHL и завода.

Мы с коллегами недавно сделали с помощью nginx две необычные вещи, которыми я хочу поделиться.

Во-первых, перевели один очень старый сайт с http на https (это улучшает позиции в гугле), по пути убрали www из всех адресов и добавили кеширование, так что сайт стал открываться раз в 10 быстрее.

Интересная часть в том, что на сайте было много хардкод-адресов http://www..., и поменять исходный код было решительно невозможно (старый perl), так что мы использовали модуль ngx_http_sub_module, который позволяет переписать содержимое ответа на лету.

Мы не поменяли ни одной строки кода в движке сайта, все изменения — через настройки nginx.

Во-вторых, добавили щепотку динамического контента в кешированные nginx'ом страницы. Под нагрузкой наш django + react сервер отвечает не очень быстро. Для того, чтобы сайт отвечал мгновенно — мы кешируем странички для анонимов, то есть регулярно пересчитываем их, а при запросах мгновенно отдаем последнюю сохраненную версию.

Для проверки одной SEO-гипотезы нам потребовалось добавить несколько случайных ссылок на каждую страницу. Казалось, nginx-кеширование и динамический контент не сочетаются. Но нет, выручил SSI — технология родом из 1993, когда писали статический html-код страниц, а динамику добавляли маааленькими кусочками. Мы добавили в код своих страниц <include>, так что основная страница кешируется как и раньше, а блок со ссылками быстро отдается отдельным быстрым микросервисом.

Да здравствует nginx и инженеры, умеющие с ним управляться!

пост №392Разработка и инженерия

Выпустили книгу, сделали для неё лендинг https://special.meduza.io/book/

Хороший повод рассказать, как мы делаем такие страницы.

У нас есть git-репа static, пуш в master-ветку которого триггерит пулл на сервере, раздающем всю папку в meduza.io/static. Так отдаются страницы типа «О проекте», много разных временных файлов и спецпроекты.

Если спецпроекту нужен красивый адрес — создается nginx роут в домене special.meduza.io. Пример — конференция «Шторм» и книга «Как жить».

Обратите внимание, мы не используем отдельные домены для каждого проекта. Заведении новых доменов, выпуск SSL-сертификатов, включение anti-DDoS механизмов, когда нужно быстро переключить IP адреса — слишком много задач для автоматизации. В результате вся user-facing Медуза живет на двух доменах: основной meduza.io для читателей и mdza.io для коротких ссылок.

пост №281Разработка и инженерия

Отлаживаем отправку статистики из мобильных приложений.

Делаем на сервере tail -f /sv/log/nginx/access.log | grep 'stat/put' | grep 92. и видим пустоту, хотя если оставить только первый grep — то всё нормально. Это мы пытаемся в реальном времени вывести на экран все обращения к определенным ссылкам на сервере с определенных IP-адресов.

Оказывается, дело в буферизации и добавление параметра --line-buffered к grep'у решает проблему.

Век живи — век учись.