База знаний (цифровой суверенитет)
  • Структура Nginx в YunoHost 12

    Прикреплена Перенесена
    YunoHost
    1 8 19 1

    A
    1,168
    0

    В YunoHost 12 каталоги и файлы /etc/nginx/ имеют следующую структуру:

    /etc/nginx/
    ├── conf.d
    │   ├── acme-challenge.conf.inc
    │   ├── default.d
    │   │   └── redirect_to_admin.conf
    │   ├── global.conf
    │   ├── list.nbics.net.conf
    │   ├── list.nbics.net.d
    │   │   └── roundcube.conf
    │   ├── odis.nbics.net.conf
    │   ├── odis.nbics.net.d
    │   ├── other2.nbics.net.d
    │   ├── other3.nbics.net.conf
    │   ├── other3.nbics.net.d
    │   │   └── bookstack.conf
    │   ├── security.conf.inc
    │   ├── ssowat.conf
    │   ├── yunohost_admin.conf
    │   ├── yunohost_admin.conf.inc
    │   ├── yunohost_api.conf.inc
    │   ├── yunohost_http_errors.conf.inc
    │   ├── yunohost_panel.conf.inc
    │   └── yunohost_sso.conf.inc
    ├── fastcgi.conf
    ├── fastcgi_params
    ├── koi-utf
    ├── koi-win
    ├── mime.types
    ├── modules-available
    ├── modules-enabled
    │   ├── 10-mod-http-ndk.conf -> /usr/share/nginx/modules-available/mod-http-ndk.conf
    │   ├── 50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf
    │   ├── 50-mod-http-cache-purge.conf -> /usr/share/nginx/modules-available/mod-http-cache-purge.conf
    │   ├── 50-mod-http-dav-ext.conf -> /usr/share/nginx/modules-available/mod-http-dav-ext.conf
    │   ├── 50-mod-http-echo.conf -> /usr/share/nginx/modules-available/mod-http-echo.conf
    │   ├── 50-mod-http-fancyindex.conf -> /usr/share/nginx/modules-available/mod-http-fancyindex.conf
    │   ├── 50-mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
    │   ├── 50-mod-http-geoip.conf -> /usr/share/nginx/modules-available/mod-http-geoip.conf
    │   ├── 50-mod-http-headers-more-filter.conf -> /usr/share/nginx/modules-available/mod-http-headers-more-filter.conf
    │   ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
    │   ├── 50-mod-http-lua.conf -> /usr/share/nginx/modules-available/mod-http-lua.conf
    │   ├── 50-mod-http-perl.conf -> /usr/share/nginx/modules-available/mod-http-perl.conf
    │   ├── 50-mod-http-subs-filter.conf -> /usr/share/nginx/modules-available/mod-http-subs-filter.conf
    │   ├── 50-mod-http-uploadprogress.conf -> /usr/share/nginx/modules-available/mod-http-uploadprogress.conf
    │   ├── 50-mod-http-upstream-fair.conf -> /usr/share/nginx/modules-available/mod-http-upstream-fair.conf
    │   ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
    │   ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
    │   ├── 50-mod-nchan.conf -> /usr/share/nginx/modules-available/mod-nchan.conf
    │   ├── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
    │   ├── 70-mod-stream-geoip2.conf -> /usr/share/nginx/modules-available/mod-stream-geoip2.conf
    │   └── 70-mod-stream-geoip.conf -> /usr/share/nginx/modules-available/mod-stream-geoip.conf
    ├── nginx.conf
    ├── proxy_params
    ├── scgi_params
    ├── sites-available
    │   ├── default
    │   └── jitsi.conf
    ├── sites-enabled
    │   └── jitsi.conf -> /etc/nginx/sites-available/jitsi.conf
    ├── snippets
    │   ├── fastcgi-php.conf
    │   └── snakeoil.conf
    ├── uwsgi_params
    └── win-utf
    
    12 directories, 52 files
    
    
  • A
    1,168
    0

    Разберём подробно, что за каталог и файл в /etc/nginx/ и для чего он нужен, с учётом Yunohost и общей структуры nginx. Я разделю на смысловые блоки.


    1️⃣ Каталог conf.d/

    • Yunohost активно использует именно этот каталог для своих конфигов, вместо традиционного sites-available//sites-enabled/.
    • Включается через include /etc/nginx/conf.d/*.conf; в nginx.conf.

    Содержимое:

    Файл / каталог Назначение
    acme-challenge.conf.inc Правила для обработки ACME http-01 challenge от LetsEncrypt. Yunohost проксирует запросы к /acme-challenge для проверки домена.
    default.d/redirect_to_admin.conf Обычно содержит редирект HTTP на основной админский домен Yunohost. Например, перенаправляет с root на /yunohost/admin.
    global.conf Общие настройки для всех серверов: gzip, таймауты, прокси, лимиты соединений.
    list.nbics.net.conf Конфиг виртуального хоста для домена list.nbics.net.
    list.nbics.net.d/roundcube.conf Дополнения для приложений, размещённых под этим доменом. Например, Roundcube.
    odis.nbics.net.conf Основной виртуальный хост для главного домена Yunohost (odis.nbics.net).
    odis.nbics.net.d/ Каталог под приложения/дополнительные конфиги, например SSO, webmail, Nextcloud. Может быть пустым, если приложений ещё нет.
    other2.nbics.net.d/, other3.nbics.net.d/ Как и выше — доп. каталоги для приложений конкретных доменов.
    other3.nbics.net.conf Основной конфиг виртуального хоста для домена other3.nbics.net.
    security.conf.inc Включает общие настройки безопасности: headers (HSTS, X-Frame-Options), ограничения доступа.
    ssowat.conf Конфиг SSOwat — SSO Yunohost, управляет аутентификацией пользователей.
    yunohost_admin.conf Главный конфиг панели администрирования (сервер и root path).
    yunohost_admin.conf.inc Доп. include для панели администрирования, например location блоки для страниц.
    yunohost_api.conf.inc Обработчик API Yunohost (REST/CLI) через nginx.
    yunohost_http_errors.conf.inc Пользовательские страницы ошибок (404, 500) для Yunohost.
    yunohost_panel.conf.inc Подключаемые location для панели: /yunohost/admin, /yunohost/logs и т.д.
    yunohost_sso.conf.inc Настройки SSO для всех приложений, маршрутизация запросов через SSOwat.

    Итог: conf.d/ — это ядро nginx-конфигураций Yunohost. Основные домены и приложения создаются здесь, не трогая sites-available/.


    2️⃣ Основные файлы конфигурации nginx

    Файл Назначение
    nginx.conf Главный конфиг Nginx: master process, worker process, include conf.d и sites-enabled, http{} и события.
    fastcgi.conf, fastcgi_params Параметры для FastCGI (например PHP-FPM).
    proxy_params Стандартные параметры для reverse proxy (proxy_set_header Host $host; ...).
    scgi_params Параметры для SCGI (редко используется).
    uwsgi_params Параметры для uwsgi (Python приложения).
    mime.types Определение типов контента по расширению файлов.
    koi-utf, koi-win, win-utf Таблицы кодировок для старых клиентов (исторические причины).

    3️⃣ Каталоги sites-available/ и sites-enabled/

    • Классическая структура Debian/Ubuntu.
    • Yunohost почти не использует их, но другие приложения (например Jitsi в твоей схеме) могут использовать.
    • sites-available/ — все сайты (можно хранить без активации)
    • sites-enabled/ — активные сайты через symlink на sites-available/

    Пример:

    sites-available/jitsi.conf
    sites-enabled/jitsi.conf -> ../sites-available/jitsi.conf
    
    • Таким образом, Jitsi работает через хостовый nginx, а Yunohost управляет своими сайтами через conf.d.

    4️⃣ Каталоги modules-available/ и modules-enabled/

    • Nginx поддерживает динамические модули.
    • modules-available/ — все доступные модули Nginx.
    • modules-enabled/ — активные модули через symlink.

    Примеры:

    • mod-http-ndk — контроль нагрузки, cookie
    • mod-http-auth-pam — PAM-аутентификация
    • mod-stream — TCP/UDP прокси

    Итог: Yunohost использует стандартный nginx, модули подключены для расширенной функциональности (auth, proxy, geoip).


    5️⃣ Каталог snippets/

    • Повторно используемые куски конфигурации для виртуальных хостов.

    • Примеры:

      • fastcgi-php.conf — настройки PHP-FPM для любых серверов
      • snakeoil.conf — self-signed сертификаты для тестов

    6️⃣ Сводка

    • /etc/nginx/conf.d/ — Yunohost: все домены, приложения, SSO, ACME.
    • /etc/nginx/sites-available/ + sites-enabled/ — сторонние сайты (Jitsi, статические сайты).
    • snippets/ — повторно используемые блоки для виртуальных хостов.
    • modules-available/ + modules-enabled/ — динамические модули nginx.
    • Основной файл nginx.conf подключает всё через include.
  • A
    1,168
    0

    Если каталог /etc/nginx/modules-available/ пуст, а в modules-enabled/ есть symlink на /usr/share/nginx/modules-available/…, то это абсолютно нормально для современных сборок Nginx в Debian/Ubuntu.

    Вот почему:


    1️⃣ Историческое объяснение

    Раньше (старые версии nginx) модули компилировались встроенно, и пользователю приходилось хранить их в /etc/nginx/modules-available/.
    Сейчас Debian/Ubuntu используют динамические модули, которые:

    • установлены в системный каталог /usr/share/nginx/modules-available/
    • активируются через symlink в /etc/nginx/modules-enabled/

    То есть пустой modules-available/ в /etc/nginx/ — это просто место, куда можно добавлять свои локальные модули, если нужно. Системные модули лежат в /usr/share/nginx/modules-available/.


    2️⃣ Почему symlink в modules-enabled/ работает

    Например:

    /etc/nginx/modules-enabled/50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf
    
    • Nginx читает modules-enabled/*.conf через include /etc/nginx/modules-enabled/*.conf;
    • Через symlink подключается реальный файл модуля в /usr/share/nginx/modules-available/

    Важно: Nginx не требует, чтобы modules-available/ в /etc/nginx/ был заполнен, он работает напрямую через включённые файлы (symlink).


    3️⃣ Итог

    • Пустой /etc/nginx/modules-available/не ошибка и не проблема.
    • Системные модули находятся в /usr/share/nginx/modules-available/.
    • Symlink в /etc/nginx/modules-enabled/ активирует нужные модули.
    • /etc/nginx/modules-available/ используется только для локальных/дополнительных модулей, которые вы сами хотите добавить.
  • A
    1,168
    0

    Список модулей в modules-enabled:

    ├── modules-enabled
    │   ├── 10-mod-http-ndk.conf -> /usr/share/nginx/modules-available/mod-http-ndk.conf
    │   ├── 50-mod-http-auth-pam.conf -> /usr/share/nginx/modules-available/mod-http-auth-pam.conf
    │   ├── 50-mod-http-cache-purge.conf -> /usr/share/nginx/modules-available/mod-http-cache-purge.conf
    │   ├── 50-mod-http-dav-ext.conf -> /usr/share/nginx/modules-available/mod-http-dav-ext.conf
    │   ├── 50-mod-http-echo.conf -> /usr/share/nginx/modules-available/mod-http-echo.conf
    │   ├── 50-mod-http-fancyindex.conf -> /usr/share/nginx/modules-available/mod-http-fancyindex.conf
    │   ├── 50-mod-http-geoip2.conf -> /usr/share/nginx/modules-available/mod-http-geoip2.conf
    │   ├── 50-mod-http-geoip.conf -> /usr/share/nginx/modules-available/mod-http-geoip.conf
    │   ├── 50-mod-http-headers-more-filter.conf -> /usr/share/nginx/modules-available/mod-http-headers-more-filter.conf
    │   ├── 50-mod-http-image-filter.conf -> /usr/share/nginx/modules-available/mod-http-image-filter.conf
    │   ├── 50-mod-http-lua.conf -> /usr/share/nginx/modules-available/mod-http-lua.conf
    │   ├── 50-mod-http-perl.conf -> /usr/share/nginx/modules-available/mod-http-perl.conf
    │   ├── 50-mod-http-subs-filter.conf -> /usr/share/nginx/modules-available/mod-http-subs-filter.conf
    │   ├── 50-mod-http-uploadprogress.conf -> /usr/share/nginx/modules-available/mod-http-uploadprogress.conf
    │   ├── 50-mod-http-upstream-fair.conf -> /usr/share/nginx/modules-available/mod-http-upstream-fair.conf
    │   ├── 50-mod-http-xslt-filter.conf -> /usr/share/nginx/modules-available/mod-http-xslt-filter.conf
    │   ├── 50-mod-mail.conf -> /usr/share/nginx/modules-available/mod-mail.conf
    │   ├── 50-mod-nchan.conf -> /usr/share/nginx/modules-available/mod-nchan.conf
    │   ├── 50-mod-stream.conf -> /usr/share/nginx/modules-available/mod-stream.conf
    │   ├── 70-mod-stream-geoip2.conf -> /usr/share/nginx/modules-available/mod-stream-geoip2.conf
    │   └── 70-mod-stream-geoip.conf -> /usr/share/nginx/modules-available/mod-stream-geoip.conf
    
    
  • A
    1,168
    0

    Разберём каждый модуль и его назначение из представленного выше списка. Это все динамические модули Nginx, подключаемые через symlink в modules-enabled/.


    1️⃣ HTTP модули (работают с веб-трафиком)

    Модуль Назначение
    10-mod-http-ndk Nginx Development Kit — расширяет стандартный HTTP, добавляет переменные, расширенные логи, функции для фильтров и модулей.
    50-mod-http-auth-pam PAM-аутентификация через HTTP: позволяет использовать системные пользователи Linux для доступа к сайтам.
    50-mod-http-cache-purge Позволяет делать «purge» (очистку) кеша Nginx по URL через HTTP-запросы.
    50-mod-http-dav-ext Расширение WebDAV: поддержка LOCK/UNLOCK, PUT/DELETE, позволяет использовать Nginx как полноценный WebDAV-сервер.
    50-mod-http-echo Добавляет директиву echo для вывода произвольного текста, заголовков или переменных в ответ клиенту.
    50-mod-http-fancyindex Красивый индекс каталогов: выводит файлы с иконками, сортировкой, цветами.
    50-mod-http-geoip2 GeoIP2: определяет географическое положение посетителя по IP.
    50-mod-http-geoip Старый GeoIP (GeoIP Legacy), тоже для геолокации IP-адресов.
    50-mod-http-headers-more-filter Позволяет гибко изменять, добавлять или удалять HTTP-заголовки в ответе.
    50-mod-http-image-filter Применяет простые фильтры к изображениям на лету: resize, crop, rotate, watermark.
    50-mod-http-lua Поддержка Lua-скриптов внутри Nginx (OpenResty-подобная функциональность).
    50-mod-http-perl Поддержка Perl скриптов в HTTP обработчиках (редко используется).
    50-mod-http-subs-filter Подменяет текст в ответе HTTP на лету (например, заменить слова или URL).
    50-mod-http-uploadprogress Позволяет отслеживать прогресс загрузки больших файлов через HTTP.
    50-mod-http-upstream-fair Распределение нагрузки между бэкендами с «fair» алгоритмом, учитывает время отклика и нагрузку.
    50-mod-http-xslt-filter Преобразование XML через XSLT прямо в Nginx (полезно для API).

    2️⃣ Mail модуль

    Модуль Назначение
    50-mod-mail Nginx может работать как IMAP/POP3/SMTP proxy. Используется редко, обычно для Mailcow или почтовых frontend’ов.

    3️⃣ Потоковые / Stream модули (TCP/UDP)

    Модуль Назначение
    50-mod-nchan Реализация publish-subscribe в реальном времени: WebSockets, Server-Sent Events, push-уведомления.
    50-mod-stream Обработка TCP и UDP потоков: позволяет Nginx работать как reverse proxy для любого TCP/UDP сервиса.
    70-mod-stream-geoip2 Геолокация для TCP/UDP потоков (GeoIP2).
    70-mod-stream-geoip Старый GeoIP для TCP/UDP потоков.

    4️⃣ Примечания

    1. Префиксы 10-, 50-, 70- — порядок подключения модулей (чем меньше число, тем раньше загружается).
    2. HTTP-модули нужны для веб-сайтов, почты через HTTP(S), API.
    3. Stream-модули нужны для TCP/UDP прокси, например для Jitsi Videobridge, Mailcow SMTP, WebSockets.
    4. GeoIP и headers-more — помогают в SSO, Yunohost, фильтрах безопасности.
  • A
    1,168
    0

    Основной конфиг - nginx.conf

    user www-data;
    worker_processes auto;
    pid /run/nginx.pid;
    error_log /var/log/nginx/error.log;
    include /etc/nginx/modules-enabled/*.conf;
    
    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    http {
    
            ##
            # Basic Settings
            ##
    
            sendfile on;
            tcp_nopush on;
            types_hash_max_size 2048;
            # server_tokens off;
    
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
    
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
    
            ##
            # SSL Settings
            ##
    
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
            ssl_prefer_server_ciphers on;
    
            ##
            # Logging Settings
            ##
    
            access_log /var/log/nginx/access.log;
    
            ##
            # Gzip Settings
            ##
    
            gzip on;
    
            # gzip_vary on;
            # gzip_proxied any;
            # gzip_comp_level 6;
            # gzip_buffers 16 8k;
            # gzip_http_version 1.1;
            # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
            ##
            # Virtual Host Configs
            ##
    
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }
    
    
    #mail {
    #       # See sample authentication script at:
    #       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
    #
    #       # auth_http localhost/auth.php;
    #       # pop3_capabilities "TOP" "USER";
    #       # imap_capabilities "IMAP4rev1" "UIDPLUS";
    #
    #       server {
    #               listen     localhost:110;
    #               protocol   pop3;
    #               proxy      on;
    #       }
    #
    #       server {
    #               listen     localhost:143;
    #               protocol   imap;
    #               proxy      on;
    #       }
    #}
    
    
  • A
    1,168
    0

    Разберём каждую строку и блок конфига nginx.conf, чтобы понять их назначение, даже для Yunohost. Я разделю на смысловые части.


    1️⃣ Основные директивы вне блоков

    user www-data;
    
    • Указывает пользователя, от имени которого будут работать worker-процессы Nginx.
    • www-data — стандартный пользователь веб-серверов в Debian/Ubuntu.
    worker_processes auto;
    
    • Количество рабочих процессов Nginx.
    • auto — Nginx сам определяет количество по числу CPU.
    pid /run/nginx.pid;
    
    • Файл, где хранится PID главного (master) процесса.
    • Нужно для systemctl reload nginx, stop, restart.
    error_log /var/log/nginx/error.log;
    
    • Путь к логам ошибок Nginx.
    include /etc/nginx/modules-enabled/*.conf;
    
    • Подключает все активные модули, которые мы разбирали ранее (modules-enabled).

    2️⃣ Блок events

    events {
            worker_connections 768;
            # multi_accept on;
    }
    
    • worker_connections 768; — сколько одновременных соединений может обработать каждый worker.
    • multi_accept on; — (закомментировано) позволяет worker’у сразу принимать все входящие соединения.
    • Блок events управляет сетевым вводом/выводом, взаимодействием с сокетами.

    По сути, здесь задаётся масштабируемость Nginx для одновременных пользователей.


    3️⃣ Блок http

    Блок http управляет всеми настройками HTTP-сервера.

    3.1 Базовые настройки

    sendfile on;
    tcp_nopush on;
    types_hash_max_size 2048;
    # server_tokens off;
    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;
    
    • sendfile on; — оптимизация отдачи статических файлов через системный вызов sendfile.
    • tcp_nopush on; — оптимизация TCP, объединяет пакеты при отправке файлов (уменьшает фрагментацию).
    • types_hash_max_size 2048; — размер хэш-таблицы для MIME-типов (mime.types).
    • server_tokens off; (закомментировано) — скрыть версию Nginx в заголовках.
    • server_names_hash_bucket_size — размер хэш-бакета для server_name.
    • server_name_in_redirect off — отключает использование server_name при редиректах.

    3.2 MIME и типы файлов

    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    • include /etc/nginx/mime.types; — подключает список MIME-типов для разных расширений файлов.
    • default_type application/octet-stream; — если MIME не определён, отдавать как бинарный файл.

    3.3 SSL настройки

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    
    • ssl_protocols — разрешённые протоколы TLS (отключен SSLv3, чтобы избежать POODLE).
    • ssl_prefer_server_ciphers on; — сервер выбирает шифр первым, а не клиент, повышая безопасность.

    Обычно дополнительные SSL-настройки (сертификаты, ciphers) задаются в виртуальных хостах.


    3.4 Логи

    access_log /var/log/nginx/access.log;
    
    • Логи всех HTTP-запросов: IP, URL, статус, User-Agent.

    3.5 Gzip

    gzip on;
    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    • gzip on; — включение сжатия HTTP-ответов.

    • Закомментированные директивы управляют:

      • gzip_vary — заголовок Vary для кэширования
      • gzip_comp_level — степень сжатия
      • gzip_types — какие MIME-типы сжимать

    Включение gzip ускоряет загрузку сайтов.


    3.6 Подключение виртуальных хостов

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
    • Подключает все конфиги из conf.d (Yunohost) и sites-enabled (сторонние сайты, Jitsi).
    • Позволяет Nginx работать как централизованный веб-сервер для всех доменов.

    4️⃣ Mail блок (закомментирован)

    #mail {
    #       auth_http localhost/auth.php;
    #       server { listen localhost:110; protocol pop3; proxy on; }
    #       server { listen localhost:143; protocol imap; proxy on; }
    #}
    
    • Позволяет Nginx выступать как TCP-прокси для IMAP/POP3.
    • Можно было бы проксировать почту через Nginx, но Yunohost обычно использует Postfix/Dovecot напрямую.
    • Закомментировано, потому что в большинстве случаев не нужно.

    5️⃣ Вывод

    • nginx.conf задаёт глобальные настройки, масштабируемость, оптимизации, SSL, gzip.
    • Виртуальные хосты и Yunohost-домены лежат в conf.d/, сторонние сайты — в sites-enabled/.
    • Блоки mail и дополнительные настройки HTTP закомментированы — используются по необходимости.
  • A
    1,168
    0

    Общая теория Nginx


    Разберём общую теорию Nginx, как он работает, чтобы потом проще понимать Yunohost и любую веб-инфраструктуру. Я постараюсь максимально подробно, с примерами и пояснениями.


    1️⃣ Архитектура Nginx

    Nginx — это высокопроизводительный веб-сервер и reverse proxy, который может работать с HTTP, HTTPS, TCP и UDP потоками.

    Основные компоненты

    1. Master process (главный процесс)

      • Запускается от root (для открытия портов <1024, например 80 и 443).
      • Читает конфигурацию (nginx.conf) и запускает worker-процессы.
      • Управляет перезапуском, логами и перезагрузкой конфигурации.
      • PID хранится в /run/nginx.pid.
    2. Worker processes (рабочие процессы)

      • Основная работа: обработка HTTP-запросов, proxy, отдача файлов.
      • Запускаются от обычного пользователя (например www-data).
      • Каждый worker может обрабатывать множество соединений одновременно через асинхронный event loop (epoll/kqueue).
    3. Event loop

      • Внутри worker процессов.
      • Асинхронно обрабатывает сокеты, читает/пишет данные без блокировки.
      • Позволяет одному worker’у обрабатывать тысячи соединений.

    2️⃣ Работа с доменами и виртуальными хостами

    Server blocks (виртуальные хосты)

    • Один Nginx сервер может обслуживать несколько доменов на одном IP через server { ... } блоки.
    • Пример:
    server {
        listen 80;
        server_name example.com www.example.com;
    
        root /var/www/example.com;
        index index.html;
    
        location / {
            try_files $uri $uri/ =404;
        }
    }
    

    Объяснение:

    • listen 80; — порт, на котором сервер слушает HTTP-запросы.
    • server_name — имена доменов, которые этот блок обслуживает.
    • root — корневая папка для файлов сайта.
    • location / — обработка запросов к URL.
    • try_files $uri $uri/ =404; — ищет файл, если нет — 404.

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


    Server_name vs default_server

    • default_server — блок, который обслуживает все запросы, если домен не совпал ни с одним server_name.
    • В Yunohost главный домен admin обычно ставится в default_server.

    3️⃣ Порты и протоколы

    • Nginx может слушать любые порты.

      • HTTP: 80
      • HTTPS: 443
      • TCP/UDP: любые, через stream {} блок
    • Можно слушать локально (127.0.0.1:port) или публично (0.0.0.0:port).

    Пример proxy_pass:

    server {
        listen 443 ssl;
        server_name myapp.example.com;
    
        ssl_certificate /etc/letsencrypt/live/myapp/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/myapp/privkey.pem;
    
        location / {
            proxy_pass http://127.0.0.1:3025;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
    
    • Nginx слушает HTTPS на 443.
    • Проксирует на backend (например, Node.js или Yunohost приложение) по 127.0.0.1:3025.

    4️⃣ Взаимодействие с процессами и ресурсами

    • Каждый worker:

      • Обрабатывает много соединений одновременно.
      • Работает асинхронно, не создавая отдельный поток на каждого клиента.
    • worker_connections + worker_processes = максимальное количество соединений.

    • Пример: auto worker_processes + worker_connections 768 → несколько тысяч одновременных клиентов.


    5️⃣ Конфигурация include

    • Nginx читает главный конфиг (nginx.conf), а затем подключает include файлы:
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
    
    • Это позволяет:

      • Разделять конфиги на логические блоки
      • Yunohost держит свои домены в conf.d/
      • Другие сайты или Jitsi в sites-enabled/

    6️⃣ SSL и HTTPS

    • Настраивается в server block:
    listen 443 ssl;
    ssl_certificate /path/fullchain.pem;
    ssl_certificate_key /path/privkey.pem;
    
    • Nginx может автоматически использовать LetsEncrypt через Yunohost или certbot.
    • Можно указать протоколы (ssl_protocols TLSv1.2 TLSv1.3;) и предпочтительные шифры.

    7️⃣ Proxy и backend

    • Nginx может работать как reverse proxy:
    location / {
        proxy_pass http://127.0.0.1:3025;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    
    • Прокси позволяет:

      • Скрывать порт backend приложения
      • Объединять несколько сайтов на одном IP
      • Делать SSL-termination (TLS на Nginx, а backend по HTTP)

    8️⃣ Логирование и gzip

    • access_log и error_log — логируют запросы и ошибки.
    • gzip on; — сжатие текста (HTML, CSS, JS), ускоряет отдачу клиентам.

    9️⃣ Потоковые (stream) возможности

    • Nginx умеет работать с TCP/UDP:
    stream {
        server {
            listen 5222; # XMPP
            proxy_pass 127.0.0.1:5222;
        }
    }
    
    • Полезно для Mailcow (SMTP, IMAP, POP3) или Jitsi Videobridge.

    🔑 Ключевые выводы

    1. Master + worker — асинхронная, масштабируемая архитектура.
    2. Server blocks — виртуальные хосты для доменов, могут быть HTTP или HTTPS.
    3. Include — позволяет организовать конфиги по каталогам (conf.d/, sites-enabled/).
    4. Proxy_pass — объединяет внешние порты с внутренними сервисами.
    5. SSL/TLS — делается на уровне server block, может быть централизованно через Yunohost.
    6. Гибкость портов — Nginx может обслуживать HTTP, HTTPS, TCP, UDP.
    7. Асинхронность — один worker обрабатывает тысячи соединений без блокировки.
  • A Admin закрепил эту тему в
  • A Admin переместил эту тему из в