Как стать автором
Поиск
Написать публикацию
Обновить
22.07

Nginx *

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

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

Как мы в ZeroTech подружили Apple Safari и клиентские сертификаты с websocket-ами

Время на прочтение10 мин
Количество просмотров1.4K
Статья будет полезна тем, кто:

  • знает, что такое Client Cert, и понимает для чего ему websocket-ы на мобильном Safari;
  • хотел бы публиковать web-сервисы ограниченному кругу лиц или только себе;
  • думает, что всё уже кем-то сделано, и хотел бы сделать мир немного удобнее и безопаснее.

История веб-сокетов началась примерно 8 лет назад. Ранее использовались методы вида долгих http-запросов (на самом деле ответов): браузер пользователя отправлял запрос на сервер и ждал, пока он ему что-то ответит, после ответа подключался вновь и ждал. Но потом появились веб-сокеты.
Читать дальше →

Расширенная настройка web сервера (Apache2 + Nginx)

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

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


В этой статье будет идти речь о настройке сервера с использованием: Apache2, Nginx, ngx_pagespeed, PHP, PHP-FPM, MariaDB и MemCached.

Читать дальше →

Деплой приложения на Laravel 7 на Ubuntu & Nginx

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

Laravel 7 Logo


Решил я тут своё портфолио сделать на Laravel 7. Чтобы главная страница была лендингом, а всю информацию на ней можно было менять с помощью админки. Не суть. Дело дошло до деплоя. Нашел пару хороших туториалов, как это сделать на полноценном сервере со всеми заморочками. В деплое я не очень силен, я вообще больше фронт, чем фулстек. И, если писать и тестить на PHP я еще могу, то до управления сервером и т.п. я еще не дорос. Но пришлось разбираться.


Сейчас пройдемся по всем шагам, начиная с запуска через SSH и заканчивая рабочим сайтом. Постараемся обойти все подводные камни.


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

Читать дальше →

Что такое Service Mesh?

Время на прочтение5 мин
Количество просмотров82K
И снова здравствуйте!.. В преддверии старта курса «Архитектор ПО» мы подготовили еще один полезный перевод.




Service Mesh – это конфигурируемый инфраструктурный уровень с низкой задержкой, который нужен для обработки большого объема сетевых межпроцессных коммуникаций между программными интерфейсами приложения (API). Service Mesh обеспечивает быструю, надёжную и безопасную коммуникацию между контейнеризированными и часто эфемерными сервисами инфраструктуры приложений. Service Mesh предоставляет такие возможности, как обнаружение сервисов, балансировку нагрузки, шифрование, прозрачность, трассируемость, аутентификацию и авторизацию, а также поддержку шаблона автоматического выключения (circuit breaker).
Читать дальше →

Программируем прямо в Nginx

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


Nginx — великолепный веб-сервер. Все мы привыкли использовать его в связке с бекендами на разных языках программирования. Но оказывается можно писать простые программы прямо внутри конфигурационного файла Nginx. Это можно использовать для балансировки, написания простых API и даже отдавать динамические страницы прямо из конфига.

В статье мы разберем примеры написания простых программ в конфиге nginx.
Читать дальше →

Приглашаем на DINS DevOps EVENING (online): эволюция Prometheus и Zabbix и обработка логов Nginx в ClickHouse

Время на прочтение2 мин
Количество просмотров1.8K
Онлайн-митап состоится 26 мая в 19:00.

Вячеслав Швецов из DINS расскажет, какие процессы происходят при эволюции систем мониторинга, и подробнее остановится на архитектурных особенностях Prometheus и Zabbix. Глеб Гончаров из FunBox поделится опытом сборки логов Nginx с хранением в ClickHouse. Оба спикера приведут примеры из практики и ответят на вопросы аудитории.

Регистрируйтесь по ссылке, чтобы присоединиться.

Под катом — информация о спикерах и подробная программа.
image
Читать дальше →

HTTP по UDP — используем с пользой протокол QUIC

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


QUIC (Quick UDP Internet Connections) — это протокол поверх UDP, поддерживающий все возможности TCP, TLS и HTTP/2 и решающий большинство их проблем. Его часто называют новым или «экспериментальным» протоколом, но он уже давно пережил стадию эксперимента: разработка ведётся более 7 лет. За это время протокол не успел стать стандартом, но всё же получил широкое распространение. Например, QUIC используют для ускорения трафика и снижения задержек в мобильных сетях такие гиганты как Google и Facebook, а IETF объявила свой форк протокола основой для стандарта HTTP/3 (при том, что HTTP/2 использует только 44.8% сайтов).
Читать дальше →

Несколько советов о том, как ускорить сборку Docker-образов. Например, до 30 секунд

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

Прежде чем фича попадет на прод, в наше время сложных оркестраторов и CI/CD предстоит пройти долгий путь от коммита до тестов и доставки. Раньше можно было кинуть новые файлы по FTP (так больше никто не делает, верно?), и процесс «деплоя» занимал секунды. Теперь же надо создать merge request и ждать немалое время, пока фича доберётся до пользователей.


