Обязательно для фронтенд-разработчиков: практическое руководство по началу работы с Nginx, от развертывания до оптимизации.
Обязательно для фронтенд-разработчиков: практическое руководство по началу работы с Nginx, от развертывания до оптимизации.

Введение 👋

На волне современной веб-разработки внешний вид интерфейс Инженеры должны не только владетьHTMLCSSJavaScriptи другие базовые технологии,Понимание серверных служб и сетевой архитектуры также становится все более важным.。Nginx,Известен своей высокой производительностьюWebсервер иобратный прокси-сервер, то есть все внешне Интерфейс Разработчик Очко навыков, которое нельзя упустить. Эта статья предназначена для внешнего интерфейс Разработчикпредоставить подробныйNginxучебное пособие,От теории к практике,Новое дерево навыков, которое поможет вам разблокировать возможности оптимизации. ✨


1. Знакомство с Nginx 📚

Nginx,Правильное произношение — «двигатель-х».,Родился в 2004 году,Российский программист Игорь. Автор Сысоев. Он быстро стал ключевым технологическим компонентом инфраструктуры Интернета.

📊 Обзор основных функций

  • Высокие возможности одновременной обработки:Эффективно управляйте десятками тысяч одновременных запросов,Никакой потери производительности.
  • Низкое потребление памяти:Поддержание эффективной работы в средах с ограниченными ресурсами,Большое значение имеет контроль затрат.
  • стабильность:Обеспечить постоянную доступность и надежность услуг,Завоевать доверие широкого круга предприятий.

⚙️ Технологическое ядро - модель, управляемая событиями,Этот механизм позволяет Nginx реализовывать неблокирующие операции ввода-вывода при обработке запросов.,Даже в условиях внезапного сильного дорожного движения,Система также остается отзывчивой и в целом надежной. Это делает Nginx:

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

🔒 Безопасность и современные протоколы - Поддерживает шифрование SSL/TLS для повышения безопасности передачи данных. Совместим с HTTP/2 и WebSocket для обеспечения интерактивной производительности современных веб-приложений.

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

Создают ли стартапы масштабируемые веб-сервисы,Или это существующая структура крупного предприятия?,Nginxявляются незаменимыми партнерами。Благодаря высокой эффективности、стабильностьи легко настраиваемый,NginxЭто продвижениеWebЗолотой ключ к производительности приложений и качеству обслуживания。


2. Общая архитектура веб-сервера 🌀

📌 Обзор архитектуры

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

  1. Клиент Пользователи используют браузеры или другие клиентские приложения для связи с веб-серверами.
  2. Сервер Nginx какобратный прокси, Nginx получает клиентский запрос и направляет его на соответствующий серверный сервер. Он также эффективно управляет статическими ресурсами (такими как изображения, файлы CSS и JavaScript) и снижает нагрузку на внутренние серверы.
  3. балансировка нагрузкиустройство (Load Balancer) Обеспечьте равномерное распределение запросов динамического контента от Nginx-сервера на несколько внутренних серверов, выполните эффективную балансировку. нагрузки。
  4. Кластер веб-серверов Он состоит из нескольких серверов конфигурации с одним и тем же веб-приложением, которые используют балансировку. Сервер нагрузки принимает запросы и выполняет бизнес-логику.
  5. Кластер базы данных Используется для хранения данных приложений с использованием технологии главного-подчиненного копирования или сегментирования для расширения возможностей обработки данных и обеспечения высокой доступности.
  6. Служба кэша Используйте такие инструменты, как Memcached или Redis, для кэширования данных горячих точек, чтобы снизить частоту доступа к базе данных и повысить скорость ответа.
  7. Поток распространения событий Обработка и распространение событий в реальном времени, включая ведение журнала, отправку сообщений и т. д.
  8. Статический сервер ресурсов (Static Resource Server) Предназначен для хранения и обслуживания статического контента (например, мультимедийных файлов), улучшения пользовательского опыта и снижения нагрузки на веб-серверы.
