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
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose