Nginx — подробное объяснение обратного прокси и кеша
Nginx — подробное объяснение обратного прокси и кеша

Обзор

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

Конфигурация основных параметров Nginx

При написании обратного прокси-сервера Nginx сначала суммируйте некоторые важные параметры:

1. Процессор и память

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

Язык кода:bash
копировать
#2 основной процессор, запуск 2 процессов
worker_processes     2;
worker_cpu_affinity 01 10;

#2 основной процессор, открыты 4 процесса
worker_processes     4;
worker_cpu_affinity 01 10 01 10;

#4 процессор, запуск 4 процессов
worker_processes     4;
worker_cpu_affinity 0001 0010 0100 1000;

#4 основной процессор, запустить 2 процесса
worker_processes     2;
worker_cpu_affinity 0101 1010;

#8 основной процессор, открытые 8 процессов
worker_processes     8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;

2. Статические файлы

Для статических больших файлов включите sendfile для ускорения чтения файлов. Включите параметр TCP_CORK в сокете Linux и используйте его с sendfile для ускорения чтения больших файлов.

Язык кода:bash
копировать
http {
    sendfile on;
    tcp_nopush on;
}

3. Тайм-аут

  • client_header_timeout: клиент должен завершить передачу запрошенного заголовка в течение указанного времени. Установите значение 5 с или ниже, что полезно для сопротивления медленным атакам.
  • client_body_timeout: время ожидания Nginx для чтения тела запроса клиента два раза подряд. Установите значение 5 секунд или меньше.
  • Keepalive_timeout: Определите время поддержки активности, обычно рекомендуется 60 секунд.
  • proxy_connect_timeout: время ожидания Nginx для подключения к внутреннему серверу и отправки запросов. Установите значение 5 секунд или ниже.
  • proxy_read_timeout: период ожидания, в течение которого Nginx может прочитать ответ от внутреннего сервера два раза подряд. Установите значение 5 секунд или меньше.

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

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

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

Язык кода:bash
копировать
location /api {
    proxy_pass http://127.0.0.1:90; # Адрес внутреннего сервера
}
Установить буфер прокси

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

Язык кода:bash
копировать
location /api {
    proxy_pass http://127.0.0.1:90; # Адрес внутреннего сервера
    
    proxy_buffering on;
    proxy_buffer_size 32k;
    proxy_buffers 4 128k;
    proxy_busy_buffers_size 256k;
    proxy_max_temp_file_size 256k;
    proxy_temp_file_write_size 256k;
}

Описание параметра:

  • proxy_buffering: Пользователь управляет включением или выключением буферизации прокси.
  • proxy_buffer_size: Обычно размер этого буфера устанавливается равным размеру одной страницы памяти, а именно 4 КБ или 8 КБ, в зависимости от платформы сервера. Вы также можете установить его меньше, но нет необходимости устанавливать его слишком большим, поскольку он используется только для буферизации начальной части ответа.
  • proxy_buffers: копировать код Этот параметр используется для установки количества и размера буферов, используемых для чтения ответов с сервера. Обычно по умолчанию,Размер одного буфера равен размеру одной страницы памяти.,Например, 4к или 8к.
  • proxy_busy_buffers_size: после того, как буфер указанного размера перейдет в состояние занятости, его уже нельзя будет записать, а оставшийся буфер может продолжать читать ответы от сервера или записывать ответ во временный файл на диске.
  • proxy_max_temp_file_size: этот параметр используется для установки максимального размера временных файлов на диске.
  • proxy_temp_file_write_size: этот параметр используется для установки размера временного файла, записываемого на диск каждый раз. Обычно значение параметра устанавливается равным сумме proxy_buffer_size и одного буфера в proxy_buffers, что в два раза превышает размер одной страницы памяти.
Установить информацию заголовка
Язык кода:bash
копировать
location /api {
    proxy_pass http://127.0.0.1:90;
    proxy_set_header Host $host; # Установите заголовок Host, полученный внутренним сервером, на Host исходного запроса.
    proxy_set_header X-Real-IP $remote_addr; # Установите заголовок X-Real-IP на IP-адрес клиента.
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #Используется для представления реального IP-адреса HTTP-запросчика.
}

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

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