📌Подробное обсуждение Nginx

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

  • Высокие возможности одновременной обработки:NginxИспользуйте асинхронныймодель, управляемая событиями, может эффективно обрабатывать десятки тысяч одновременных соединений и особенно подходит для обработки большого количества коротких запросов на соединение.
  • Модульная конструкция:Позволяет расширять функциональность за счет загрузки различных модулей.,напримерHTTP Модуль SSL поддерживает передачу с шифрованием HTTPS, а модуль Gzip реализует сжатие данных и т. д.
  • функции безопасности:Предоставьте различные фотографии безопасностизакрыватьиз Конфигурация Параметры,Например, ограничение частоты запросов, фильтрация вредоносных запросов и т. д.,Защитите веб-сервисы от атак.
  • Масштабируемость и гибкость:легкий Конфигурацияиразвертывать,Может быть скорректирован в соответствии с фактическими потребностями,Встречайте различные сценарии: от небольших сайтов до больших сложных приложений.

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


3. Прямой и обратный прокси 🔮

На этой диаграмме подробно описаны основные концепции прямых и обратных прокси-серверов и их практическое применение в сетевых коммуникациях.

📌 Как работает форвардный прокси

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

📌 Как работает обратный прокси

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

📌 Реализация Nginx
Настройка прямого прокси (Nginx)

Nginx Сносно stream Модуль настроен для реализации функции перенаправления прокси на уровне TCP/IP. Примеры следующие:

Язык кода:javascript
копировать
stream {
    server {
        listen 8080;
        proxy_pass <target_server_ip>:<target_port>;
        proxy_protocol on;
    }
}

Эта конфигурация заставляет Nginx прослушивать порт 8080 и пересылать полученные запросы на указанный целевой сервер.

Настройка обратного прокси (Nginx)

В качестве обратного прокси-сервера HTTP Nginx часто используется для получения клиентских запросов и пересылки их на внутренний сервер в соответствии с конфигурацией. Базовая конфигурация следующая:

Язык кода:javascript
копировать
http {
    server {
        listen 80;
        server_name example.com;
        location / {
            proxy_pass http://backend_servers;
            proxy_set_header Host $host;
        }
    }
}

существоватьэтот Конфигурациясередина,Nginxсуществовать80Порт принимает все прямыеexample.comзапрос,и переслать его в каталог с именемbackend_serversиззадняя часть Служитьустройствогруппа。

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


4. Углубленное применение стратегии балансировки нагрузки и Nginx 🚀

📌 Обзор стратегии балансировки нагрузки

Стратегия балансировки нагрузки является ключевой технологией в распределенных системах. Она направлена ​​на интеллектуальное распределение сетевых запросов на несколько серверных узлов для оптимизации использования ресурсов, повышения скорости ответа системы и обеспечения непрерывности обслуживания. В этой архитектуре стратегия балансировки нагрузки сначала реализует предварительное распределение трафика через LVS (виртуальный сервер Linux), чтобы гарантировать, что каждый запрос службы может быть разумно распределен между доступными экземплярами службы для обработки, тем самым улучшая общие возможности обработки и удобство использования системы.

📌 Nginx: продвинутая практика обратного прокси и балансировки нагрузки.

После LVS Nginx играет решающую роль в качестве обратного прокси-сервера. Он не только получает трафик от LVS, но и дополнительно оптимизирует логику распределения трафика, чтобы гарантировать точное направление запросов на разные веб-серверы (например, Apache, Tomcat и т. д.). Этот уровень обработки Nginx может не только предоставлять дополнительные услуги, такие как завершение SSL и кэширование статического контента, но также выполнять более точную балансировку нагрузки на основе настроенных политик (таких как опрос, минимальное количество подключений и т. д.), тем самым максимизируя производительность. использование сервисных ресурсов. Воспользуйтесь преимуществами эффективности и оперативности.

📌 Интеграция микросервисной архитектуры и Nginx

В рамках микросервисной архитектуры Nginx является не только порталом для трафика, но и важным мостом для связи между сервисами. Архитектура веб-сервера соответствует принципу SOA (сервисно-ориентированная архитектура) и реализует развязку сервисов и микросервисы через сервисные платформы, такие как Dubbo. Nginx можно использовать в качестве шлюза API для обеспечения унифицированного доступа, маршрутизации, балансировки нагрузки и контроля безопасности внешних сервисов, повышая гибкость и удобство обслуживания микросервисной архитектуры.

📌 Интеграция промежуточного программного обеспечения и гарантия целостности данных