Часть этого пути — сборка Docker-образа. Иногда сборка длится минуты, иногда — десятки минут, что сложно назвать нормальным. В данной статье возьмём простое приложение, которое упакуем в образ, применим несколько методов для ускорения сборки и рассмотрим нюансы работы этих методов.


Читать дальше →

Настройка Debian, Nginx и Gunicorn для Django проекта

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


Всем доброго времени суток.

Была задача поднять свой Debian сервер на Nginx для проектов Django 3.х. Перерыв кучу информации в интернете, удалось это сделать соединив рекомендации с нескольких разных сайтов. Если вам интересно почитать, как настроить свой первый сервер для Django-проекта, то — добро пожаловать.
Читать дальше →

Linux Kernel TLS и Nginx

Время на прочтение4 мин
Количество просмотров13K
В этой статье я расскажу об истории развития и текущем состоянии технологии ускорения раздачи контента в TLS соединениях путем переноса шифрования в ядро операционной системы, а так же о своём вкладе в развитие этого направления.
Читать дальше →

Грабли на пути к keep-alive

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

Увеличение активности обмена данными между микросервисами зачастую является проблемой в архитектуре современных IT решений. Выжать максимум и выжить любой ценой — серьёзный вызов для любой разработки. Поэтому поиск оптимальных решений — это не прекращающийся процесс. В статье кратко изложены проблемы, которые могут возникнуть при высоконагруженном использовании http запросов и пути их обхода.

Читать дальше →

Об одной уязвимости в…

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


Год назад, 21 марта 2019, в баг баунти программу Mail.ru на HackerOne пришел очень хороший багрепорт от maxarr. При внедрении нулевого байта (ASCII 0) в POST-параметр одного из API-запросов веб-почты, который возвращал HTTP-редирект, в данных редиректа виднелись куски неинициализированной памяти, в которых чаще всего раскрывались фрагменты из GET-параметров и заголовков других запросов к тому же серверу.
Читать дальше →

Установка VestaCP на VPS, использование docker для понижения версии PHP

Время на прочтение7 мин
Количество просмотров8K
Доброго времени!

Оставлю тут решение для своего хостинга на VPS за 5 евро, в основном с целью сохранить реализацию решения по своей проблеме.

Несколько лет назад я арендовал выделенный сервер под 20+ сайтов, файлообменник, базу даных на PostgreSQL для 1С, почтовый сервер IMAP. В качестве панели управления использовал ISPmanager с «вечной» лицензией, в качестве ОС был использован изначально CentOS 7 (или даже 6), который я не очень уважаю, больше нравится Debian/Ubuntu. В дальнейшем проекты уходили в соцсети, сайты переставали быть необходимыми, доменные имена освобождались.

В 2019 году я понял, что реально крутится мой сайт и два сайта клиентов, потребность в IMAP с хранением писем на хостинге только у меня, файлообменники так же ушли в облачные сервисы.



Что делать, если один сайт на хостинге не работает с PHP выше 5.4
Читать дальше →

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

Envoy. 1. Введение

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

Приветствую! Это небольшая статья, отвечающая на вопросы: "что такое envoy?", "зачем он нужен?" и "с чего начать?".


Что это


Envoy — это L4-L7 балансировщик написанный на С++, ориентированный на высокую производительность и доступность. С одной стороны, это в некотором роде аналог nginx и haproxy, соизмеримый с ними по производительности. С другой, он больше ориентирован под микросервисную архитектуру и обладает функционалом не хуже балансировщиков на java и go, таких как zuul или traefik.


Таблица сравнения haproxy/nginx/envoy, она не претендует на абсолютную истину, но дает общую картину.


nginx haproxy envoy traefik
звезд на github 11.2k/mirror 1.1k/mirror 12.4k 27.6k
написан на C C C++ go
API нет socket only/push dataplane/pull pull
active healthcheck нет да да да
Open tracing внешний плагин нет да да
JWT внешний плагин нет да нет
Расширение Lua/C Lua/C Lua/C++ нет
Читать дальше →

Ресайз изображений на лету с помощью Nginx и LuaJIT (OpenResty)

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

Уже довольно давно, вдохновившись статьей Ресайз изображений на лету был настроен ресайз изображений с помощью ngx_http_image_filter_module и все работало как надо. Но появилась одна проблема, когда менеджеру понадобилось получать изображения с точными размерами для заливки на некоторые сервисы, т.к. это были их технические требования. К примеру, если мы имеем оригинал изображения размером 1200x1200, и при ресайзе мы пишем что-то вроде ?resize=600x400, то получим пропорционально уменьшенное изображение по наименьшему краю, размером 400x400. Так же невозможно получить изображение с бОльшим разрешением (upscale). Т.е. ?resize=1500x1500 вернет все тоже изображение 1200x1200