Язык кода:bash
копировать
location /api {
    proxy_pass http://127.0.0.1:90;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

2. Выбор протокола Nginx Proxy:

При использовании протокола Http обратного прокси-сервера Nginx по умолчанию используется Http1.0 для перехода на внутренний сервер для получения содержимого ответа, а затем возврата его клиенту.

Важная разница между Http 1.0 и Http 1.1 заключается в том, что первая не поддерживает Http Kepp-Alive.

Язык кода:bash
копировать
http {
    upstream backend {
        keepalive 50; # Должен быть настроен, рекомендуется 50-100
        server http://127.0.0.1:90; # Адрес внутреннего сервера
    }
 
    server {
        listen 80;
 
        location / {
            proxy_pass http://backend;
            proxy_http_version 1.1; ## должен
            proxy_set_header Connection "keep-alive";
            proxy_keepalive_timeout 60s; # Тайм-аут поддержания активности
        }
    }
}

Обратный прокси (кэширование)

Синтаксис конфигурации кэша прокси-сервера следующий, параметры подробно объяснены:

Язык кода:bash
копировать
upstream klsgapi {
    server 127.0.0.1:90;
}

proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=klsgapi_cache:10m max_size=10g inactive=60m use_temp_path=off;

server {
    listen       80;
    server_name  localhost;

    if ($request_uri ~ ^/(index.html|login|register|password|\/reset)) {
        set $cookie_nocache 1;
    }

    location / {
        proxy_cache klsgapi_cache;
        proxy_pass http://klsgapi;
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid any 10m;
        proxy_cache_key $host$uri$is_args$args;
        proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authorization;
        add_header Nginx-Cache "$upstream_cache_status";
    }
}

Описание параметра кэша:

Язык кода:bash
копировать
proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2 keys_zone=klsgapi_cache:10m max_size=10g inactive=60m use_temp_path=off;
  • /usr/local/nginx/proxy_cache Определить каталог кэша
  • уровни=1:2 Выравнивание каталогов основано на двухуровневых каталогах.
  • keys_zone=chrdai_cache: имя 10-метровой зоны. Это имя, которое настраивается после proxy_cache. 10 м указывает размер пространства ключей. Обычно на 1 м можно хранить около 8000 ключей.
  • max_size=10g указывает максимальный размер каталога кэша.,Вы не можете позволить кэшу расти бесконечно, чтобы заполнить весь диск. Когда пространство заполнено,Nginx активирует правило исключения,Те, которые посещаются не часто, будут удалены.
  • inactive=60м Эти 60м являются единицей времени.,значит 60 минут,Указывает, что если определенный кэш не был посещен в течение 60 минут,очистит его.
  • use_temp_path=off Используется для хранения временных файлов.,Рекомендуется закрыть,если открыто,Nginx создаст еще один каталог и каталог кэша. Эти два каталога подвержены некоторым потерям производительности при обновлении кэша.
  • proxy_cache chrdai_cache Указывает, что мы включили прокси-кэш, значение которого находится в proxy_cache_path. keys_zone значение, если вы не хотите использовать прокси-кэш, настройте значение off。
  • proxy_cache_valid 200 304 12h Срок действия ответа для кода состояния 200,304 составляет 12 часов;
  • proxy_cache_valid любые 10m; Время кэширования для остальных кодов статуса, кроме кода статуса 200и304, составляет 10 минут.
  • proxy_cache_key $host$uri$is_args$args: В этой конфигурации proxy_cache_key Ему присваивается комбинация запрошенного имени хоста ($host), URI ($uri), наличия параметров ($is_args) и параметров ($args). Таким образом, каждый уникальный запрос будет направлен в место, соответствующее значению ключа, сгенерированному на основе этой информации.
  • add_header Nginx-Cache "$upstream_cache_status"; Добавьте информацию заголовка ответа HTTP, Nginx-Cache, чтобы сообщить клиенту, был ли задействован кэш прокси.
  • proxy_no_cache Смысл конфигурации здесь в том, что при совпадении URL-адреса index.html , login, register, password и reset Когда страница, соответствующая URL-адресу, не указана.

наконец

Это обобщенные знания об обратном прокси-сервере Nginx и кеше настроек обратного прокси-сервера. Обновлять другие знания Nginx непросто, когда у меня будет время.

Документация официального сайта обратного прокси-сервера Nginx http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path

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 позволяет экспортировать с сохранением двух десятичных знаков.