Чтобы обеспечить высокую доступность и согласованность данных, архитектура интегрирует Zookeeper в качестве службы распределенной координации и MQ для асинхронного обмена сообщениями, обеспечивая надежность связи между службами и возможности асинхронной обработки. Сочетание MySQL и Redis, выступающих в качестве реляционной базы данных и службы кэширования соответственно, не только обеспечивает постоянное хранение данных, но и ускоряет чтение данных, улучшая скорость отклика и удобство работы всей системы.

Таким образом, в этом архитектурном проекте используется стратегия двойной балансировки нагрузки LVS и Nginx в сочетании с интеграцией микросервисной архитектуры и ряда промежуточного программного обеспечения для достижения эффективной обработки крупномасштабного одновременного доступа, сохраняя при этом высокую доступность сервисов и данных. Последовательность и быстрое время отклика. Являясь ключевым связующим компонентом, Nginx не только оптимизирует управление трафиком, но и способствует гибкости и масштабируемости системной архитектуры. Это незаменимая часть современных высокопроизводительных веб-сервисов.


5. Углубленная настройка и практика Nginx 🔧

1. Структура файла конфигурации

Nginxосновной Конфигурация Файлы обычно располагаются в/etc/nginx/nginx.conf,Это основной файл конфигурации, который загружается при запуске Nginx. Этот файл имеет иерархическую структуру,Умело организованные инструкции по настройке на разных уровнях.,Направлена ​​на комплексный контроль над поведением веб-сервера. Его ключевые компоненты следующие:

📁 Анализ ключевых частей

  • http Этот блок контекста инкапсулирует всю конфигурацию, связанную с протоколом HTTP, и является ядром функциональности Nginx как HTTP-сервера. Он включает, но не ограничивается:
    • Настройки журнала:проходитьaccess_logиerror_logинструкцияопределениежурнал доступаиошибкабревноиз Путь и формат хранения。
    • MIME-тип:использоватьinclude mime.typesВвести предопределенныеMIME-типдокумент,Убедитесь, что браузер может правильно проанализировать возвращаемый тип контента.
    • Формат журнала:проходитьlog_formatДиректива для настройки формата записи журнала,Для облегчения анализа журналов.
    • Keepalivesendfileи т. д. производительностьоптимизация Параметры,Повысьте эффективность передачи файлов и возможности повторного использования соединений.
    • обратный проксибалансировка нагрузкиКонфигурация,проходитьproxy_passupstreamЖду инструкцийвыполнить。
  • events В этом разделе определяется, как Nginx обрабатывает соединения и запросы и имеет решающее значение для производительности сервера и управления ресурсами. Ключевые инструкции включают в себя:
    • worker_connections:ограничить каждыйworkerМаксимальное количество соединений, которые процесс может обрабатывать одновременно.。
    • use:обозначениемодель, управляемая событиями,нравитьсяepoll(Применимо кLinux),коптимизация Высокие возможности одновременной обработки。
    • multi_accept:Контролирует, является лиworkerПринимать несколько новых подключений одновременно,оптимизация скорости отклика.
  • server каждыйserverблок представляет виртуальный хост Конфигурация,позволятьNginxНа основе разных доменных имен、IPАдрес или номер порта для предоставления услуг。основной Конфигурациявключать:
    • listen:обозначениемониторизпорт,нравитьсяlisten 80;мониторHTTPПорт по умолчанию。
    • server_name:определение Служитьустройствоимя,Поддерживает сопоставление подстановочных знаков и регулярных выражений.,нравитьсяserver_name example.com www.example.com;
    • ssl:существоватьнуждатьсяHTTPSчас КонфигурацияSSLСертификатиключ。
    • location:представить один или несколькоlocationкусок,Дальнейшее уточнение правил обработки запросов.
  • location родыserverкусоквнутренний,Запросы на сопоставление на основе URL-пути или регулярного выражения,Решите, как будет обрабатываться запрос。Типичное использованиевключать:
    • Служба статического контента:проходитьrootилиaliasинструкцияобозначениедокументсистемаизпуть,нравитьсяroot /var/www/html;
    • обратный прокси:использоватьproxy_passинструкция将просить转发给задняя часть Служитьустройство。
    • Перенаправление:проходитьreturnилиrewriteинструкциявыполнитьпроситьизвнутреннийиливнешний Перенаправление。
    • Обработка FastCGI:иPHP-FPMждатьзадняя часть应использовать Служитьустройствокоммуникация,Обработка запросов динамического контента.

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