На помощь пришла статья OpenResty: превращаем NGINX в полноценный сервер приложений для понимания как работает Nginx с Lua и сама библиотека для Lua isage/lua-imagick — Lua pure-c bindings to ImageMagick. Почему было выбрано такое решение, а не, скажем, что-нибудь на python — потому что это быстро и удобно. Вам даже не понадобится создавать никаких файлов, все прямо в конфиге Nginx (не обязательно).

Читать дальше →

Поднимаем свой инстанс Webogram с проксированием через nginx

Время на прочтение6 мин
Количество просмотров8.6K
Привет, Хабр!

Недавно я попал в ситуацию, в которой необходимо было работать внутри корпоративной сети с неполным доступом к интернету и как вы можете догадаться по заголовку — Telegram в ней был заблокирован. Уверен, что данная ситуация знакома многим.

Я вполне могу обходиться без мессенджеров, однако именно Telegram мне нужен был для работы. Установить клиент на рабочую машину не представлялось возможным, использовать личный ноутбук — тоже. Еще одним решением видится использовать его официальную веб-версию, но как вы можете догадаться — она так же была недоступна. Вариант с поиском неофициального зеркала я сразу вычеркиваю (надеюсь по вполне очевидным причинам).

К счастью, Webogram — это opensource-проект, исходный код которого доступен в github его автора (За что огромное ему спасибо!)
Сама установка и запуск не представляет из себя ничего сложного, однако, в условиях эксплуатации внутри сети с заблокированным доступом к серверам Telegram вас скорее ждет разочарование, чем успех, так как веб-версия отправляет запросы на серверы Telegram с машины пользователя.

К счастью, это довольно просто (но не очень очевидно) исправить. Хочу предупредить, что я не являются автором данного решения. Мне удалось найти его в ветке, в которой обсуждалась проблема похожая на мою. Решение, которое предложил пользователь github tecknojock, мне очень помогло, однако, уверен, что оно может помочь еще кому нибудь, поэтому решился на написание данного туториала.

Под катом вас ждет пошаговая настройка своего зеркала Webogram и настройка проксирования его запросов до серверов Telegram с использованием nginx.
Читать дальше →

И снова капча или nginx тоже умеет вышивать

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

Введение


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


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

Читать дальше →

Nginx-log-collector утилита от Авито для отправки логов nginx в Clickhouse

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

Я из компании Luxoft.
В этой статье будет рассматриваться проект nginx-log-collector, который будет читать логи nginx, отправлять их в кластер Clickhouse. Обычно для логов используют ElasticSearch. Для Clickhouse требуется меньше ресурсов (дисковое пространство, ОЗУ, ЦПУ). Clickhouse быстрее записывает данные. Clickhouse сжимает данные, что делает данные на диске еще компактнее. Преимущества Clickhouse видны по 2 слайдам с доклада Как VK вставляет данные в ClickHouse с десятков тысяч серверов.




При этом за счёт сжатия данных «Кликхаус» использует в 11 раз меньше на жёстком диске и делает примерно в 30 раз меньше дисковых операций (из поста https://habr.com/ru/company/ua-hosting/blog/486540/):



Для просмотра аналитики по логам создадим дашборд для Grafana.


Кому интересно, добро пожаловать под кат.

Читать дальше →

[Nginx] Как победить response_status = 0

Время на прочтение2 мин
Количество просмотров7.6K
Статья из разряда «заметки на полях».

TL:DR:
http2_max_field_size 8k; # всех спасет!


На одном из проектов, после изменения некоторой внутренней логики бекенда, начал наблюдать странный response_code в логах, а именно — 0. В логах выглядит примерно так:

{
  "timestamp": "2020-01-17T08:41:51+00:00",
  "remote_addr": "zzz.zzz.zzz.zzz",
  "request_time": 0,
  "upstream_response_time": "",
  "upstream_header_time": "",
  "http_accept_language": "-language",
  "response_status": 0,
  "request": "",
  "host": "example.com",
  "upstream_addr": "",
  "http_referrer": "",
  "request_length": 5854,
  "bytes_sent": 0,
  "http_user_agent": ""
}
Читать дальше →

Битва WEB серверов. Часть 2 – реалистичный сценарий HTTPS:

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


О методике мы рассказывали в первой части статьи, в этой мы тестируем HTTPS, но в более реалистичных сценариях. Для тестирования был получен сертификат Let’s Encrypt, включено сжатие Brotli на 11.

На этот раз попробуем воспроизвести сценарий развертывания сервера на VDS или в качестве виртуальной машины на хосте с типовым процессором. Для этого устанавливали лимит в:

  • 25% — Что в пересчете на частоту ~ 1350МГц
  • 35% -1890Мгц
  • 41% — 2214Мгц
  • 65% — 3510Мгц

Количество единовременных подключений сократилось с 500 до 1, 3, 5, 7 и 9,
Читать дальше →

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