2. Детали конфигурации
2.1 Глобальная конфигурация HTTP

Nginxизhttpкусокэто весьHTTPСлужитьустройство Конфигурацияизотправная точка,Определяет глобальные параметры и поведение по умолчанию.,влияет на все последующиеизserverКонфигурация。

keepalive_timeout:настраиватьклиентсвязь сохраняетсяиздогонятьчасчасмежду,Помогает повысить производительность и снизить затраты на установление соединения.

Язык кода:javascript
копировать
keepalive_timeout 65;

client_max_body_size:пределклиентпросить体изразмер,Избегайте проблем, вызванных загрузкой больших файлов.

Язык кода:javascript
копировать
client_max_body_size 100M;

include:представить других Конфигурациядокумент,Например, mime.types,MIME-тип, используемый для определения различных типов файлов.

Язык кода:javascript
копировать
include /etc/nginx/mime.types;

log_format:Настроить Формат журнала,легко Анализ журналов。

Язык кода:javascript
копировать
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent"';
2.2 Настройка модуля событий

eventsформакусокрешенныйNginxнравиться Как работать с соединениямиипросить,Оказывают прямое влияние на производительность.

worker_connections:каждый Рабочий процесс можетктакой жечасиметь дело сиз Максимальное количество подключений。

Язык кода:javascript
копировать
events {
    worker_connections 1024;
}

use:обозначение事件иметь дело сформа型,нравитьсяepollсуществоватьLinuxВыдающаяся производительность。

Язык кода:javascript
копировать
events {
    use epoll;
}
2.3 Настройка серверного блока

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

listen:обозначениемониторизпортипротокол(нравитьсяHTTP、HTTPS)。

Язык кода:javascript
копировать
server {
    listen 80;

server_name:обозначение Долженвиртуальный Хозяин Служитьиздоменное имя。

Язык кода:javascript
копировать
    server_name example.com www.example.com;

location:в соответствии сURLпуть来обозначение不такой жезапросиметь дело с方式。

Язык кода:javascript
копировать
    location / {
        root /var/www/html;
        index index.html index.htm;
    }
2.4 Конфигурация блока местоположения

locationкусокдаNginxКонфигурациясерединасамый гибкийизчасть,Настройте логику обработки запросов на основе URL-пути.

Служба статического контента

Язык кода:javascript
копировать
location /static/ {
    alias /data/static/;
}

обратный прокси

Язык кода:javascript
копировать
location /api/ {
    proxy_pass http://localhost:8000;
}

Переписать правила

Язык кода:javascript
копировать
location /old-url {
    return 301 /new-url;
}

Обработка динамического контента FastCGI(кPHPНапример):

Язык кода:javascript
копировать
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}

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

3. Логирование и мониторинг

Система журналирования Nginx является ключевым компонентом обслуживания и обслуживания. Она помогает администраторам отслеживать состояние системы, отслеживать проблемы и проводить настройку. производительности。Разумныйизбревно Конфигурацияне тольковключатьнастраиватьaccess_logиerror_logизпутьиуровень,возвращатьсявключать Формат настройка журнала и использование современного Анализа журналов инструмент для эффективного интеллектуального анализа данных.

3.1 Основы настройки журнала
  • error_log Конфигурациядля записиNginxбегатьчасизошибкаинформация,Его уровни от высокого до низкогоdebuginfonoticewarnerrorcritalertemerg。в соответствии с Выберите правильный вариант в соответствии с фактическими потребностямиизбревноуровень Можетк避免бревнодокумент Растет слишком быстро。
Язык кода:javascript
копировать
error_log /var/log/nginx/error.log warn; # Регистрировать только сообщения об ошибках уровня предупреждения и выше.
  • access_log Запись подробной информации каждого HTTP-запроса очень важна для анализа статистики доступа к веб-сайту и аудита событий безопасности.
Язык кода:javascript
копировать
access_log /var/log/nginx/access.log combined; # Используйте комбинированный формат для записи журналов доступа.

Примечаниеcombinedда预определениеиз Формат журнала,Включатьклиентинформация、Запросить время、строка запроса、код состояния、Байты ответа、Referer、Пользовательский агент и т. д.

3.2 Пользовательский формат журнала
Язык кода:javascript
копировать
log_format custom_format '$remote_addr - $remote_user [$time_local] '
                      '"$request" $status $body_bytes_sent '
                      '"$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access_custom.log custom_format; # Ведение журнала в пользовательском формате
3.3 Распиловка бревен и управление ими

Чтобы файлы журналов не становились слишком большими, файлы журналов обычно необходимо регулярно обрезать. Это можно сделать с помощью запланированных задач операционной системы (например, cron job)Сотрудничатьlogrotateинструментвыполнить。

3.4 Анализ журналов и мониторинг
  • Logstash + Elasticsearch + Kibana (ELK Stack):мощныйизбревно收集、Набор инструментов для анализа и визуализации.
Язык кода:javascript
копировать
input {
  file {
    path => "/var/log/nginx/*.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{NGINXACCESS}" } # Анализ журналов доступа с использованием режима NGINXACCESS
  }
}

output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}
  • Prometheus + Grafana:для мониторингаNginxиз Показатели эффективности,нравитьсяпросить速率、время ответаждать。
Язык кода:javascript
копировать
location /nginx_status {
  stub_status on;
  access_log off;
  allow 127.0.0.0.1;
  deny all;
}

КонфигурацияNginxиз状态формакусок(ngx_http_stub_status_module),ЗатемиспользоватьPrometheusизNginx Экспортер фиксирует эти показатели и отображает их в Grafana.

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

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

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

4.1 Оптимизация конфигурации Worker

Чтобы гарантировать, что Nginx сможет полностью использовать ресурсы сервера, в основе лежит разумная настройка worker_processes и worker_connections.

Язык кода:javascript
копировать
worker_processes auto; # Автоматически определять количество ядер ЦП и устанавливать количество процессов
worker_rlimit_nofile 65535; # Максимальное количество файловых дескрипторов, которые можно открыть для одного рабочего процесса.

events {
    worker_connections 1024; # Максимальное количество соединений, которые может обработать каждый рабочий процесс.
    use epoll; # Используйте модель событий epoll в среде Linux для повышения эффективности.
    multi_accept on; # Разрешить одновременное принятие нескольких подключений, улучшая скорость ответа
}
4.2 Оптимизация обработки статических ресурсов

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

Язык кода:javascript
копировать
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 365d; # Установите время кэширования браузера для статических ресурсов на один год.
    add_header Cache-Control public; # Сообщите браузерам и прокси-серверам, что они могут кэшировать
    access_log off; # Отключите ведение журнала доступа для этой части запроса, чтобы уменьшить количество дисковых операций ввода-вывода.
    try_files $uri $uri/ =404; # Попробуйте получить доступ к файлу напрямую, если не найден, верните 404.
}
4.3. Настройка эффективного SSL/TLS

Используйте новейшие протоколы SSL/TLS и соответствующие наборы шифров, чтобы обеспечить безопасность и сбалансировать производительность.

Язык кода:javascript
копировать
ssl_certificate /etc/nginx/ssl/server.crt; # Путь SSL-сертификата
ssl_certificate_key /etc/nginx/ssl/server.key; # путь к секретному ключу
ssl_protocols TLSv1.2 TLSv1.3; # Включите безопасные и эффективные протоколы SSL/TLS
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH'; # Комплекты шифров, ориентированные на безопасность
ssl_prefer_server_ciphers on; # Предпочтение сервера для наборов шифров
4.4 Использование возможностей HTTP/2

Протокол HTTP/2 может значительно повысить скорость загрузки веб-страницы, особенно в сценариях с несколькими запросами статических ресурсов.

Язык кода:javascript
копировать
listen 443 ssl http2; # Прослушивайте порт 443, включите SSL и используйте HTTP/2.

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

4.5 Избегайте ненужной загрузки модулей

Убедитесь, что ваш Nginx загружает только те модули, которые вам действительно нужны. Каждый загруженный модуль будет занимать определенный объем памяти,И может немного увеличить время запуска Nginx и потребление памяти во время выполнения. При компиляции Nginx,проходитьобозначение--without-module_nameПараметры移除不нуждатьсяизформакусок,илисуществовать Конфигурациядокументсерединаизбегать ненужныхизload_moduleинструкция。Это помогает сохранитьNginxлегкий,Повысьте его эффективность.

4.6 Использование микрокеширования

Для контента, который генерируется динамически, но меняется нечасто.,Реализация стратегии микрокэширования может уменьшить количество запросов к внутреннему серверу. Установив кеш в Nginx на более короткий период времени (например, от секунд до минут).,Можетк Значительно улучшить скорость ответа。настраиватьподходящийизкэшчасмеждуисуществоватьNginxКонфигурациясерединаиспользоватьproxy_cacheинструкциявыполнитьэта стратегия。примернравиться:

Язык кода:javascript
копировать
location /dynamic-content {
    proxy_cache my_microcache;
    proxy_cache_valid 200 302 1m;
    proxy_pass http://backend;
}

здесь,proxy_cache_validинструкцияопределение Какие именнокод состоянияиз响应进行кэшкикэшмного长часмежду。

4.7 Мониторинг и анализ журналов
  • Осуществление мониторинга:использоватьнравитьсяNginx Status Модуль или сторонние инструменты, такие как Prometheus и Nagios, могут отслеживать показатели производительности Nginx в режиме реального времени, включая количество подключений, частоту запросов, частоту ошибок и т. д., чтобы быстро обнаруживать и решать проблемы.
  • Анализ журналов:Разумный КонфигурацияNginxизбревноуровеньи Формат,использоватьLogstash、ELK Такие инструменты, как Stack (Elasticsearch, Logstash, Kibana) или Fluentd, собирают и анализируют данные журналов, чтобы выявить шаблоны доступа, медленные запросы и шаблоны ошибок для дальнейшей настройки.
4.8 Регулярная оценка и корректировка
  • Тестирование производительности:обычныйиспользоватьинструментнравитьсяJMeter、wrkилиab(Apache HTTP server benchmarking инструмент) для проведения нагрузочного тестирования, моделирования сценариев с высоким уровнем параллелизма, проверки правильности конфигурации Nginx и корректировки конфигурации на основе результатов тестирования.
  • анализ тенденций:В сочетании с данными мониторингаи Тенденции развития бизнеса,Предвидеть вероятные будущие потребности в производительности,Планируйте расширение ресурсов или корректируйте стратегии заранее.
  • Обновление технологий:закрывать ПримечаниеNginxи фазазакрыватькомпоненты(нравитьсяSSL/TLSБиблиотека、HTTPВерсия протокола)извозобновлять,Своевременно применяйте исправления безопасности и улучшения производительности.

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

5. Развертывание высокой доступности

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

5.1. Используйте Keepalived для достижения высокой доступности

Keepalived — это программное обеспечение, которое использует протокол VRRP (протокол резервирования виртуального маршрутизатора) для достижения высокой доступности. Развернув Keepalived на нескольких серверах Nginx, можно обеспечить переключение между активным и резервным режимами.

  • Пример конфигурации:существовать ДваNginx-серверначальство УстановитьKeepalived,Один из них — главный сервер (MASTER).,Один для резервного копирования Служитьустройство(BACKUP)。существоватьKeepalivedиз Конфигурациядокумент(нравиться/etc/keepalived/keepalived.conf)середина,определениеVIP(виртуальныйIPадрес)кипроверка здоровья или напрямую воспользуйтесь страницей состояния Nginx для проверки.
Язык кода:javascript
копировать
vrrp_instance VI_1 {
    state MASTER # или BACKUP
    interface eth0
    virtual_router_id 51
    priority 100 # Для основного сервера установлено более высокое значение, например 100, для резервного сервера установлено более низкое значение, например 90;
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}
  • проверка здоровья:существоватьtrack_scriptсередина Цитироватьизchk_nginxСкрипт,Можеткиспользовать来обычныйисследоватьNginxстраница статуса(нравиться/nginx_status),Убедитесь, что Nginx работает правильно.
5.2 Nginx-Upstream-Checksum-Module

Хотя он не так прост, как Keepalived, для обеспечения функции аварийного переключения.,ноnginx-upsync-moduleМожетк Обеспечьте несколькоNginxбалансировка Синхронизация конфигурации на сервере нагрузки особенно подходит для сценариев с высокими требованиями к согласованности конфигурации в распределенных средах.

  • Как использовать:проходить这个формакусок,Могут ли изменения в основной конфигурации Nginx автоматически синхронизироваться с другими экземплярами Nginx,Обеспечьте согласованность конфигурации.,Уменьшите количество ручного вмешательства и ошибок конфигурации.
5.3 Интеграция систем мониторинга, таких как Zabbix

Независимо от того, какое решение высокой доступности будет принято, интеграция Zabbix или других систем мониторинга необходима для мониторинга состояния Nginx и связанных с ним компонентов в режиме реального времени.

  • Пример конфигурации:существоватьZabbixсередина Создать триггерустройствои Элементы мониторинга,Отслеживайте рабочее состояние Nginx, время отклика, журналы ошибок и т. д. После обнаружения аномалии,Может автоматически отправлять сигналы тревоги и запускать соответствующие действия по восстановлению.,Например, выполнение аварийного переключения через вызовы API.

Подводя итог, можно сказать, что достижение высокой доступности развертывания Nginx включает в себя выбор правильных инструментов (таких как Keepalived), настройку механизмов проверки работоспособности, обеспечение синхронизации конфигурации и интеграцию систем мониторинга для обеспечения плавного развертывания даже в случае единой точки сбоя. . Переключитесь, чтобы обеспечить среду, в которой службы продолжают работать.


6. Полный пример настройки Nginx — в качестве примера CentOS 🖥️

📌 Установка

Чтобы установить Nginx в системе CentOS, вы можете выполнить следующие шаги:

Обновить системные пакеты: Сначала убедитесь, что ваша система обновлена, выполнив следующую команду «Обновить». системные пакеты:

Язык кода:javascript
копировать
sudo yum update -y

Установить репозиторий EPEL: EPEL(Extra Packages for Enterprise Linux) предоставляет множество пакетов программного обеспечения, которых нет в CentOS, включая Nginx. Используйте следующую команду Установить репозиторий EPEL:

Язык кода:javascript
копировать
sudo yum install epel-release -y

Установить nginx: ПонятноEPELсклад Библиотеканазад,你就МожеткпрямойиспользоватьyumЗаказ Установить Нгинкс:

Язык кода:javascript
копировать
sudo yum install nginx -y

Запустите и настройте Nginx для запуска при загрузке.: После завершения установки запустите службу Nginx и настройте ее автоматический запуск при запуске системы:

Язык кода:javascript
копировать
sudo systemctl start nginx
sudo systemctl enable nginx

На данный момент Nginx установлен и работает.

📌 Верификация
  • Используйте браузер для доступа к общедоступному IP-адресу или доменному имени вашего сервера (при условии, что он привязан правильно). Если вы видите страницу приветствия Nginx по умолчанию, установка прошла успешно.
  • использоватьnginx -tЗаказисследовать Конфигурациядокументда否有语法ошибка,Этот шаг следует выполнять после каждого изменения конфигурации.
  • нравиться Конфигурация правильная,проходитьsudo systemctl restart nginxЗаказ ПерезапускNginxСлужить,Сделайте новую Конфигурацию эффективной.

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

📌 Конфигурация

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

Язык кода:javascript
копировать
# В разделе «Глобальная конфигурация» задаются пользователь, режим работы, журнал ошибок и т. д., под которым работает Nginx.
user nginx; # Рабочий процесс Nginx, выполняющий пользователя
worker_processes auto; # Автоматически устанавливать количество рабочих процессов в зависимости от количества ядер процессора системы.

# ошибка Настройки журнала
error_log /var/log/nginx/error.log warn; # Путь и уровень файла журнала ошибок

# Процесс PID-файла
pid /var/run/nginx.pid;

# Режим работы и максимальное количество подключений
events {
    worker_connections 1024; # Максимальное количество подключений для одного рабочего процесса
    use epoll; # Используйте модель epoll для повышения эффективности ввода-вывода (система Linux)
    # multi_accept on; # Необязательно: разрешите каждому процессу принимать несколько соединений одновременно.
}

# Конфигурация HTTP-модуля
http {
    # Настройки MIME-типа
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # Формат журналаопределение    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    
    # доступ Настройки журнала
    access_log /var/log/nginx/access.log main;

    # Отправляйте файлы без использования системного кеша
    sendfile on;
    # Запретить включение файла отправки на неподдерживаемых платформах.
    tcp_nopush on;

    # Настройки таймаута соединения
    keepalive_timeout 65;

    # Включите сжатие gzip, чтобы повысить эффективность передачи.
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # Междоменная конфигурация, позволяющая выполнять междоменные запросы из всех источников.
    add_header Access-Control-Allow-Origin *;

    # балансировка нагрузки Конфигурация实пример
    upstream backend_servers {
        server backend1.example.com; # Первый адрес внутреннего сервера
        server backend2.example.com; # Адрес второго внутреннего сервера
        # Вы можете продолжать добавлять больше серверов и устанавливать вес, максимальное количество сбоев (max_fails) и т. д.
    }

    # Базовая конфигурация сайта
    server {
        listen 80; # Слушайте порт 80
        server_name example.com www.example.com; # Доменное имя сервера

        # Настройки корневого каталога статических файлов
        root /var/www/html;
        index index.html index.htm;

        # обрабатывать все запросы
        location / {
            # При необходимости сюда можно добавить дополнительные элементы управления доступом, журналы и т. д.
        }

        # обратный прокси для примеров приложений Node.js
        location /api/ {
            proxy_pass http://localhost:3000; # Адрес внутреннего сервера
            proxy_set_header Host $host; # Передайте поле Host в заголовке запроса.
            proxy_set_header X-Real-IP $remote_addr; # Предоставляйте реальный клиентский IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Передать заголовок X-Forwarded-For
        }
        
        # 示примербалансировка нагрузки Конфигурация
        location /balance/ {
            proxy_pass http://backend_servers; # Используйте балансировку, определенную выше нагрузкиустройство            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
}

пожалуйста, изменитеначальствоописывать Конфигурациядокументсохранить как/etc/nginx/nginx.conf,исуществовать进行任何更改назадиспользоватьnginx -tЗаказисследовать Конфигурацияизправильность,Затемпроходитьsystemctl restart nginxЗаказ ПерезапускNginxСлужитьк应использовать更改。记得替换示примерсерединаиздоменное имя、Пути и адреса серверов являются фактическими значениями.


7. Резюме 🏁

Подводя итог, можно сказать, что Nginx — это высокопроизводительный веб-сервер и обратный прокси-сервер. Для фронтенд-инженеров его важность и практичность отражаются во многих аспектах:

  • Улучшения производительности:проходить Эффективныйзапросиметь дело си Управление ресурсами,Nginx может значительно ускорить скорость загрузки веб-страниц,Улучшите пользовательский опыт.
  • балансировка нагрузки:существоватьмного Служитьустройство Архитектурасередина,Nginx может разумно распределять запросы на разные внутренние серверы.,Гарантированная стабильность и масштабируемость сервиса.
  • обратный прокси:隐藏задняя часть СлужитьустройствоизреальностьIPидеталь,Повышение безопасности,Это также упрощает управление конечными точками службы и реализацию шифрования SSL/TLS.
  • Служба статических ресурсов:прямой、Эффективный地托管и Обеспечить статическийдокумент,Снижение нагрузки на серверы приложений,Улучшите скорость ответа.
  • Расширенная конфигурация:нравитьсяURLпереписать、контроль доступа、Gzip-сжатие、Междоменная поддержкаждать Функция,Превращение Nginx в мощный инструмент для решения сложных задач веб-развертывания.
  • Устранение неполадок и ведение журнала:подробныйизбревно记录иошибкамеханизм отчетности,Помогите быстро найти и решить проблемы.

Из примеров установки и настройки CentOS, приведенных в этой статье, вы узнали, как установить Nginx с нуля и настроить базовые веб-службы, обратный прокси-сервер, балансировку нагрузки, сжатие Gzip и междоменные политики. Это незаменимые знания для создания современного Интернета. приложения. Овладение этими навыками означает, что вы сможете более независимо оптимизировать среду развертывания интерфейсных приложений, справляться с высокой степенью одновременного доступа и внедрять более безопасные и эффективные решения по развертыванию сервисов.

Продолжайте глубоко изучать другие расширенные функции и лучшие практики Nginx, такие как шлюз микросервисов, поддержка HTTP/2, усиление безопасности и т. д., которые еще больше расширят ваши возможности полного стека и сделают вашу работу более комфортной в области веб-разработки. Желаю вам идти дальше и дальше по пути изучения и применения Nginx и продолжать создавать высокопроизводительные веб-сервисы с высокой доступностью! 🏁

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.