Директивы NGINX

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

daemon Директива daemon контролирует, будет ли NGINX работать в фоновом режиме (daemon mode) или в переднем плане.
main
Синтаксисdaemon on | off;
По умолчаниюon
Контекстmain
МодульNGINX Core

Описание

Директива `daemon` отвечает за установку режима работы сервера NGINX, а именно за то, должен ли он запускаться как фоновый процесс (daemon mode) или оставаться в переднем плане. Эту директиву можно задать значением 'on' или 'off', где 'on' включает daemon mode и позволяет NGINX отсоединиться от терминала, запустившись самостоятельно как фоновая служба. Напротив, установка 'off' удерживает NGINX в переднем плане, что полезно при отладке или когда нужно внимательно отслеживать вывод сервера в окне терминала. Когда `daemon` установлен в 'on', NGINX запустит свой процесс, выполнит fork и создаст дочерний процесс для обработки запросов, что позволяет родительскому процессу завершиться, пока дочерний продолжает работу. Это помогает более эффективно управлять ресурсами и гарантирует, что NGINX может продолжать работу без контролирующего терминала. Однако в среде разработки или при устранении неполадок вы можете захотеть установить эту директиву в 'off', чтобы наблюдать логи и выводы отладки NGINX прямо в терминале. Стоит отметить, что эта директива обычно размещается в основном контексте конфигурации NGINX и обрабатывается до запуска рабочих процессов, поэтому её следует определять соответствующим образом для достижения требуемого режима работы сервера.

Пример конфига

daemon off;

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

В некоторых средах запуск NGINX в переднем плане (с 'daemon off') может помешать ему корректно получать сигналы.

master_process Директива 'master_process' управляет работой мастер-процесса NGINX.
main
Синтаксисmaster_process on | off;
По умолчаниюon
Контекстmain
МодульNGINX Core

Описание

Директива 'master_process' — это флаг, определяющий, будет ли NGINX работать в режиме мастера или в режиме одиночного процесса. Когда установлено 'on', мастер-процесс включается, что позволяет NGINX управлять рабочими процессами. Это стандартный режим работы NGINX, в котором мастер-процесс отвечает за управление рабочими процессами, включая их создание и завершение по мере необходимости в зависимости от нагрузки. Если 'master_process' установлена в 'off', NGINX будет работать без мастер-процесса и функционировать в режиме одиночного процесса. В этом режиме нет рабочих процессов; NGINX обрабатывает все запросы в одном процессе. Это может быть полезно для отладки или в легковесных окружениях, где многопроцессность не нужна, но такой режим менее эффективен по сравнению со стандартной моделью мастер-воркер. Конфигурация этой директивы имеет решающее значение для обеспечения функционирования NGINX в ожидаемой многопроцессной среде, где несколько рабочих процессов улучшают производительность и использование ресурсов. Параметр этой директивы — простой флаг — "on" или "off", указывающий, должен ли мастер-процесс быть включен или отключен. Как правило, он размещается в основном контексте файла конфигурации nginx, и его использование может варьироваться в зависимости от конкретных требований развертывания, таких как ограничения ресурсов или операционные цели.

Пример конфига

master_process on;

Установка 'master_process' в 'off' отключит рабочие процессы, что может привести к снижению производительности под нагрузкой.

При работе в режиме 'off' убедитесь, что ваша конфигурация поддерживает запуск NGINX без рабочих процессов.

timer_resolution Задаёт разрешение таймера в миллисекундах.
main
Синтаксисtimer_resolution milliseconds;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `timer_resolution` в NGINX позволяет задать разрешение таймера событий в миллисекундах. Эта директива определяется в основном модуле и имеет решающее значение для оптимизации операций, связанных с учётом времени в системе обработки событий NGINX. Регулируя разрешение таймера, пользователи могут влиять на то, как обрабатываются события, что потенциально может привести к повышению производительности приложений с особыми требованиями к точности временных характеристик. Аргумент директивы `timer_resolution` — одно значение, задающее разрешение таймера в миллисекундах. Это особенно важно для приложений с событиями высокой частоты, где более мелкое разрешение таймера может улучшить точность выполнения таких событий. Однако чрезмерно низкое значение может увеличить нагрузку на CPU из-за более частых проверок таймера. Поэтому необходимо найти баланс, соответствующий рабочей нагрузке сервера. Обратите внимание, что эта директива должна быть задана в главном контексте, то есть она должна появляться только на верхнем уровне конфигурации NGINX (например, в основном блоке конфигурации и не внутри events или http блоков). Понимание потребности вашего приложения в точности временных показателей поможет эффективно использовать эту директиву для повышения общей производительности.

Пример конфига

timer_resolution 100;

Будьте осторожны при установке очень низких значений — это может привести к повышенной нагрузке на CPU.

Эта директива действует только в основном контексте и может вызвать ошибки, если она размещена в другом месте.

pid Директива `pid` указывает файл, в который NGINX должен записать идентификатор процесса (PID) при запуске в режиме демона.
main
Синтаксисpid file;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `pid` используется в ядре NGINX для задания расположения файла, который будет содержать идентификатор процесса (PID) мастер-процесса при запуске NGINX. Этот PID-файл имеет решающее значение для управления процессом NGINX, позволяя администраторам легко отслеживать и контролировать его, особенно при выполнении операций, таких как корректное завершение работы или перезагрузка. Указав для этой директивы путь к файлу, NGINX создаст этот файл и запишет в него свой PID при старте. Это облегчает управление процессом и гарантирует, что системные администраторы смогут эффективно управлять службой без необходимости угадывать идентификатор процесса. Параметр директивы `pid` — это единый аргумент, задающий путь к файлу, в котором будет сохраняться PID. Обычно этот путь указывается в место, доступное для записи пользователем, под которым выполняется процесс NGINX, поэтому важно обеспечить корректные права доступа. В случаях, когда указанный PID-файл не может быть создан или записан из-за проблем с правами доступа или неверного пути, NGINX выдаст ошибку и завершит работу, не запустившись. Поэтому необходимо убедиться, что указанный путь действителен и доступен. Директива `pid` должна находиться в основном контексте конфигурации, как правило на верхнем уровне конфигурационного файла, до любых блоков server или location, поскольку она относится ко всему процессу NGINX, а не к отдельным процессам серверов.

Пример конфига

pid /var/run/nginx.pid;

Убедитесь, что указанный путь к файлу PID доступен для записи пользователем, запускающим NGINX; в противном случае NGINX не запустится.

Не компилируйте NGINX без соответствующих прав для указанного пути к файлу PID; это может привести к сбоям при запуске.

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

lock_file Директива `lock_file` указывает файл, используемый для обеспечения запуска только одного экземпляра NGINX одновременно.
main
Синтаксисlock_file file_path;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `lock_file` в NGINX используется для определения конкретного файла, который выступает в качестве блокировки, чтобы предотвратить одновременный запуск нескольких экземпляров NGINX. При запуске NGINX он пытается создать блокировку с помощью указанного файла. Если этот файл уже существует, что указывает на то, что другой экземпляр NGINX запущен, новый экземпляр не запустится и зафиксирует соответствующее сообщение об ошибке. Этот механизм необходим для сохранения целостности конфигураций и обеспечения того, что одновременно может работать только один главный процесс NGINX. Аргумент, передаваемый в `lock_file`, — это путь к файлу, который можно указать в любом доступном для записи месте. Как правило, это временный каталог или выделенный каталог конфигурации. Тщательно выбирая расположение файла блокировки, системные администраторы могут более эффективно управлять средами с несколькими экземплярами. Использование файла блокировки особенно полезно в конфигурациях, где автоматизированные скрипты или менеджеры сервисов могут непреднамеренно попытаться запустить несколько экземпляров NGINX, что приводит к конфликтам и другим нежелательным состояниям. Важно отметить, что если указанный файл блокировки не может быть создан из-за проблем с правами или ошибок файловой системы, NGINX не запустится и отобразит сообщение об ошибке, связанное с невозможностью создать файл блокировки. Поэтому администраторы должны убедиться, что процесс NGINX имеет соответствующие права для создания и записи в этот файл блокировки.

Пример конфига

lock_file /var/run/nginx.lock;

Убедитесь, что путь к файлу блокировки доступен для записи пользователем NGINX.

Использование одного и того же файла блокировки для нескольких экземпляров NGINX может привести к ошибкам при запуске.

Если файл блокировки не удалён должным образом (из‑за сбоев или некорректного завершения работы), NGINX может не запуститься без ручного вмешательства.

worker_processes Директива worker_processes задаёт количество рабочих процессов в NGINX.
main
Синтаксисworker_processes number | auto;
По умолчанию1
Контекстmain
МодульNGINX Core

Описание

Директива `worker_processes` определяет, сколько рабочих процессов NGINX создаст для обработки запросов. Каждый рабочий процесс может одновременно обрабатывать множество соединений, что позволяет NGINX эффективно масштабироваться в зависимости от числа доступных ядер CPU и объёма входящих запросов. Указанное число рабочих процессов может существенно повлиять на общую производительность сервера, особенно при высокой нагрузке. Эта директива может принимать целочисленное значение, обозначающее фиксированное число рабочих процессов, или ключевое слово `auto`, которое инструктирует NGINX автоматически задать количество на основе доступных ядер CPU. При установке в `auto` NGINX вычисляет количество рабочих процессов исходя из числа обнаруженных на сервере ядер CPU. Рекомендуется задавать это значение с учётом аппаратного обеспечения и специфических потребностей приложения для достижения оптимальной производительности. На практике при настройке директивы `worker_processes` системным администраторам следует отслеживать нагрузку и показатели производительности их приложений, чтобы определить подходящее значение. Как указание слишком малого, так и слишком большого числа рабочих процессов может привести к ухудшению производительности. В некоторых средах может потребоваться тщательная настройка, чтобы учесть характеристики ожидаемой нагрузки на сервер.

Пример конфига

worker_processes auto;

Установка worker_processes выше числа доступных ядер CPU может привести к переключению контекста и снижению производительности.

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

debug_points Директива `debug_points` управляет поведением NGINX при достижении определённых точек отладки во время обработки.
main
Синтаксисdebug_points stop | abort;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `debug_points` предназначена для разработчиков и опытных пользователей, которые хотят управлять потоком выполнения сервера NGINX в целях отладки. Эту директиву можно настраивать в главном контексте; она принимает один аргумент, задающий, какую точку отладки вызвать. Доступные операнды для этой директивы — `stop` и `abort`, каждый из которых по‑разному влияет на процесс NGINX при достижении во время выполнения. Когда установлено `stop`, NGINX приостанавливает выполнение в заданной точке отладки, позволяя пользователю при необходимости подключить отладчик. Это особенно полезно для пошагового анализа поведения приложения в ответ на конкретные запросы или системные события. С другой стороны, выбор `abort` приведёт к немедленному завершению процесса, что удобно при отладке фатальных ошибок или для обеспечения целостности системы в нежелательных состояниях. Поведение директивы `debug_points` может значительно улучшить процесс отладки при разработке или диагностике модулей и конфигураций NGINX. Она служит механизмом введения преднамеренных точек останова в коде без внесения изменений в исходный код, что облегчает более эффективные отладочные сценарии.

Пример конфига

debug_points stop;

Убедитесь, что сборка NGINX собрана с поддержкой отладки, иначе эта директива может не работать.

Использование `debug_points` повлияет на производительность NGINX; его следует удалить или закомментировать в рабочей среде.

user Директива user задаёт пользователя и группу, от имени которых будут выполняться рабочие процессы NGINX.
main
Синтаксисuser username [groupname];
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `user` в NGINX задаёт привилегии пользователя и группы для рабочих процессов. Это важно для безопасности: NGINX будет работать от имени непривилегированного пользователя, а не root, что снижает потенциальный ущерб от уязвимостей. Директива принимает один или два параметра: первый параметр — имя пользователя, а второй (необязательный) — имя группы. Если указан только один аргумент, NGINX будет использовать группу по умолчанию, связанную с этим пользователем. Например, `user nginx;` устанавливает пользователя 'nginx' и использует группу по умолчанию для 'nginx'. При указании обоих параметров запись имеет вид `user username groupname;`. Эта директива должна объявляться в основном контексте конфигурационного файла NGINX, обычно в файле `nginx.conf`, до определения контекстов `events` или `http`. Изменения, внесённые этой директивой, вступают в силу только при запуске или перезапуске NGINX. Если процесс уже запущен, изменение этой директивы потребует полной остановки и последующего запуска NGINX для применения. Следует убедиться, что указанный пользователь имеет достаточные права доступа к необходимым файлам, каталогам и ресурсам, таким как журналы или document roots, но не обладает чрезмерно широкими правами, чтобы сохранять принцип наименьших привилегий.

Пример конфига

user www-data;
user nginx nginx;

Убедитесь, что указанный пользователь существует в системе перед запуском NGINX.

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

Запуск NGINX от имени пользователя с недостаточными правами приведёт к тому, что он не сможет запуститься или получить доступ к необходимым ресурсам.

worker_priority Устанавливает приоритет рабочих процессов для более эффективного планирования на многопроцессорных системах.
main
Синтаксисworker_priority number;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `worker_priority` позволяет задать значение nice для рабочих процессов в NGINX, что помогает влиять на то, как операционная система планирует эти процессы в среде с несколькими ядрами. Значение nice — целое число в диапазоне от -20 (высший приоритет) до 19 (низший приоритет), что позволяет тонко управлять распределением ресурсов CPU между рабочими процессами NGINX. Эта директива особенно полезна в окружениях, где требуется отдавать приоритет обработке веб‑трафика по сравнению с другими системными процессами, обеспечивая более быструю и эффективную реакцию веб‑сервера под нагрузкой. По умолчанию рабочие процессы NGINX наследуют системные настройки приоритета по умолчанию. При установке конкретного приоритета с помощью директивы `worker_priority` вы стремитесь сделать время отклика сервера более предсказуемым и эффективным, снижая вероятность конфликтов с другими процессами, которые могут потреблять ресурсы CPU. Важно учитывать, что установка высокого приоритета для рабочих процессов NGINX может привести к конкуренции за ресурсы с другими системными процессами, поэтому необходимо внимательно оценивать общую нагрузку и требования к системе. При настройке NGINX обязательно проводите тщательное тестирование после изменения параметра `worker_priority`, так как его влияние может значительно различаться в зависимости от нагрузки и архитектуры сервера. Кроме того, не все операционные системы могут поддерживать все значения nice, поэтому рекомендуется обратиться к документации вашей операционной системы, чтобы обеспечить совместимость.

Пример конфига

worker_priority 10;

Установка слишком высокого приоритета может привести к тому, что другие критически важные процессы на сервере будут испытывать недостаток ресурсов, что приведёт к нестабильности.

Не все операционные системы поддерживают весь диапазон значений приоритета, что может привести к непредвиденному поведению.

Превышение максимального nice value, установленного OS, может привести к ошибкам конфигурации.

worker_cpu_affinity Директива `worker_cpu_affinity` привязывает worker-процессы NGINX к конкретным ядрам CPU для повышения производительности.
main
Синтаксисworker_cpu_affinity mask | cpus;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `worker_cpu_affinity` используется в основном контексте для указания, на каких ядрах CPU может выполняться worker-процесс. Это помогает оптимизировать производительность, гарантируя, что worker-процесс работает на заданных ядрах и тем самым избегая переключения контекста и промахов кэша, которые могут возникать при миграции процессов между ядрами. Директива принимает один или несколько аргументов, задающих привязку к ядрам CPU. Это особенно полезно на системах с несколькими ядрами CPU, позволяя максимально использовать ресурсы и минимизировать задержки. Параметры для этой директивы задаются в формате списка CPU, которые могут быть указаны в разных формах, включая одноядерные спецификации (например, '0'), диапазонные спецификации (например, '0-3') или их комбинации. Каждое добавленное значение обозначает допустимые ядра CPU, которые соответствующий worker может использовать. При определении нескольких worker-процессов ядра CPU могут быть распределены между ними, что дополнительно улучшает параллельную обработку. Такая конфигурация помогает поддерживать производительность при высокой нагрузке и может приводить к более предсказуемому времени отклика. Внедрение `worker_cpu_affinity` может потребовать некоторых экспериментов для определения оптимальной конфигурации в зависимости от конкретной нагрузки и архитектуры оборудования. Тщательный мониторинг производительности системы должен направлять эти решения, так как эффективность привязки к ядрам может варьироваться в зависимости от характера нагрузки и числа доступных ядер CPU.

Пример конфига

worker_cpu_affinity auto;  
# Example with specific core assignment for 4 workers:  
worker_cpu_affinity  0001 0010 0100 1000;

Указание слишком большого числа ядер CPU может привести к снижению производительности из-за неправильного распределения нагрузки.

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

Некорректное форматирование CPU mask может привести к ошибкам запуска NGINX.

worker_rlimit_nofile Директива 'worker_rlimit_nofile' устанавливает максимальное количество открытых файлов, которое может иметь каждый рабочий процесс NGINX.
main
Синтаксисworker_rlimit_nofile number;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива 'worker_rlimit_nofile' задаёт ограничение на число дескрипторов файлов, которые может открывать рабочий процесс. Это важно для максимизации потенциального числа одновременных подключений или обращений к файлам, которые NGINX может обработать. Когда это ограничение достигается, рабочие процессы не смогут открыть дополнительные файлы или установить новые соединения, что может привести к неудачным запросам или обрывам соединений. Эта директива необходима для сайтов и приложений с высоким трафиком, где значение по умолчанию может быть недостаточным. Установив более высокое значение, администраторы могут оптимизировать производительность и отзывчивость сервера NGINX. Значение задаётся в главном контексте и должно быть настроено с учётом ожидаемого трафика и доступных ресурсов сервера.

Пример конфига

worker_rlimit_nofile 65536;

Установка этой директивы на слишком высокое значение может исчерпать ресурсы сервера и привести к нестабильности.

Убедитесь, что системные лимиты (установленные через 'ulimit') соответствуют желаемым значениям; в противном случае NGINX вернётся к системным ограничениям.

Чтобы внесённые в эту директиву изменения вступили в силу, требуется перезапуск NGINX.

worker_rlimit_core Устанавливает предел размера core-файлов для рабочих процессов.
main
Синтаксисworker_rlimit_core size;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `worker_rlimit_core` используется для задания максимального размера core-файлов, создаваемых рабочими процессами в NGINX. Core-файл — это файл, содержащий снимок памяти работающего процесса в момент его аварийного завершения. Эта директива позволяет администраторам NGINX задать, какого размера могут быть core-дампы для целей отладки и анализа. Значение, указанное в этой директиве, напрямую соответствует настройке `ulimit` для core-дампов, что обеспечивает эффективное управление ресурсами и упрощает поиск и устранение неисправностей в процессе разработки или в производственной среде. Указав ненулевое числовое значение, администратор может настроить предел размера core-файлов в соответствии с требованиями. Однако следует помнить, что установка чрезмерно большого предела размера core-файлов может занять значительное дисковое пространство, особенно в средах с высокой частотой аварий процессов. С другой стороны, установка значения 0 полностью отключает генерацию core-дампов, что может затруднить отладку при возникновении проблем. Как правило, рекомендуется устанавливать предел, который обеспечивает баланс между возможностью получения полезной отладочной информации и эффективным управлением использованием дисковых ресурсов. Директива должна быть определена в основном контексте конфигурационного файла NGINX и обычно задается в глобальном конфигурационном файле, таком как `nginx.conf`. Администраторы должны убедиться, что у них есть соответствующие права для изменения настроек генерации core-файлов, и учитывать ограничения и настройки их операционной системы, касающиеся core-дампов при использовании этой директивы.

Пример конфига

worker_rlimit_core 512M;

Отключение дампов ядра установкой значения 0 может усложнить поиск и устранение неполадок.

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

Убедитесь, что пользователь, запускающий NGINX, имеет права на запись файлов дампов ядра в указанное место.

worker_shutdown_timeout Устанавливает тайм-аут для плавного завершения рабочих процессов в NGINX.
main
Синтаксисworker_shutdown_timeout time;
По умолчанию60000
Контекстmain
МодульNGINX Core

Описание

Директива `worker_shutdown_timeout` в NGINX задаёт длительность (в миллисекундах), в течение которой NGINX будет ожидать плавного завершения рабочих процессов после получения сигнала завершения. Это позволяет рабочим процессам завершить выполняющиеся запросы и освободить ресурсы до принудительного завершения. Это особенно полезно в сценариях, где длительные соединения или большие запросы могут требовать дополнительного времени для завершения обработки. Если рабочий процесс не завершит свои операции в заданный период ожидания, NGINX принудительно завершит эти процессы. Установка слишком низкого значения может привести к прерыванию активных запросов, что повлечёт за собой потенциальную потерю данных или неполные транзакции. Напротив, слишком большое значение может задержать перезапуск или остановку приложения, что повлияет на доступность сервиса во время обслуживания или обновлений. На практике внимательный выбор этого параметра позволяет сбалансировать непрерывность обслуживания и эффективное управление ресурсами при обновлениях или плавных перезапусках.

Пример конфига

worker_shutdown_timeout 30000;  # Set a 30 seconds timeout for worker shutdown

Установка слишком малого таймаута может привести к ненормальному завершению активных запросов.

Если не задать эту директиву, может использоваться значение таймаута по умолчанию, которое может не подойти всем приложениям.

working_directory Устанавливает рабочую директорию для рабочих процессов NGINX.
main
Синтаксисworking_directory path;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `working_directory` в NGINX используется для указания директории, в которой будут работать рабочие процессы. Эта настройка важна, так как определяет директорию по умолчанию для процессов, у которых не задана конкретная рабочая директория при запуске. Задав рабочую директорию, вы обеспечиваете корректное разрешение относительных путей, используемых в конфигурациях или других директивах, относительно этой директории. Данная директива принимает один аргумент — путь к директории, которую вы хотите установить в качестве рабочей среды для рабочих процессов NGINX. Она должна использоваться в основном контексте файла конфигурации NGINX. При запуске рабочие процессы NGINX наследуют эту настройку и используют её для разрешения относительных путей, работы с файлами и ведения логов, а также для других задач, что помогает управлять правами доступа и организовывать хранение файлов. Важно убедиться, что указанная директория доступна процессу NGINX и что для неё заданы соответствующие права доступа. Непредоставление доступной директории может привести к ошибкам в работе NGINX, особенно при обработке файлов, таких как логи или файлы конфигурации, которые зависят от рабочей директории для построения своих путей.

Пример конфига

working_directory /var/www/html;

Убедитесь, что указанный каталог существует перед запуском NGINX, поскольку отсутствие каталогов может привести к ошибкам запуска.

Пользователь, запускающий NGINX, должен иметь необходимые права доступа к указанному working directory.

Использование relative paths может привести к путанице; часто лучше использовать absolute paths.

env Директива 'env' позволяет задавать переменные окружения для рабочих процессов NGINX.
main
Синтаксисenv NAME;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива 'env' используется в основном контексте конфигурационного файла NGINX для указания переменных окружения, которые должны быть переданы рабочим процессам. Это особенно полезно для задания значений конфигурации, к которым рабочие процессы могут обращаться во время выполнения, таких как API-ключи, строки подключения к базе данных или другие параметры, которые могут меняться в зависимости от среды развертывания. Синтаксис директивы 'env' прост: она принимает один аргумент, который задаёт имя переменной окружения. Можно указать несколько директив 'env' для задания нескольких переменных, поскольку каждая директива применяется независимо. В базовом C-коде директива 'env' обрабатывается во время фазы запуска NGINX. Указанные переменные добавляются в набор переменных окружения рабочих процессов NGINX, что позволяет обращаться к ним как к обычным переменным окружения. Директива 'env' особенно полезна в сценариях развертывания приложений в контейнеризированных средах (например, Docker) или системах оркестрации (например, Kubernetes), поскольку она дополняет практики управления конфигурацией при развертывании, позволяя легко изменять настройки без изменения кода приложения. Важно отметить, что значения, заданные директивой 'env', не сохранятся при перезагрузках процесса NGINX, если они явно не включены снова в конфигурационный файл. Кроме того, любые изменения переменных окружения в системе после запуска NGINX не вступят в силу, пока процесс NGINX не будет перезапущен. Поэтому понимание того, как эффективно использовать эту директиву, имеет решающее значение для поддержания конфигурации при развертываниях.

Пример конфига

env MY_DATABASE_USER;
env MY_API_KEY;

Обязательно перезапустите NGINX после добавления или изменения директив 'env', чтобы изменения вступили в силу.

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

load_module Директива `load_module` динамически загружает модуль NGINX во время выполнения.
main
Синтаксисload_module path/to/module.so;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `load_module` позволяет пользователям динамически загружать указанный модуль NGINX без перекомпиляции всего бинарного файла NGINX. Эта директива должна находиться в основном контексте конфигурации и принимает один аргумент: путь к файлу разделяемого объекта модуля (обычно с суффиксом .so). Когда рабочий процесс NGINX запускается, эта директива инструктирует NGINX попытаться загрузить модуль, указанный в её аргументе, что позволяет добавить дополнительную функциональность в сервер без необходимости перезапуска или перекомпиляции. Эта директива может быть критически важна для включения опциональных функций или сторонних модулей, расширяющих базовые возможности NGINX, таких как дополнительные механизмы аутентификации или улучшения производительности. Если модуль зависит от других модулей или разделяемых библиотек, эти зависимости также должны быть удовлетворены во время выполнения для успешной загрузки. Пользователям следует убедиться, что указанный файл модуля доступен и процесс NGINX имеет необходимые права для его загрузки. Если загрузка модуля не удастся, NGINX выдаст ошибку и может отказаться от запуска в зависимости от серьёзности возникшей ошибки. Чтобы эффективно использовать эту директиву, обычно её определяют в основном блоке конфигурации NGINX, который обрабатывается перед остальными настройками. Важно отметить, что все зависимости модуля должны быть разрешены заранее, чтобы избежать ошибок во время выполнения.

Пример конфига

load_module modules/ngx_http_custom_module.so;

Убедитесь, что указанный файл модуля существует и доступен процессу NGINX.

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

Помните, что эту директиву нужно размещать только в основном контексте конфигурации NGINX.

error_log Директива error_log в NGINX указывает файл или расположение, куда записываются сообщения об ошибках.
main
Синтаксисerror_log path [level];
По умолчаниюerror
Контекстmain
МодульNGINX Core

Описание

Директива error_log является основополагающей при настройке поведения логирования в NGINX. Она позволяет администраторам определить один или несколько файлов журнала, в которые будут записываться сообщения об ошибках, включая критические ошибки, предупреждения и информационные сообщения о работе сервера. Директива может принимать различные уровни логирования, такие как "debug", "info", "notice", "warn", "error" и "crit", которые определяют степень серьёзности записываемых сообщений. Журналы помогают в диагностике проблем и мониторинге производительности и надёжности сервера. В самой простой форме директива error_log принимает один аргумент, указывающий путь к файлу журнала. Если она указана несколько раз, NGINX будет записывать сообщения в несколько файлов, каждый из которых может иметь разные уровни логирования. Эта возможность обеспечивает тонкую настройку логирования; например, вы можете отправлять сообщения об ошибках в один файл журнала, а критические сообщения — в другой. По умолчанию уровень логирования установлен в "error", что означает, что будут записываться только сообщения об ошибках и более серьёзные сообщения, если не настроено иначе.

Пример конфига

error_log /var/log/nginx/error.log warn;

Указание неверного пути к файлу помешает ведению журналов и может вызвать проблемы во время выполнения.

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

Убедитесь, что пользователь NGINX имеет права на запись в каталог, где находится файл журнала.

pcre_jit Директива `pcre_jit` включает или отключает JIT-компиляцию (Just-In-Time) для регулярных выражений PCRE в NGINX.
main
Синтаксисpcre_jit on | off;
По умолчаниюoff
Контекстmain
МодульNGINX Core

Описание

Директива `pcre_jit` управляет использованием JIT-компиляции (Just-In-Time) для регулярных выражений, обрабатываемых с помощью библиотеки PCRE (Perl Compatible Regular Expressions). Когда JIT включена, регулярные выражения преобразуются в нативный машинный код для повышения производительности при сопоставлении шаблонов, что может существенно ускорить обработку запросов, зависящих от регулярных выражений при сопоставлении location или в директивах сервера. Эта директива доступна в контексте `main` и может быть установлена в значение `on` или `off`. По умолчанию JIT-компиляция отключена (off). Однако при включении она может повысить эффективность операций NGINX, использующих регулярные выражения, особенно при высокой нагрузке. Важно убедиться, что установленная в системе библиотека PCRE поддерживает JIT-компиляцию, так как не все сборки PCRE включают эту возможность. При использовании директивы `pcre_jit` администраторам следует учитывать, что хотя она может улучшить производительность, она также может привести к увеличению потребления памяти из-за хранения скомпилированных шаблонов регулярных выражений. Кроме того, в отдельных случаях сложные регулярные выражения могут вызывать проблемы совместимости; поэтому рекомендуется тщательно протестировать конфигурации после включения этой директивы.

Пример конфига

pcre_jit on;

JIT-компиляция может увеличить потребление памяти из-за хранения скомпилированных шаблонов.

Убедитесь, что установленная библиотека PCRE поддерживает JIT; в противном случае JIT не будет включён, несмотря на то, что директива установлена в 'on'.

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

thread_pool Директива `thread_pool` настраивает пул потоков для обработки асинхронных запросов в NGINX.
main
Синтаксисthread_pool name size [stack_size];
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `thread_pool` используется для определения пула потоков, который позволяет NGINX передавать обработку асинхронных запросов потокам, что может улучшить производительность за счёт более эффективного использования многоядерных процессоров. Эта директива принимает два-три аргумента: имя пула потоков, размер пула и необязательный параметр размера стека потока. Параметры позволяют тонко настроить ресурсы, выделяемые для обработки одновременных подключений с помощью потоков, помогая сбалансировать распределение нагрузки по ресурсам сервера. Когда директива `thread_pool` задана, NGINX создаёт указанное количество потоков в пуле, которые могут использоваться для задач, зависящих от ввода-вывода (I/O) или требующих блокирующих операций. Потоки управляются независимо от рабочих процессов, что позволяет эффективно выполнять операции без блокировки основного цикла событий. Это особенно полезно в сценариях, таких как скрипты на Lua, загрузки файлов или другие долгие операции, которые обычно замедляют работу при обработке непосредственно в рабочем процессе. Необязательный параметр размера стека определяет объём стека, выделяемого для каждого потока, что может быть критично при глубокой рекурсии или операциях с большой нагрузкой на стек. Важно тщательно управлять размером пула потоков и количеством рабочих процессов, так как слишком большое число потоков может привести к избыточному переключению контекста, снижению отдачи в производительности и, в конечном итоге, к исчерпанию ресурсов.

Пример конфига

thread_pool my_pool 32;

Установка слишком большого размера thread pool может привести к увеличению context switching и снижению производительности.

Неиспользование надлежащих механизмов thread synchronization может привести к race conditions при доступе к shared resources.

devpoll_changes Директива devpoll_changes задаёт максимальное число файловых дескрипторов, которые могут обрабатываться одновременно в методе событий devpoll.
events
Синтаксисdevpoll_changes number;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива `devpoll_changes` в NGINX используется для настройки того, сколько файловых дескрипторов может одновременно отслеживаться на предмет событий при применении метода событий devpoll. Эта техника особенно полезна в средах, где может быть большое число одновременных соединений, например на высоконагруженных веб‑серверах. Установка адекватного значения позволяет NGINX эффективно обслуживать большее количество соединений, не сталкиваясь с ограничениями, которые могут ухудшить производительность. Параметром для директивы `devpoll_changes` является одно целое число, определяющее максимальное число событий, которое должно быть возвращено при каждом системном вызове. Если этот предел достигается, любые дополнительные изменения не будут обработаны до тех пор, пока не освободится место. Фактическое поведение директивы может существенно влиять на эффективность сетевых операций и обработку клиентов, особенно в системах с высокой степенью параллельности. Неправильная настройка может привести к перерасходу ресурсов или потере соединений. При настройке этого параметра важно учитывать возможности системы и ожидаемую нагрузку, чтобы добиться оптимальной производительности. Убедиться, что это значение соответствует характеристикам окружения (например, доступной памяти и CPU), поможет максимально увеличить пропускную способность сервера.

Пример конфига

events {
    devpoll_changes 1024;
}

Установка значения выше максимально допустимого операционной системой может привести к системным ошибкам.

Если не корректировать значение в соответствии с нагрузкой сервера, это может привести к неэффективному использованию ресурсов.

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

devpoll_events Директива `devpoll_events` настраивает NGINX на использование механизма уведомления о событиях DEVPOLL для управления соединениями.
events
Синтаксисdevpoll_events;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива `devpoll_events`, когда указана в контексте `events`, включает механизм DEVPOLL для обработки соединений в событийно-ориентированной архитектуре NGINX. DEVPOLL, доступный в Solaris и в вариантах других Unix-подобных систем, предлагает масштабируемый способ обработки большого числа одновременных соединений. Используя DEVPOLL, NGINX может эффективно мониторить и реагировать на события на файловых дескрипторах без необходимости выполнения O(n) линейных сканирований, которые могут стать узким местом в других моделях событий, таких как select() или poll(). Эта директива не принимает аргументов и обычно используется для оптимизации производительности серверных приложений при высокой нагрузке. Она позволяет рабочим процессам переходить в спящий режим и реактивно обрабатывать входящие соединения или другие события, что способствует лучшему использованию CPU и показателям производительности за счёт уменьшения переключений контекста и повышенной общей отзывчивости системы. В основном это приносит пользу в окружениях, где ожидается значительное число одновременных соединений, например веб-серверам, обслуживающим тысячи пользователей.

Пример конфига

events {
    devpoll_events;
}

Убедитесь, что ваша операционная система поддерживает DEVPOLL, поскольку эта директива применима только на системах, реализующих этот механизм.

Неправильная настройка рабочих процессов NGINX может привести к неоптимальной производительности даже при включенном DEVPOLL.

epoll_events Директива `epoll_events` настраивает модель обработки событий для NGINX при использовании механизма epoll.
events
Синтаксисepoll_events number;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива `epoll_events`, используемая в контексте `events` в NGINX, позволяет администраторам указывать количество и типы событий, которые должен обрабатывать механизм epoll. Она повышает производительность и масштабируемость NGINX при одновременной обработке большого числа подключений за счёт оптимизации порядка очередности и обработки событий. Директива принимает один аргумент, определяющий, как должны управляться события. Используя возможности epoll, NGINX может обеспечить неблокирующий ввод-вывод, одновременно эффективно управляя обратными вызовами для операций чтения и записи, тем самым уменьшая задержку и увеличивая пропускную способность. При настройке `epoll_events` пользователи могут изменять такие параметры, как максимальное число дескрипторов файлов или конкретные маски событий, которые задают условия, при которых дескрипторы будут инициировать обратные вызовы. Такая настройка особенно полезна в средах с высокой нагрузкой и большим количеством одновременных подключений, где тонкая настройка модели обработки событий может привести к заметному приросту производительности. Пользователям следует быть знакомыми с интерфейсом epoll в Linux, а также с последствиями различных конфигураций для использования системных ресурсов и поведения приложения. Таким образом, директива обеспечивает тонкую настройку асинхронной обработки событий, что способствует репутации NGINX как быстрого и эффективного веб-сервера. Использование директивы `epoll_events` обычно возникает в сценариях, где от NGINX ожидается обработка большого числа одновременных соединений, например в высоконагруженных веб-приложениях, где оптимизация цикла событий может помочь поддерживать отзывчивость и производительность под нагрузкой.

Пример конфига

events {
    epoll_events 1024;
}

Использование чрезмерно большого количества событий может привести к повышенному потреблению ресурсов.

Не поддерживается на платформах non-Linux; убедитесь, что ваша среда правильно настроена для epoll.

worker_aio_requests Директива 'worker_aio_requests' настраивает максимальное количество асинхронных операций ввода-вывода, которые каждый рабочий процесс может выполнять одновременно.
events
Синтаксисworker_aio_requests number;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива 'worker_aio_requests' используется в контексте 'events' для указания ограничения на число одновременных асинхронных I/O (AIO) запросов, которые может обрабатывать каждый рабочий процесс NGINX. Эта директива особенно полезна в сценариях, где NGINX используется для передачи статических файлов или эффективной обработки больших медиафайлов с помощью асинхронных механизмов. Устанавливая эту директиву, администраторы могут лучше управлять использованием ресурсов рабочих процессов и оптимизировать производительность в зависимости от возможностей сервера и характера нагрузки.\n\nЗначение должно быть положительным целым числом, указывающим максимальное количество AIO-запросов, которые рабочий процесс может поставить в очередь. Если рабочий процесс превысит это число, он не сможет принимать новые AIO-запросы до завершения части поставленных в очередь запросов. Эта директива помогает настраивать производительность приложений NGINX, активно использующих асинхронные файловые операции, находя баланс между пропускной способностью и потреблением ресурсов. Поэтому значение должно определяться исходя из конкретной нагрузки и результатов тестирования, чтобы обеспечить оптимальную производительность без перегрузки рабочих процессов.\n\nПоведение 'worker_aio_requests' может существенно влиять на время отклика сервера и общую пропускную способность, особенно в сценариях с высокой нагрузкой. Поэтому важно мониторить производительность сервера и при необходимости корректировать это значение в зависимости от требований приложения и возможностей аппаратного обеспечения.

Пример конфига

events {
    worker_aio_requests 1024;
}

Если установить это значение слишком низким, это может привести к узким местам в производительности при высокой нагрузке, поскольку AIO requests могут быть заблокированы.

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

eventport_events Директива 'eventport_events' настраивает обработку event ports в NGINX.
events
Синтаксисeventport_events;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива 'eventport_events' в NGINX предназначена для задания поведения event ports, используемых в модели обработки событий. Она в первую очередь применяется в системах, которые поддерживают event port API, позволяя более эффективно выполнять event-driven I/O за счёт масштабируемого способа обработки подключений. Эта директива даёт пользователям возможность оптимизировать свой event loop для повышения производительности, особенно в сценариях с высокой конкурентностью. При указании директивы 'eventport_events' NGINX использует механизм event port операционной системы, что может значительно повысить производительность за счёт одновременной обработки множества событий. Это особенно полезно в средах с большим числом одновременных соединений, поскольку уменьшает накладные расходы на управление многочисленными отдельными потоками или процессами. Параметры, связанные с этой директивой, как правило, включают опции для настройки таймаутов и других связанных свойств, позволяющих подбирать производительность по мере необходимости. Наличие этой директивы следует тщательно обдумывать, поскольку она может повлиять на общую масштабируемость и отзывчивость веб-сервера. Корректная настройка её параметров может привести к существенному улучшению пропускной способности и времени отклика для приложений с высокой нагрузкой.

Пример конфига

events {
    eventport_events;
}

Убедитесь, что ваша операционная система поддерживает event ports, иначе эта директива не будет иметь эффекта.

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

iocp_threads Директива 'iocp_threads' задаёт количество потоков завершения I/O для управления асинхронными операциями в NGINX на Windows.
events
Синтаксисiocp_threads number;
По умолчаниюauto (number of CPU cores)
Контекстevents
МодульNGINX Core

Описание

Директива `iocp_threads` специфична для runtime NGINX на Windows и позволяет настраивать, сколько потоков выделяется для обработки завершения I/O с использованием модели IOCP (I/O Completion Ports). Эта модель обеспечивает масштабируемый подход к обработке множества одновременно выполняемых I/O-операций, что особенно полезно для высокопроизводительных нагрузок. По умолчанию число потоков устанавливается равным числу ядер CPU, но его можно явно задать для оптимизации производительности в зависимости от потребностей приложения. Каждый поток завершения I/O работает независимо, обрабатывая завершённые I/O-запросы по сигналу завершения, что позволяет лучше использовать системные ресурсы. При использовании `iocp_threads` администраторам следует учитывать связь между числом потоков и ожидаемой нагрузкой. Небольшое число потоков может привести к узким местам при высокой нагрузке, тогда как чрезмерно большое — к издержкам переключения контекста. Поэтому рекомендуется проводить тестирование производительности, чтобы определить оптимальную конфигурацию. Кроме того, эта директива эффективна прежде всего на платформах Windows, где используется модель IOCP, и не влияет на Linux или другие операционные системы, которые не реализуют эту модель. Директива определяется в контексте 'events' конфигурации NGINX, где располагается большинство настроек, связанных с производительностью.

Пример конфига

events {
    iocp_threads 4;
}

Установка чрезмерно высокого значения может привести к конкуренции за CPU и увеличению накладных расходов на переключение контекста.

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

post_acceptex Директива 'post_acceptex' указывает функцию, которая выполняется после успешной операции accept на сокете в NGINX.
events
Синтаксисpost_acceptex function_name;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива 'post_acceptex' — это параметр конфигурации, который позволяет пользователям определить пользовательскую функцию, выполняемую после успешной операции accept в цикле обработки событий NGINX. Это особенно полезно для расширения поведения обработки соединений после их принятия. Указывая функцию, разработчики получают более тонкий контроль над обработкой соединений в специализированных сценариях, например для логирования деталей соединения или динамического изменения настроек соединения. Директива принимает один аргумент — имя функции, которую вызовет NGINX. Эта функция должна соответствовать ожидаемой сигнатуре, которую NGINX способен распознать и корректно выполнить. Это обеспечивает гибкий механизм для разработчиков и системных администраторов, позволяющий адаптировать конфигурации NGINX под конкретные нужды. Кроме того, поскольку это выполняется на низком уровне внутри модуля обработки событий, оно может быть очень эффективным и позволять настраиваемое поведение без значительных накладных расходов. На практике определение функции 'post_acceptex' включает не только реализацию самой функции, но и обеспечение её корректного взаимодействия с другими частями архитектуры NGINX. Правильная реализация может открыть доступ к расширенным возможностям, таким как обработка уникальных протоколов, пользовательское логирование или интеграция с внешними службами сразу после установления соединения.

Пример конфига

events {
    post_acceptex my_custom_accept_function;
}

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

Помните, что неправильная конфигурация вашей функции post_acceptex может привести к проблемам с обработкой соединений или к сбоям

Поведение функции должно соответствовать требованиям NGINX к событийно-ориентированным архитектурам.

acceptex_read Директива `acceptex_read` включает или отключает использование опции сокета AcceptEx для принятия соединений.
events
Синтаксисacceptex_read on | off;
По умолчаниюoff
Контекстevents
МодульNGINX Core

Описание

Директива `acceptex_read` в NGINX используется внутри контекста `events` для управления тем, использует ли NGINX функцию сокета AcceptEx при принятии входящих соединений. AcceptEx — это Windows-специфичное API, которое позволяет серверу сразу читать входящее соединение, снижая количество переключений контекста и повышая производительность. При установке в 'on' NGINX будет пытаться использовать эту возможность для принятия соединений, что при высоких нагрузках может дать более высокую производительность благодаря эффективности обработки сокетов. Однако эта функция применима только на платформах Windows, где поддерживается AcceptEx.\n\nПараметр для этой директивы — флаг, который может быть 'on' или 'off'. Если установить его в 'on', NGINX будет использовать функцию AcceptEx при обработке новых соединений. Соответственно, установка в 'off' означает использование обычного метода принятия соединений. Важно учитывать, что использование AcceptEx может повысить производительность, но также привести к проблемам совместимости с некоторыми сетевыми конфигурациями, что может повлиять на поведение приложения.\n\nОценка нагрузок сервера, типов обрабатываемого трафика и базовой инфраструктуры поможет принять решение о включении этой опции. Следует отметить, что эта функция специфична для Windows и не будет иметь эффекта на установках NGINX, не являющихся Windows. Необходимо провести соответствующее тестирование, чтобы убедиться, что включение AcceptEx не приведёт к нежелательным побочным эффектам в среде.

Пример конфига

events {
    acceptex_read on;
}

Эта директива применяется только в операционных системах Windows и не действует в системах Unix/Linux.

Включение AcceptEx может вызвать проблемы совместимости с некоторыми сетевыми конфигурациями; рекомендуется тщательно протестировать после включения.

kqueue_changes Директива `kqueue_changes` задаёт количество изменений, которые можно добавить в экземпляр kqueue для мониторинга событий в системах macOS.
events
Синтаксисkqueue_changes number;
По умолчанию128
Контекстevents
МодульNGINX Core

Описание

Директива `kqueue_changes` используется в контексте обработки событий в NGINX и специально оптимизирует производительность при использовании механизма событий kqueue, характерного для операционных систем BSD-подобного типа, включая macOS. Эта директива позволяет задавать максимальное число изменений, которые могут быть поставлены в очередь при мониторинге файловых дескрипторов, что помогает тонко настроить отзывчивость сервера NGINX при высокой нагрузке. Параметр задаёт предел того, сколько ожидающих изменений файловых дескрипторов может быть обработано одновременно, что может влиять на эффективность обработки подключений в периоды пикового трафика. При установке этой директивы важно учитывать типы приложений, работающих на сервере, и ожидаемую нагрузку. Более низкое значение может привести к пропуску событий при высокой нагрузке, тогда как более высокое значение может потреблять больше памяти и вычислительных ресурсов. Важно найти баланс между этими аспектами для обеспечения оптимальной производительности. Например, если ваше приложение часто добавляет или удаляет файловые дескрипторы из мониторинга, имеет смысл увеличить это значение, чтобы выдерживать более высокие темпы входящих подключений. Эффективное управление этим параметром может привести к улучшению производительности, особенно для приложений, испытывающих всплески запросов на подключение, превышающие обычную нагрузку. NGINX по умолчанию использует разумное значение, подходящее для многих сценариев, но администраторы могут настраивать значение `kqueue_changes` в зависимости от специфики поведения и требований приложения, что может привести к повышению производительности или снижению риска переполнения очереди событий.

Пример конфига

events {
    kqueue_changes 256;
}

Установка очень высокого значения может привести к увеличению потребления памяти.

Убедитесь, что вашему приложению действительно требуется более высокое значение; в противном случае это может привести к избыточному потреблению ресурсов.

Не применяется на системах, отличных от BSD, поскольку kqueue специфичен для операционных систем семейства BSD.

kqueue_events Директива kqueue_events настраивает NGINX на использование механизма уведомлений о событиях kqueue в системах BSD для эффективной обработки событий.
events
Синтаксисkqueue_events;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива kqueue_events специально предназначена для использования в контексте events конфигурации NGINX. Она указывает NGINX использовать механизм уведомлений о событиях kqueue, который очень эффективен и особенно подходит для обработки большого количества одновременных соединений на ОС, совместимых с BSD, таких как FreeBSD и macOS. Благодаря использованию kqueue, NGINX может активно отслеживать несколько file descriptors, уменьшая нагрузку на CPU, связанную с polling, и обеспечивая более масштабируемую производительность под нагрузкой. Когда директива kqueue_events включена, это влияет на то, как worker processes обрабатывают события, позволяя им пробуждать простаивающие соединения только при наличии реального события, например при поступлении данных или закрытии соединения. Это контрастирует со старыми механизмами обработки событий, которые могли требовать периодического опроса, что при росте числа соединений приводит к расходованию ресурсов. Важно убедиться, что ваша установка NGINX скомпилирована с поддержкой kqueue, поскольку эта директива не будет работать, если базовая OS или build не поддерживают kqueue. Эта директива принимает один аргумент, который служит для переключения использования kqueue. При правильной настройке преимущества включают более низкое потребление ресурсов и повышенную скорость за счёт более быстрой обработки событий. Необходимо протестировать конфигурацию в тестовой среде, чтобы убедиться, что она работает как ожидалось и не вводит непредвиденных проблем.

Пример конфига

events {
    kqueue_events;
}

Убедитесь, что NGINX собран с поддержкой kqueue; в противном случае директива не будет иметь никакого эффекта.

Использование kqueue оптимально только для систем BSD; применение этой директивы на неподдерживаемых платформах может привести к ошибкам.

events Директива events в NGINX настраивает событийно-ориентированную архитектуру для обработки подключений.
main
Синтаксисevents { ... }
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива events является ключевым компонентом архитектуры NGINX, управляющим тем, как сервер обрабатывает подключения. Она позволяет NGINX использовать событийно-ориентированную модель, что значительно повышает производительность и масштабируемость за счёт способности обрабатывать множество подключений с меньшими затратами ресурсов по сравнению с традиционными многопоточными подходами. В блоке events можно задать различные параметры для оптимизации обработки подключений, например параметр worker_connections, который определяет максимальное число одновременных подключений, которые может обрабатывать каждый рабочий процесс. Сама директива не принимает аргументов, но служит контейнером для опций конфигурации, влияющих на цикл событий NGINX. Наиболее заметный параметр, который можно настроить в блоке events, — это 'worker_connections', задающий максимальное число подключений на один рабочий процесс. Тщательная настройка этих параметров позволяет администраторам достичь оптимального использования ресурсов и отклика, соответствующих нагрузке сервера.

Пример конфига

events {
    worker_connections 1024;
}

Если не задать достаточное число worker_connections, это может ограничить пропускную способность сервера.

Убедитесь, что операционная система настроена так, чтобы разрешать указанное количество соединений.

worker_connections Директива worker_connections устанавливает максимальное количество одновременных соединений, которое может обрабатывать каждый рабочий процесс.
events
Синтаксисworker_connections number;
По умолчанию512
Контекстevents
МодульNGINX Core

Описание

Директива worker_connections имеет ключевое значение для оптимизации числа одновременных соединений, обрабатываемых каждым рабочим процессом в NGINX. Эта директива по сути определяет верхний предел соединений, который может обслуживать один рабочий процесс, тем самым влияя на общую масштабируемость веб-сервера. При определении значения этой директивы важно учитывать доступные ресурсы на вашем сервере, включая память, CPU и пропускную способность сети. Для максимальной эффективности значение worker_connections следует настраивать совместно с директивой worker_processes. Общее потенциальное число соединений, которое может обрабатывать NGINX, можно вычислить как `worker_processes * worker_connections`. Точная настройка этих параметров позволяет эффективно контролировать, сколько клиентов может одновременно подключаться и взаимодействовать с вашими приложениями. В условиях высокой нагрузки установка этого значения слишком высокой может привести к исчерпанию ресурсов и ухудшению производительности сервера. Мониторинг и корректировка этой директивы на основе шаблонов трафика помогут поддерживать оптимальное состояние сервера.

Пример конфига

events {
    worker_connections 1024;
}

Установка этого значения слишком высокой может исчерпать системные ресурсы и привести к проблемам со стабильностью.

Убедитесь, что лимиты дескрипторов файлов в системе выше, чем требуемое число соединений.

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

use Директива 'use' задаёт метод обработки событий в NGINX.
events
Синтаксисuse method;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива 'use' позволяет пользователю указать метод обработки событий, который NGINX будет использовать при обработке соединений. В зависимости от платформы и модулей, скомпилированных в NGINX, эта директива поддерживает различные варианты реализации событийно-ориентированной архитектуры, например использование методов `epoll`, `kqueue` или `select`. Каждый вариант даёт разные характеристики производительности и масштабируемости в зависимости от операционной среды сервера.\n\nДиректива принимает один аргумент, задающий требуемый метод. Корректное использование гарантирует, что NGINX сможет эффективно обрабатывать множество одновременных соединений, оптимизируя использование ресурсов и повышая общую пропускную способность. Важно выбрать подходящий метод, соответствующий возможностям операционной системы сервера; например, 'epoll' рекомендуется для систем Linux, тогда как 'kqueue' предпочтителен в системах BSD.\n\nНеправильная конфигурация, например указание неподдерживаемого метода обработки событий для конкретной платформы, может привести к ошибкам при запуске или существенно ухудшить производительность. Понимание компромиссов и возможностей каждого метода обработки событий имеет важное значение при развертывании NGINX в рабочей среде.

Пример конфига

events {
    use epoll;
}

Убедитесь, что выбранный метод поддерживается операционной системой; в противном случае NGINX не сможет запуститься.

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

Директива 'use' должна быть определена внутри блока 'events', чтобы вступить в силу.

multi_accept Директива multi_accept позволяет рабочему процессу одновременно принимать несколько соединений с прослушивающего сокета.
events
Синтаксисmulti_accept on | off;
По умолчаниюoff
Контекстevents
МодульNGINX Core

Описание

Директива `multi_accept` в NGINX используется для оптимизации процесса обработки соединений, позволяя рабочему процессу принимать несколько новых соединений одновременно, а не по одному. Когда эта директива включена, рабочий процесс может повысить пропускную способность за счёт уменьшения накладных расходов, связанных с переключением контекста, и снижения задержки при обработке отдельных соединений. Эту директиву можно установить в значение `on` или `off`. При установке в `on` она инструктирует рабочие процессы принимать столько новых соединений, сколько позволяет уровень сокетов операционной системы. Такое поведение особенно полезно в условиях высокой нагрузки, когда ожидается большое количество одновременных соединений. С другой стороны, при значении `off` поведение по умолчанию — принимать только одно соединение за раз. Это может приводить к увеличению задержки для входящих соединений, поскольку последующие подключения должны ждать, пока рабочий процесс освободится для их обработки. Важно учитывать, что включение `multi_accept` не гарантирует улучшения производительности во всех ситуациях. Выгоды в значительной степени зависят от того, как базовая операционная система обрабатывает операции с сокетами и от конкретных условий нагрузки на сервер. Администраторам серверов следует контролировать производительность, чтобы определить, приносит ли включение этой директивы ожидаемые результаты.

Пример конфига

events {
    multi_accept on;
    worker_connections 1024;
}

Включение multi_accept может привести к увеличению использования CPU и переключений контекста, особенно при высокой нагрузке.

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

accept_mutex Директива `accept_mutex` управляет использованием механизма взаимного исключения при принятии новых соединений.
events
Синтаксисaccept_mutex on | off;
По умолчаниюoff
Контекстevents
МодульNGINX Core

Описание

Директива `accept_mutex` в NGINX используется для улучшения производительности событийных серверов за счёт управления тем, как рабочие процессы обрабатывают входящие соединения при высокой нагрузке на сервер. Когда она установлена в `on`, директива позволяет только одному рабочему процессу принимать новое соединение за раз, что снижает конкуренцию за ресурсы и повышает эффективность их использования. Это особенно полезно в ситуациях, когда количество одновременных соединений превышает вычислительную способность отдельных рабочих процессов, поскольку помогает предотвратить эффект «thundering herd», когда несколько процессов одновременно пытаются принять новые соединения. Директива `accept_mutex` опирается на параметр `accept_mutex_delay`, который задаёт задержку (в миллисекундах), в течение которой рабочий процесс должен ждать, прежде чем попытаться принять новое соединение, если доступны другие рабочие процессы. При правильной настройке эта задержка обеспечивает синхронизацию между рабочими процессами, уменьшая вероятность перегрузки доступных ресурсов. Синхронизация достигается за счёт того, что одному рабочему предоставляется «право» принять новое входящее соединение, в то время как другие ждут своей очереди. Оптимальная конфигурация может значительно варьироваться в зависимости от нагрузки на сервер и базовой инфраструктуры.

Пример конфига

events {
    accept_mutex on;
    accept_mutex_delay 500;
}

Установка `accept_mutex` в значение `on` может привести к увеличению задержки при принятии соединений под высокой нагрузкой; этот параметр лучше использовать в сценариях тестирования и настройки.

Убедитесь, что `accept_mutex_delay` настроен правильно; слишком большая задержка может снизить отзывчивость.

accept_mutex_delay Директива 'accept_mutex_delay' управляет временем, в течение которого рабочий процесс будет ждать, пока accept mutex станет доступен, прежде чем принимать новые соединения.
events
Синтаксисaccept_mutex_delay time;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива 'accept_mutex_delay' в NGINX задает задержку, применяемую, когда рабочий процесс пытается принять новое соединение, но не может сразу получить accept mutex. Этот mutex необходим для синхронизации доступа между несколькими рабочими процессами, чтобы не перегрузить сервер быстрыми запросами на соединение. Если рабочий процесс не может получить этот mutex, он приостановится на время, указанное в этой директиве, прежде чем вновь пытаться принимать соединения, что позволяет равномерно распределять нагрузку между рабочими и повышать эффективность. Параметр для 'accept_mutex_delay' задается в миллисекундах, что позволяет администраторам тонко настраивать задержку в зависимости от возможностей сервера и ожидаемой нагрузки. Например, установка 'accept_mutex_delay 500;' позволяет рабочему процессу ждать до полусекунды перед повторной попыткой. Эта настройка может существенно влиять на распределение соединений между несколькими рабочими процессами, особенно в условиях высокой конкурентности. Правильная настройка может максимизировать пропускную способность и снизить задержки, одновременно минимизируя конкуренцию за ресурсы. Важно отметить, что увеличение задержки может улучшить справедливость распределения при высокой нагрузке, позволяя другим рабочим процессам принимать соединения, но также может привести к меньшему числу принимаемых соединений при низкой нагрузке, поэтому значение следует устанавливать исходя из реальных моделей трафика.

Пример конфига

events {
    accept_mutex on;
    accept_mutex_delay 300;
}

Чтобы директива вступила в силу, accept_mutex должен быть включен.

Установка очень высокого delay может привести к снижению уровня принятия соединений, особенно при низком трафике.

Не все операционные системы обрабатывают mutexes одинаково, что может повлиять на поведение этой директивы.

debug_connection Директива `debug_connection` указывает, какие клиентские подключения должны регистрироваться для целей отладки при использовании NGINX в режиме отладки.
events
Синтаксисdebug_connection address;
По умолчаниюnone
Контекстevents
МодульNGINX Core

Описание

Директива `debug_connection` позволяет указать IP addresses, из которых входящие подключения будут записываться в debug log. Эта директива необходима при устранении неполадок в экземпляре NGINX, так как она предоставляет подробное представление о обработке запросов от назначенных клиентов. По умолчанию, без этой директивы, никакие IPs не получат расширенного логирования, что критично для эффективной отладки. При использовании этой директивы указанный IP может быть одиночным IP address или задан в CIDR notation для подсетей, что делает её гибкой в различных сетевых сценариях. Директива должна быть размещена в контексте `events` конфигурации NGINX, поскольку она связана с обработкой подключений. Детальные логи будут содержать не только стандартную информацию о запросах, но и дополнительные отладочные сведения, которые помогают системным администраторам выявлять неверные настройки или аномалии в подключениях. Важно учитывать, что большое количество debug connections может приводить к образованию больших файлов логов, которые потребуют управленческих мер при включении в рабочей среде. Поэтому эта директива обычно используется временно при диагностике конкретных проблем для ограниченного круга пользователей, а не для всего входящего трафика. В заключение, директива `debug_connection` предоставляет мощный инструмент для выборочного усиления логирования для конкретных клиентских подключений, что позволяет более эффективно выполнять отладку и мониторинг системы.

Пример конфига

events {
    debug_connection 192.168.1.0/24;
}

Убедитесь, что NGINX скомпилирован с поддержкой debug, иначе эта директива не будет иметь эффекта.

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

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

ssl_engine Директива ssl_engine указывает SSL-библиотеку, которая будет использоваться NGINX для SSL-соединений.
main
Синтаксисssl_engine engine_name;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

'ssl_engine' директива позволяет пользователям определить, какой SSL-движок NGINX должен использовать для обработки защищённых соединений. По умолчанию NGINX использует библиотеку OpenSSL, если не настроено иное. Эта директива может быть полезна в ситуациях, когда пользователь хочет использовать другую реализацию SSL, такую как GnuTLS, или пользовательскую SSL-библиотеку для расширенных возможностей или повышения производительности. Директива принимает только один аргумент, который соответствует имени желаемого SSL-движка. При использовании директивы важно, чтобы указанный SSL-движок был скомпилирован в NGINX, иначе команда завершится с ошибкой во время выполнения, что может привести к ошибкам при запуске. Такая гибкость позволяет системным администраторам тонко настраивать обработку NGINX запросов SSL/TLS в зависимости от их инфраструктуры или требований приложения. Пользователям следует всегда проверять совместимость выбранного SSL-движка с текущей конфигурацией NGINX, а также его производительность и возможности безопасности.

Пример конфига

ssl_engine 'openssl';

Убедитесь, что указанный SSL engine скомпилирован в NGINX; в противном случае NGINX может не запуститься.

Использование неподдерживаемого или неправильно настроенного SSL engine может привести к сбоям SSL handshake или к проблемам с производительностью.

ssl_object_cache_inheritable Директива `ssl_object_cache_inheritable` определяет, могут ли настройки кэша объектов SSL наследоваться из основного контекста.
main
Синтаксисssl_object_cache_inheritable on | off;
По умолчаниюoff
Контекстmain
МодульNGINX Core

Описание

Директива `ssl_object_cache_inheritable` — это флаг, управляющий наследованием настроек кэша объектов SSL в NGINX. Когда эта директива установлена в 'on', она позволяет наследовать настройки кэша объектов SSL дочерним контекстам, таким как блоки server или location, обеспечивая более гибкое и централизованное управление поведением кэширования SSL. Это особенно полезно в сложных конфигурациях, где несколько серверных блоков должны использовать одни и те же настройки кэша объектов SSL. По умолчанию механизмы кэширования SSL повышают производительность, сохраняя параметры и объекты SSL-сессий, снижая тем самым накладные расходы при установлении новых SSL-соединений. Возможность наследования этих настроек позволяет разработчикам не дублировать параметры кэша в разных блоках, упрощая процесс конфигурирования и минимизируя возможные ошибки, которые могут возникнуть из-за несогласованных настроек. Если `ssl_object_cache_inheritable` опущена, поведение по умолчанию не допускает наследование, сохраняя прежнее поведение, при котором настройки кэша нужно явно задавать в каждом соответствующем блоке. Эта директива особенно важна в средах, где производительность SSL критична, так как обеспечивает единую стратегию кэширования в разных конфигурациях сервера.

Пример конфига

ssl_object_cache_inheritable on;

Убедитесь, что эта директива размещена в основном контексте для достижения желаемого эффекта.

Установка директивы в 'off' предотвращает наследование настроек кэша, что может привести к избыточным конфигурациям в дочерних блоках.

quic_bpf Директива 'quic_bpf' включает или отключает использование BPF (Berkeley Packet Filter) для обработки протокола QUIC в NGINX.
main
Синтаксисquic_bpf on | off;
По умолчаниюoff
Контекстmain
МодульNGINX Core

Описание

Директива 'quic_bpf' используется в основном модуле NGINX для управления тем, включен ли механизм BPF для обработки пакетов QUIC. BPF — это мощная функция, которая позволяет фильтровать и обрабатывать сетевые пакеты на низком уровне, обеспечивая эффективную обработку для протокола QUIC, разработанного для улучшения производительности веба за счёт уменьшения задержек и лучшего управления перегрузкой. Используя BPF, NGINX может анализировать шаблоны трафика и принимать более обоснованные решения в реальном времени, тем самым повышая производительность приложений, использующих протокол QUIC. Директива принимает аргумент-флаг, который может быть установлен в 'on' или 'off'. При значении 'on' NGINX будет применять BPF ко всем входящим QUIC-соединениям, что может увеличить пропускную способность и снизить задержки за счёт более эффективной обработки исходящих и входящих пакетов. Напротив, установка 'off' отключает эту функцию, возвращая стандартную обработку пакетов QUIC без оптимизаций BPF. Следует отметить, что для эффективной работы BPF NGINX должен быть скомпилирован с необходимыми библиотеками, поддерживающими эту возможность, а также базовая операционная система должна поддерживать BPF.

Пример конфига

quic_bpf on;

Убедитесь, что ваша установка NGINX скомпилирована с поддержкой BPF.

Из-за своей низкоуровневой природы BPF может требовать повышенных привилегий для работы.

Несовместимые конфигурации с другими модулями или директивами могут привести к непредвиденному поведению при включенном BPF.

http Директива 'http' в NGINX включает контекст конфигурации HTTP-сервера.
main
Синтаксисhttp { ... }
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива 'http' является фундаментальным компонентом конфигурации NGINX, предоставляя контекст для настройки параметров, специфичных для HTTP. При определении эта директива инкапсулирует все остальные директивы, связанные с HTTP, которые задают поведение веб-сервера при обработке запросов и ответов. Это включает настройки для блоков server, location, логирования и прочего, позволяя администраторам определять, как входящие HTTP-запросы обрабатываются в разных контекстах и конфигурациях сервера. В пределах контекста 'http' администраторы могут задавать параметры, такие как блоки 'server', что позволяет реализовывать настройки виртуального хостинга, а также настраивать протокол, поведение буферизации и средства контроля доступа. Такая структура обеспечивает детальный контроль над поведением сервера, позволяя применять оптимизации и настройки на высоком уровне, влияющие на все настроенные серверы или на выборочные блоки. Отсутствие параметров у этой директивы также означает, что она служит исключительно организационной границей и не требует специальных опций для работы. Использование директивы 'http' означает, что последующие директивы, определённые в её области, относятся к обработке HTTP. Например, директивы, такие как 'server', 'location' и 'client_max_body_size', часто находятся вложенными в блок 'http', что демонстрирует её роль как точки сбора связанных настроек и в конечном счёте влияет на общую производительность и гибкость веб-сервера NGINX.

Пример конфига

http {
    server {
        listen 80;
        server_name example.com;
        location / {
            root /var/www/html;
            index index.html;
        }
    }
}

Убедитесь, что директива 'http' не вложена внутри других блоков контекста, таких как 'server' или 'location'.

Избегайте использования нескольких директив 'http' в одном и том же файле конфигурации, так как допускается только одна.

mail The 'mail' directive is used to enable the mail processing module in NGINX, allowing it to handle email protocols like IMAP and POP3.
main
Синтаксисmail;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

The 'mail' directive in NGINX is pivotal for enabling the mail processing functionalities provided by the mail module. When declared at the main context of the configuration, it activates the capability for NGINX to act as a mail proxy server, handling protocols such as IMAP, POP3, and SMTP. This directive does not accept any parameters or arguments; its mere presence in the configuration indicates that mail functionalities should be included in the NGINX operations. Upon initializing, the mail module configures its settings based on additional, related mail-specific directives that follow the 'mail' directive in the configuration file. These include directives that define server and user credentials, authentication methods, and upstream servers. It is notable that this directive alone does not process any mail; rather, it sets the groundwork for subsequent configurations that specify how NGINX should interface with mail clients and mail servers. The directive plays a critical role in ensuring that NGINX can effectively manage and forward email requests, interacting seamlessly with existing mail infrastructure. By integrating mail protocols, NGINX extends its versatility beyond static and dynamic web content serving to include robust email handling capabilities, which can be especially beneficial in load-balanced environments or when consolidating multiple services into a unified architecture.

Пример конфига

mail {
    server {
        listen 110;
        protocol pop3;
        proxy on;
    }
    server {
        listen 143;
        protocol imap;
        proxy on;
    }
}

Ensure that additional directives for mail protocols and authentication are defined; otherwise, the mail functionality will be incomplete.

Remember that this directive must be used in the main context and cannot be included within server or location blocks.

You may need to adjust firewall settings to allow traffic over mail ports such as TCP 110 and 143.

google_perftools_profiles Директива `google_perftools_profiles` включает профилирование с помощью Google Performance Tools в NGINX.
main
Синтаксисgoogle_perftools_profiles path;
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива `google_perftools_profiles` располагается в конфигурации ядра NGINX и используется для включения сбора информации профилирования с помощью Google Performance Tools (gperftools). Такое профилирование полезно для мониторинга и анализа производительности процессов NGINX, позволяя администраторам выявлять узкие места в производительности и оптимизировать конфигурации соответствующим образом. Когда эта директива включена, NGINX будет генерировать информацию профилирования, которую можно анализировать с помощью инструментов, таких как 'pprof'. Конкретно, директива принимает один аргумент — путь к файлу вывода, в котором должны сохраняться данные профилирования. Эта информация включает использование процессора, статистику распределения памяти и графы вызовов, которые дают представление о работе рабочих процессов NGINX. Тщательно изучая сгенерированные профили, можно выявлять и устранять проблемы с производительностью, что приводит к улучшению производительности и использованию ресурсов сервера NGINX. Директива должна располагаться в основном контексте конфигурации NGINX и принимать в качестве аргумента корректный путь. Если указанный путь недоступен для записи рабочими процессами NGINX, профилирование не будет включено, что может привести к вводящим в заблуждение выводам о производительности. Часто она применяется вместе с другими директивами производительности для получения всестороннего понимания состояния сервера.

Пример конфига

google_perftools_profiles /var/log/nginx/perf_data;

Убедитесь, что указанный путь имеет правильные права доступа, чтобы рабочие процессы NGINX могли записывать данные профилирования.

Не включайте профилирование в производственной среде, если производительность критична, так как это может привести к дополнительной нагрузке.

Не забудьте отключить или удалить эту директиву в производственной среде после сбора необходимых данных профилирования.

stream Директива 'stream' определяет блок для обработки трафика TCP и UDP в NGINX.
main
Синтаксисstream { ... }
По умолчаниюnone
Контекстmain
МодульNGINX Core

Описание

Директива 'stream' позволяет NGINX обрабатывать не-HTTP трафик, обеспечивая работу с потоками TCP и UDP. Эту директиву можно настроить в main context, что позволяет пользователям указывать разные servers или upstreams для различных типов потоковых данных. Внутри 'stream' блока пользователи могут определять несколько server blocks, где каждый server может обрабатывать разные протоколы, порты или конфигурации upstream, отличные от обычной обработки HTTP. С введением этой директивы пользователи могут использовать различные директивы, такие как 'server' и 'proxy_pass', внутри контекста 'stream' для обработки потоков. Например, TCP load balancing может быть настроен прямо в этом блоке, что смещает использование ресурсов в пользу разных backend servers на основе алгоритмов, таких как round-robin, least connections или IP hash. Кроме того, можно настроить лимиты соединений, таймауты и обработку ошибок, чтобы обеспечить эффективную и отказоустойчивую обработку потоков. Директива 'stream' открывает NGINX как более универсальный прокси, помогая в таких задачах, как SSL termination для TCP services, что упрощает защищённую передачу. В результате это расширяет круг применений за пределами стандартной парадигмы HTTP/HTTPS, позволяя, например, базам данных и игровым серверам использовать возможности NGINX для эффективного управления своей сетевой функциональностью.

Пример конфига

stream {
    upstream backend {
        server backend1.example.com:12345;
        server backend2.example.com:12345;
    }

    server {
        listen 12345;
        proxy_pass backend;
    }
}

Убедитесь, что блок 'stream' не размещён внутри блока 'http' или 'server', поскольку он должен быть объявлен в основном контексте.

При указании нескольких блоков 'server' в директиве 'stream' не забудьте правильно настроить порты прослушивания, чтобы избежать конфликтов.

include Директива 'include' позволяет включать файлы конфигурации в конфигурационные файлы NGINX, обеспечивая модульность конфигурации.
Синтаксисinclude path;
По умолчаниюnone
Контекст
МодульNGINX HTTP Core

Описание

Директива 'include' предназначена для повышения модульности и удобства сопровождения конфигурации NGINX путем включения других файлов конфигурации. Это помогает разбивать большие файлы конфигурации на управляемые части, облегчая их обновление и организацию. Используя директиву 'include', пользователи могут определить общие настройки в отдельном файле и включать их там, где это необходимо в разных контекстах конфигурации, способствуя принципу DRY (Don't Repeat Yourself). Аргумент для директивы 'include' состоит из пути к одному или нескольким файлам конфигурации. Путь может быть указан как абсолютный или как относительный путь от текущего рабочего каталога. Поддерживаются также подстановочные символы, позволяющие включать несколько файлов, соответствующих заданному шаблону. Когда NGINX обрабатывает основной файл конфигурации, он разрешает и читает файлы, указанные в директиве 'include', в том порядке, в котором они указаны. Директивы внутри этих файлов затем объединяются с текущим контекстом, позволяя им соответствующим образом влиять на настройки конфигурации. Файлы конфигурации, включаемые с помощью этой директивы, могут определять различные аспекты NGINX, такие как блоки location, настройки server или конфигурации upstream. Однако следует соблюдать осторожность, чтобы избежать конфликтов с уже существующими настройками в основном файле конфигурации. Если включённый файл содержит директивы, которые изменяют уже определённые настройки, последнее определённое значение в объединённой конфигурации будет иметь приоритет. Такая гибкость делает директиву 'include' мощным инструментом для эффективной структуризации сложных конфигураций NGINX.

Пример конфига

# Example of using the 'include' directive
include /etc/nginx/conf.d/*.conf;

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

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

Использование wildcards может привести к включению нежелательных файлов, если они указаны неаккуратно.

allow Директива 'allow' в NGINX контролирует доступ к ресурсам на основе IP-адреса или CIDR block.
httpserverlocationlimit_except
Синтаксисallow address; | allow address CIDR;
По умолчаниюnone
Контекстhttp, server, location, limit_except
МодульNGINX HTTP Core

Описание

Директива 'allow' указывает, каким IP-адресам предоставляется доступ к указанному server или location block. Она может принимать как IPv4, так и IPv6-адреса, а также CIDR Notation для указания диапазонов IP-адресов. Когда присутствует несколько директив 'allow', их можно комбинировать для более тонкого контроля доступа к ресурсу. Если запрос поступил с IP-адреса, который совпадает с одним из правил 'allow', ему предоставляется доступ, если только он не соответствует также директиве 'deny'. Такая настройка позволяет включать в белый список конкретные адреса клиентов, одновременно блокируя или ограничивая доступ для остальных. Директиву 'allow' обычно используют вместе с директивой 'deny', которая указывает, какие IP-адреса следует блокировать. Директива может быть настроена в различных контекстах, таких как http, server, location и limit_except, что даёт гибкость в применении правил доступа в зависимости от архитектуры приложения. При конфигурации обработка запроса определяется порядком проверки: если существуют какие-либо правила 'allow', они проверяются до правил 'deny'. Параметром, передаваемым директиве 'allow', может быть одиночный IP-адрес или CIDR block, который представляет собой диапазон адресов, указанный в формате "192.168.1.0/24". Например, 'allow 192.168.1.1;' разрешит доступ с конкретного IP 192.168.1.1, тогда как 'allow 10.0.0.0/8;' позволит всем IP из диапазона 10.0.0.0 — 10.255.255.255.

Пример конфига

location /protected {
    allow 192.168.1.1;
    deny all;
}

Убедитесь, что соблюдается правильный порядок директив 'allow' и 'deny', поскольку 'deny' может переопределять 'allow', если он будет сопоставлен впоследствии.

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

Использование 'allow all;' разрешает доступ всем, что может привести к непреднамеренному раскрытию ресурсов.

deny Директива 'deny' ограничивает доступ с указанного IP address клиента или сети.
httpserverlocationlimit_except
Синтаксисdeny address;
По умолчаниюnone
Контекстhttp, server, location, limit_except
МодульNGINX HTTP Core

Описание

Директива 'deny' в NGINX используется для управления доступом к ресурсам сервера на основе IP address клиента. Она может быть определена в нескольких контекстах, включая http, server, location и limit_except, что даёт гибкость при описании правил доступа. Директива требует одного аргумента — это IP address (или нотация CIDR) клиентов, которым будет отказано в доступе. Когда запрос поступает с IP address, который соответствует правилу 'deny', NGINX вернёт 403 Forbidden HTTP status code, предотвращая дальнейшую обработку запроса. Эта директива может использоваться совместно с директивой 'allow', которая указывает, каким IP address предоставляется доступ. В случаях, когда обе директивы используются, NGINX оценивает правила в том порядке, в котором они определены, и если найдётся совпадающее deny-правило, запрос будет отклонён независимо от последующих allow-правил. Кроме того, директива deny может задавать отказ как для IPv4, так и для IPv6 адресов, что делает её адаптируемой к разным сетевым ситуациям.

Пример конфига

location /protected {
    deny 192.168.1.0/24;
    deny 10.0.0.1;
}

Убедитесь, что правила deny правильно упорядочены, поскольку они проверяются в том порядке, в котором объявлены; последующее правило allow может не переопределить ранее заданное правило deny.

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

Остерегайтесь логических ошибок при комбинировании директив deny и allow, поскольку взаимодействие между ними может привести к неожиданным результатам доступа.

add_before_body Директива `add_before_body` позволяет вставлять дополнительное содержимое перед телом HTTP-ответа в NGINX.
httpserverlocation
Синтаксисadd_before_body content;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `add_before_body` используется в модуле NGINX HTTP core для добавления определённого содержимого перед тем, как тело ответа будет отправлено клиенту. Это особенно полезно для внедрения скриптов, заметок или другой разметки непосредственно в полезную нагрузку ответа без изменения приложения или бэкенд‑сервера. Вставляемое содержимое может задаваться как строковый литерал, который выводится в составе HTTP-ответа во время фазы обработки запроса. Директиву можно задавать в таких контекстах, как `http`, `server` и `location`, что позволяет тонко контролировать места вставки содержимого. Аргумент этой директивы — единое строковое значение, обозначающее добавляемое содержимое. После настройки `add_before_body` обрабатывает запрос на этапе вывода, гарантируя, что указанное содержимое предшествует исходному телу ответа. Поскольку это изменяет структуру ответа, важно убедиться, что вставляемое содержимое не нарушает тип или структуру содержимого ответа. Следует тщательно продумать добавляемое содержимое, чтобы сохранить корректное форматирование HTTP-ответа.

Пример конфига

http {
    server {
        location /example {
            add_before_body '';
        }
    }
}

Убедитесь, что вставляемое содержимое корректно и не нарушает структуру основного тела ответа.

Использование большого объёма содержимого может повлиять на размеры ответов и производительность.

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

add_after_body Директива `add_after_body` добавляет дополнительный контент после того, как тело ответа отправлено клиенту.
httpserverlocation
Синтаксисadd_after_body content;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `add_after_body` используется в NGINX для определения контента, который должен быть включён в конец HTTP-ответа, после того как тело ответа было передано. Это может быть полезно для внедрения скриптов, трекеров или кодов аналитики, либо любых дополнительных данных, которые должны загружаться после того, как основной контент был доставлен клиенту. Директива принимает один аргумент — контент, который будет добавлен. Этот контент может быть простым текстом, HTML или любым допустимым фрагментом данных, который сервер может отдать клиенту. Она особенно полезна для веб-приложений, зависящих от скриптов на стороне клиента, позволяя разработчикам добавлять необходимые JavaScript-фрагменты или HTML-элементы, которые должны появиться после того, как основной ответ был отображён. Используя эту директиву, можно модифицировать контент без прямого изменения исходного тела ответа, тем самым сохраняя целостность доставляемого содержимого.

Пример конфига

location /example {
    add_after_body '';
}

Убедитесь, что добавляемое содержимое корректно и правильно отформатировано, чтобы не нарушить структуру HTML ответа.

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

addition_types Директива 'addition_types' позволяет задавать пользовательские MIME-типы, которые будут добавлены в заголовок Content-Type ответа на основе расширения файла.
httpserverlocation
Синтаксисaddition_types extension mime_type [extension mime_type ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'addition_types' в NGINX используется для сопоставления расширений файлов с пользовательскими MIME-типами, которые должны быть добавлены в заголовок Content-Type HTTP-ответов. Эта директива позволяет администраторам веб-сервера обрабатывать типы файлов, не покрываемые стандартными определениями MIME-типов, обеспечивая корректную доставку контента в зависимости от типа файла. Синтаксис директивы 'addition_types' требует как минимум одного аргумента, состоящего из расширения файла, за которым следует MIME-тип. Несколько расширений и соответствующих им MIME-типов могут быть определены в одной директиве. Когда файл отдается, NGINX проверяет указанные расширения по отношению к запрошенному файлу. Если найдено совпадение, соответствующий MIME-тип включается в ответ, дополняя предопределённые типы в конфигурации NGINX. Эта директива может использоваться в различных контекстах, таких как http, server или location блоки, что даёт гибкость при настройке MIME-типов для разных частей вашего веб-приложения. Добавление пользовательских MIME-типов может помочь предотвратить проблемы с обработкой файлов на стороне клиента, обеспечивая правильную интерпретацию браузерами содержимого передаваемых файлов.

Пример конфига

http {
    addition_types .json application/json;
    addition_types .xml application/xml;
}

Убедитесь, что указанный MIME-тип действителен и распознаётся браузерами.

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

Данная директива автоматически не восстанавливает типы по умолчанию; укажите все необходимые типы явно.

auth_basic Директива `auth_basic` включает базовую аутентификацию для указанного контекста в NGINX.
httpserverlocationlimit_except
Синтаксисauth_basic "realm_name";
По умолчаниюnone
Контекстhttp, server, location, limit_except
МодульNGINX HTTP Core

Описание

Директива `auth_basic` позволяет защитить локации или ресурсы на вашем сервере NGINX, требуя от клиентов HTTP Basic-аутентификацию. Когда эта директива включена, клиенты должны предоставить действительное имя пользователя и пароль, которые проверяются в соответствии с учётными данными, заданными в конфигурации. Эта директива преимущественно используется в сценариях, где требуется простое управление доступом, например для ограничения доступа к определённой части вашего сайта. Директива принимает один аргумент — название области (realm). Это имя является важной частью процесса аутентификации, так как оно будет отображаться в диалоговом окне аутентификации, показываемом браузером пользователя. Для полной реализации базовой аутентификации следует также использовать директиву `auth_basic_user_file` вместе с `auth_basic`, чтобы указать расположение файла паролей, содержащего разрешённые имена пользователей и хэшированные пароли. Без этого директивы не будут работать, так как сервер не будет знать, какие учётные данные проверять. В более сложных конфигурациях вы можете дополнительно контролировать доступ с помощью других директив, таких как `allow` и `deny`, которые можно комбинировать с `auth_basic` для уточнения, какие пользователи могут получить доступ к защищённому содержимому в зависимости от их IP-адресов или других критериев.

Пример конфига

location /private {
    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Убедитесь, что файл паролей создан корректно и имеет подходящие права доступа для пользователя NGINX.

Будьте внимательны с синтаксисом: имя realm должно быть заключено в кавычки, а директива должна заканчиваться точкой с запятой.

Не забудьте перезапустить NGINX, чтобы применить изменения после редактирования конфигурации.

auth_basic_user_file Директива auth_basic_user_file указывает файл, содержащий имена пользователей и хэши паролей для базовой HTTP-аутентификации.
httpserverlocationlimit_except
Синтаксисauth_basic_user_file file;
По умолчаниюnone
Контекстhttp, server, location, limit_except
МодульNGINX HTTP Core

Описание

Директива `auth_basic_user_file` используется в NGINX для указания пути к файлу, содержащему пары имён пользователей и хэшей паролей, необходимых для аутентификации пользователей через базовую HTTP-аутентификацию. Эта директива обычно используется в сочетании с директивой `auth_basic`, которая включает базовую аутентификацию для заданного контекста. Когда клиент делает запрос на сервер NGINX, настроенный для базовой аутентификации, сервер проверяет наличие директивы `auth_basic_user_file`. Если она присутствует, сервер читает указанный файл и сверяет имя пользователя и пароль, отправленные клиентом, с хранящимися хэшами. Файл должен иметь определённый формат: в каждой строке указано имя пользователя, за которым следует хэш пароля, сгенерированный с помощью инструмента вроде `htpasswd` из набора Apache HTTP Server. Процесс аутентификации направлен на ограничение доступа к конкретным ресурсам, гарантируя, что доступ получают только действующие пользователи. Важно обеспечить безопасное хранение файла с пользователями и недопущение его публичного доступа, чтобы предотвратить несанкционированный доступ к содержащимся в нём учётным данным. Кроме того, NGINX повышает безопасность, поддерживая различные криптографические алгоритмы хеширования для паролей, что затрудняет злоумышленникам компрометацию учётных записей пользователей.

Пример конфига

location /secret {
    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Файл пользователей должен быть доступен для чтения процессом NGINX; убедитесь, что права доступа к файлу настроены правильно.

Формат файла пользователей должен строго соблюдаться (username:hashed_password).

Если путь к файлу пользователей указан неверно, аутентификация не сработает, что приведёт к открытому доступу.

auth_request The auth_request directive is used to implement subrequest-based authentication by specifying a location that will be checked before granting access to the resource.
httpserverlocation
Синтаксисauth_request location;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `auth_request` directive allows NGINX to handle authentication through a subrequest to a specified location. This location is intended to process authentication requests, and if the subrequest returns a 2xx status code, access to the original request is granted. If the response is anything other than a 2xx status, access is denied and the original request is not processed. This directive can be used in various contexts, including `http`, `server`, and `location`, allowing for flexible integration within different server configurations. The argument expects a single location name or path that NGINX will use for performing the authentication check. Typically, this would be a designated endpoint that handles the logic of checking user credentials or access conditions for the request being evaluated. When using `auth_request`, it's essential to ensure that the subrequest location is properly configured to return the correct status code based on the authentication result. The subrequest can also carry along the original request's headers if required, allowing for more complex authentication checks that consider client information.

Пример конфига

location /protected {
    auth_request /auth;
}

location = /auth {
    internal;
    # Authentication logic here
    if ($http_authorization = "Bearer valid_token") {
        return 200;
    }
    return 401;
}

Make sure the subrequest location is configured to handle `internal` requests only; otherwise, it can be accessed directly by clients.

Be aware of cascading subrequest failures if nested locations are misconfigured, leading to unexpected access denial.

The response from the subrequest must return suitable HTTP status codes (200 for success, other codes for denial) to be processed correctly.

auth_request_set Директива `auth_request_set` устанавливает переменную на основании ответа внутреннего запроса аутентификации.
httpserverlocation
Синтаксисauth_request_set variable value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `auth_request_set` в NGINX используется для определения переменной, которая будет хранить результат внутреннего запроса аутентификации. Как правило, директива принимает два аргумента: имя переменной, которую нужно установить, и тот ответ, который вы хотите проверить (либо код статуса, либо конкретная переменная). В сценариях, когда внутренний запрос аутентификации проходит успешно, переменная устанавливается; если он не проходит, переменная остаётся неустановленной или сбрасывается в начальное состояние. Эта директива особенно полезна в сочетании с директивой `auth_request`, поскольку позволяет выполнять более детализированный контроль доступа, оценивая результат запросов аутентификации. Например, в зависимости от значения переменной, установленной `auth_request_set`, можно выполнять дополнительную логику, обеспечивая разные уровни доступа или обработку ошибок. Если запрос аутентификации возвращает ответ 2xx, это означает успех, тогда как любые ответы 4xx или 5xx указывают на ошибку, что позволяет настраивать реакции на попытки неавторизованного доступа. Размещение директивы `auth_request_set` гибко: её можно использовать в контекстах `http`, `server` или `location`, что обеспечивает широкую вариативность конфигурации. Кроме того, важно убедиться, что внутренние запросы аутентификации корректно сконфигурированы и доступны. Поведение добавляемой переменной и её взаимодействие с другими директивами может существенно влиять на маршрутизацию и поведение контроля доступа в NGINX, поэтому при внедрении в рабочую среду требуется тщательное тестирование.

Пример конфига

location /protected {
    auth_request /auth;
    auth_request_set $auth_status $upstream_status;
    error_page 401 = @error401;
} 
location = /auth {
    internal;
    proxy_pass http://backend_auth;
}

Убедитесь, что внутренний URL запроса в `auth_request` правильно настроен, чтобы избежать недоступных конечных точек.

Будьте осторожны при установке переменной на основе ответа, если запрос может не вернуть корректный код ответа, поскольку это может привести к запутанному поведению при оценке контроля доступа.

Порядок определения переменных с помощью `auth_request_set` может влиять на их доступность при дальнейшей обработке; убедитесь, что они задаются до того, как на них ссылаются.

autoindex Директива 'autoindex' включает или отключает индексирование каталогов в NGINX.
httpserverlocation
Синтаксисautoindex on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'autoindex' позволяет NGINX генерировать и отображать список файлов в каталоге, когда индексный файл отсутствует. При включении, если пользователь запрашивает каталог без индексного файла (например, index.html или index.htm), NGINX вернёт сортируемый список файлов, содержащихся в этом каталоге. Эта директива может быть задана в различных контекстах: http, server, and location. Установив 'autoindex on', можно сделать содержимое каталогов доступным, что может быть полезно при отладке, но представляет риск безопасности, если конфиденциальные файлы будут случайно открыты. Вывод можно настроить с помощью связанных директив, таких как 'autoindex_format', для разных форматов отображения (например, компактного или полного списка). Важно правильно настроить права доступа к каталогам, чтобы избежать несанкционированного доступа. Когда 'autoindex' используется вместе с директивами управления доступом, такими как 'allow' и 'deny', сначала применяются правила доступа, чтобы определить, следует ли отказать или разрешить запрос, прежде чем обрабатывать индекс.

Пример конфига

location /files {
    autoindex on;
}

Включение 'autoindex' может сделать чувствительные файлы доступными пользователям, если права доступа к каталогам установлены неправильно.

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

autoindex_format Директива 'autoindex_format' определяет формат списков каталогов, создаваемых модулем autoindex в NGINX.
httpserverlocation
Синтаксисautoindex_format format;
По умолчаниюhtml
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`autoindex_format` указывает формат вывода списков каталогов, когда включена функция autoindex в NGINX. Эта директива позволяет пользователям изменить внешний вид сгенерированного HTML для лучшей читаемости или кастомизации. NGINX поддерживает несколько предопределённых форматов, таких как `html` и `json`, каждый из которых соответствует своему стилю представления. Когда директива задана в конфигурационном файле, NGINX использует указанный формат вывода вместо значений по умолчанию, что повышает удобство использования индексов каталогов для клиентов или приложений, которые могут полагаться на определённые структуры данных в ответе. В практических сценариях `autoindex_format` можно использовать для предоставления удобного для пользователя представления содержимого каталогов в формате HTML, например с ссылками и размерами файлов, или в формате JSON для потребления API, который легко парсится программно. Формат должен задаваться в допустимых контекстах, а именно на уровнях `http`, `server` или `location`, что позволяет гибко управлять поведением в зависимости от области действия конфигурации NGINX. Эта директива в первую очередь предназначена для интеграции с различными клиентскими приложениями, которые обрабатывают списки каталогов по-разному в зависимости от ожидаемого формата.

Пример конфига

location /files {
    autoindex on;
    autoindex_format json;
}

Убедитесь, что модуль autoindex включён с помощью 'autoindex on;' перед использованием этой директивы.

Указание неизвестного формата приводит к ошибке; используйте только поддерживаемые форматы.

autoindex_localtime Директива `autoindex_localtime` включает показ локального времени в списках каталогов.
httpserverlocation
Синтаксисautoindex_localtime on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `autoindex_localtime` в NGINX влияет на способ генерации списков каталогов при включённой индексации директорий. Когда эта директива установлена в 'on', NGINX будет отображать время последнего изменения файлов в локальном часовом поясе вместо UTC, что делает отображение более понятным для пользователей, которые скорее ориентируются в своём местном времени, а не в координированном всемирном времени. Эту директиву можно размещать в нескольких контекстах, включая 'http', 'server' и 'location', что позволяет тонко настраивать её поведение в зависимости от области запроса. Параметр этой директивы — просто флаг: 'on' для включения показа локального времени в списках каталогов или 'off' для его отключения; по умолчанию используется 'off'. Включение этой функции может улучшить пользовательский опыт, особенно для приложений, которые отображают метаданные файлов в удобном для пользователя виде, поскольку это позволяет пользователям видеть формат времени, соответствующий их географическому положению, вместо необходимости конвертировать время из UTC. Важно отметить, что включение `autoindex_localtime` не меняет фактические временные метки файлов, хранящихся на сервере; оно лишь изменяет способ их представления в списках каталогов для конечных пользователей.

Пример конфига

location /files {
    autoindex on;
    autoindex_localtime on;
}

Обязательно включите директиву 'autoindex', чтобы отображение локального времени вступило в силу; в противном случае в списке каталогов не будет отображаться локальное время.

Эта директива не применяется, если индексирование каталогов отключено. Убедитесь, что 'autoindex' установлена в 'on', чтобы 'autoindex_localtime' имела эффект.

autoindex_exact_size Директива `autoindex_exact_size` управляет тем, отображается ли точный размер файла в списке каталогов, сгенерированном модулем autoindex.
httpserverlocation
Синтаксисautoindex_exact_size on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `autoindex_exact_size` используется в HTTP-сервере NGINX для определения того, как размеры файлов представлены в автоматически сгенерированных списках каталогов. Когда эта директива включена (установлена в 'on'), NGINX будет показывать точные размеры файлов в байтах. Если установлена в 'off', она преобразует размер в более удобочитаемый формат (например, KB, MB и т.д.) при выдаче списка каталогов. Эта настройка может быть особенно полезна пользователям, которым нужны точные данные о размерах файлов, особенно в средах, где размеры файлов необходимо тщательно отслеживать. Контекст для этой директивы включает `http`, `server` и `location`, что позволяет гибко размещать её в зависимости от архитектуры приложения. Директива принимает один флаговый аргумент: он может быть либо 'on', либо 'off'. Наличие этих опций позволяет администратору сервера настроить поведение модуля autoindex в соответствии с потребностями конкретных локаций сервера или всей конфигурации сервера.

Пример конфига

location /files {
    autoindex on;
    autoindex_exact_size on;
}

Убедитесь, что модуль autoindex включен, иначе эта директива не вступит в силу.

Неправильное использование этой директивы в сочетании с другими директивами autoindex может привести к запутанному выводу.

Установка этой директивы в 'on' может значительно увеличить размер листинга каталогов, затрудняя их чтение.

modern_browser Директива 'modern_browser' позволяет тонко настраивать совместимость современных веб-браузеров в NGINX.
httpserverlocation
Синтаксисmodern_browser [];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'modern_browser' используется в конфигурации NGINX для указания того, какие браузеры следует считать современными и обрабатывать иначе при обработке запросов. Она может повысить производительность веб-приложений, включая или отключая определённые функции или поведения в зависимости от возможностей клиента. Директива может принимать один или два параметра, что позволяет задавать конкретные условия, при которых применяются оптимизации или правила для современных браузеров. Например, если запрос поступает от распознанного современного браузера, NGINX может скорректировать свой ответ или поведение маршрутизации соответствующим образом. При конфигурации директивы при указании одного параметра он обозначает версию браузера, тогда как второй, необязательный параметр может задавать дополнительные настройки совместимости. Директива применима в различных контекстах, включая HTTP, server и location-блоки, и позволяет администраторам оптимизировать ответы сервера в зависимости от браузера пользователя, потенциально улучшая общий пользовательский опыт за счёт использования современных технологий, таких как HTTP/2, или специальных механизмов кэширования. Для эффективного использования этой директивы важно правильно понимать строки user-agent и возможности браузеров.

Пример конфига

server {
    location / {
        modern_browser Firefox 90;
    }
}

Убедитесь, что строки user-agent заданы правильно, чтобы избежать непредвиденного поведения.

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

ancient_browser Директива 'ancient_browser' управляет обработкой запросов от устаревших веб-браузеров, позволяя перенаправлять их или обслуживать иначе.
httpserverlocation
Синтаксисancient_browser user-agent;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'ancient_browser' в NGINX предназначена для управления входящими запросами от браузеров, которые считаются устаревшими или несовместимыми с современными веб-стандартами. Указав директиву 'ancient_browser', администраторы сервера могут определить, обслуживать ли специальный контент, перенаправлять пользователя на другой URL или применять определённые политики для этих устаревших браузеров. Это особенно полезно при решении вопросов безопасности или для информирования пользователей со старыми браузерами о ограничениях их ПО. Эта директива может принимать несколько аргументов, каждый из которых представляет собой конкретный браузер или user agent string, определяемый как устаревший браузер. Поведение может включать пользовательские страницы ошибок, перенаправление на предложения обновления или отдачу упрощённой версии сайта, специально разработанной для таких устаревших клиентов. Гибкость в определении того, какие браузеры попадают в эту категорию, позволяет тонко управлять тем, как сервер NGINX взаимодействует с устаревшими клиентами, обеспечивая баланс между доступностью и современной производительностью веба. При настройке этой директивы важно учитывать корректность указанных шаблонов user-agent, а также понимать, что разные контексты (http, server, and location) могут влиять на её эффективность. Также следует учитывать необходимость баланса между поддержкой старых технологий и сохранением стандартов безопасности и производительности на сервере.

Пример конфига

http {
    ancient_browser "MSIE 5.0";
    ancient_browser "Mozilla/4.0";
    location / {
        # Normal processing
    }
}

Определение браузера основано на строках user-agent, которые могут быть подделаны.

Тщательно формируйте строки user-agent, чтобы обеспечить корректное совпадение без непреднамеренных блокировок.

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

modern_browser_value Директива `modern_browser_value` управляет HTTP-ответом для значения современного браузера в модуле NGINX HTTP Core.
httpserverlocation
Синтаксисmodern_browser_value value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `modern_browser_value` используется для задания или изменения HTTP-ответа, связанного с запросами, отправленными современными браузерами. Она централизует конфигурацию для обработки специфического поведения браузеров, что позволяет выполнять целевые оптимизации и корректировать ответы в зависимости от того, исходил ли запрос от распознанного современного браузера. При настройке эта директива позволяет задать значение, которое изменяет заголовки ответа сервера, специально адаптированные для современных веб-браузеров. Это может улучшить совместимость и производительность браузеров для различных функций сайта или повысить безопасность, предоставляя современным браузерам специализированные инструкции по обработке определённых ресурсов. В параметры могут входить значения, определяющие политики кэширования или форматы ответа, специально разработанные для новых версий браузеров, поддерживающих передовые технологии.

Пример конфига

modern_browser_value "joyful_response";

Убедитесь, что заданное значение действительно и распознается целевыми браузерами.

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

ancient_browser_value Устанавливает значение для обработки запросов от очень старых браузеров.
httpserverlocation
Синтаксисancient_browser_value value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `ancient_browser_value` в NGINX используется для задания параметра ответа на запросы, исходящие от устаревших веб‑браузеров, идентифицируемых как 'ancient'. По сути, эта директива указывает, как NGINX должен обрабатывать такие запросы, позволяя оптимизировать ответы или применять конкретные правила для улучшения удобства пользователей или поддержания совместимости. Директива может располагаться в разных контекстах, таких как `http`, `server` или `location`, что обеспечивает гибкость применения в зависимости от области конфигурации. Директива принимает один аргумент, который обычно представляет собой числовое значение или строку, обозначающую действие, которое следует выполнить, или значение, которое нужно установить при обнаружении таких запросов. Поведение директивы может влиять на то, как обслуживаются ресурсы, особенно на сайтах, стремящихся поддерживать широкий спектр пользовательских агентов. Это особенно полезно для устаревших систем, которые по-прежнему зависят от старых браузерных технологий, поскольку позволяет им получать возможные исправления или указания на обновлённые ресурсы вместо полного отказа во доступе. Например, если сервер определяет, что агент пользователя соответствует критериям для классификации как 'ancient' браузер, сервер может ответить настраиваемым сообщением или перенаправить на страницу с рекомендацией обновить браузер. В целом эта директива — полезный инструмент для веб-разработчиков, стремящихся поддерживать доступность для разнородной аудитории пользователей.

Пример конфига

http {
    ancient_browser_value "Upgrade your browser";
}

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

Чрезмерная зависимость от этой директивы может отпугнуть пользователей от обновления браузеров, если это не сопровождается убедительным сообщением.

charset Директива 'charset' задаёт набор символов для блока server или location в NGINX.
httpserverlocationif in location
Синтаксисcharset charset-name;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'charset' используется для определения набора символов, который должен использоваться в HTTP-заголовках, которые NGINX отправляет клиентам. Она играет ключевую роль в обеспечении корректного отображения содержимого на стороне клиента, информируя браузер о кодировке передаваемых данных. Это важно для веб-приложений, которым нужно точно обрабатывать разные языки или символы. Директива принимает один аргумент, который указывает набор символов, например 'utf-8', 'iso-8859-1' или 'windows-1251'. Когда эта директива установлена, NGINX будет включать charset в заголовок 'Content-Type' ответов, тем самым сообщая эту кодировку браузеру клиента. Это помогает предотвратить проблемы с неправильным отображением символов, такие как искажённый текст или неожиданные символы. Кроме того, директиву 'charset' можно настроить в разных контекстах, то есть её можно задать в блоке HTTP, server или location. Это позволяет тонко контролировать то, как различные части веб-приложения обрабатывают кодировку символов, что делает её гибкой для контента, обслуживаемого из разных частей сайта.

Пример конфига

http {
    charset utf-8;

    server {
        location / {
            charset iso-8859-1;
        }
    }
}

Установка 'charset' в 'if' внутри блока 'location' может привести к непредсказуемому поведению. Как правило, рекомендуется избегать использования 'if' вместе с 'charset'.

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

source_charset Директива `source_charset` задаёт набор символов, который сервер NGINX будет использовать для интерпретации исходного содержимого.
httpserverlocationif in location
Синтаксисsource_charset charset;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `source_charset` в NGINX используется для задания набора символов, применяемого при обработке тел входящих запросов. Эта директива особенно важна при обработке форм и содержимого POST-запросов, поскольку обеспечивает корректную интерпретацию символов сервером в соответствии с указанной кодировкой. Директиву можно применять в различных контекстах, включая `http`, `server`, `location` и `if in location`, что позволяет гибко настраивать поведение в зависимости от разных местоположений сервера или типов запросов. При определении `source_charset` необходимо указать единственное значение charset в качестве аргумента, например 'utf-8', 'iso-8859-1' и т. п. Если при обработке входящих данных кодировка не указана, NGINX по умолчанию будет интерпретировать данные таким образом, который может привести к искажению символов, особенно для содержимого с не ASCII символами. Корректная настройка `source_charset` критически важна для приложений, обрабатывающих многоязычный текст или данные из разных регионов с разными стандартами кодировок. Кроме того, для некоторых наборов символов могут существовать специальные инструкции по обработке или ограничения, поэтому важно обратиться к документации NGINX, чтобы узнать, какие наборы символов поддерживаются и какие нюансы связаны с их реализацией в разных контекстах. Неправильные настройки или неверные значения charset могут привести к таким проблемам, как повреждённые данные, неудачные запросы или ошибки сервера, что подчёркивает важность тестирования и проверки параметров charset в вашей конфигурации NGINX.

Пример конфига

# Set the source charset to UTF-8 for proper encoding handling
source_charset utf-8;

Убедитесь, что указанный charset поддерживается; в противном случае NGINX может некорректно обрабатывать данные.

Использование неверного charset может привести к повреждению данных, особенно для non-ASCII символов.

Помните, что эту directive может потребоваться задать на различных context levels в зависимости от потребностей вашего приложения.

override_charset Директива `override_charset` позволяет конфигурации сервера принудительно устанавливать определённую кодировку для ответов, переопределяя любой charset, указанный в заголовке Content-Type.
httpserverlocationif in location
Синтаксисoverride_charset on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `override_charset` в NGINX используется для управления кодировкой ответов контента, отдаваемого сервером. По умолчанию учитывается набор символов, указанный в заголовке Content-Type ответа. Тем не менее бывают случаи, когда администратор может захотеть принудительно установить другую charset, независимо от того, что указывает бэкенд-сервис. Установка `override_charset` в `on` обеспечивает это. Когда `override_charset` установлена в `on`, NGINX заменяет любой charset, указанный в заголовке Content-Type ответов, на кодировку, сконфигурированную на сервере. Это особенно полезно в средах, где контент из разных источников может использовать несовместимые charset, или когда серверу необходимо применять единую политику кодировки ко всем HTTP-ответам. Напротив, когда директива установлена в `off` (значение по умолчанию), NGINX позволяет приоритету иметь charset, указанный в Content-Type, что может приводить к потенциально несовместимой кодировке символов в разных ответах. Эта директива может быть настроена в различных контекстах, а именно в `http`, `server`, `location`, а также внутри блока `if` внутри `location`. Каждый контекст позволяет тонко настраивать поведение charset в зависимости от разных сценариев обработки запросов. Принудительное применение конкретной charset может повысить совместимость с клиентами, ожидающими определённую кодировку, тем самым избегая проблем, связанных с неверной интерпретацией символов, особенно в мультиязычном контенте.

Пример конфига

http {
    override_charset on;
    server {
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

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

Использование `override_charset` вместе с другими директивами, которые также изменяют заголовки ответа, может привести к непредвиденным результатам, особенно при использовании `add_header`.

Всегда тестируйте поведение `override_charset` в тестовой среде перед развертыванием в продакшн.

charset_types Директива `charset_types` определяет MIME types, для которых заданный набор символов применяется в NGINX.
httpserverlocation
Синтаксисcharset_types type1 [type2...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `charset_types` в NGINX позволяет администраторам указать, к каким типам содержимого будет применено определённое кодирование символов. Эта директива принимает один или несколько MIME types в качестве аргументов и должна использоваться внутри блока `http`, `server` или `location`. Когда ответ соответствует одному из указанных MIME types, NGINX автоматически добавляет соответствующий заголовок `Content-Type` для этого набора символов, информируя тем самым клиентов о том, как корректно интерпретировать данные ответа. Например, если вы укажете `charset_types text/html application/json;`, NGINX будет отправлять набор символов, заданный директивой `charset`, для любого ответа с `Content-Type: text/html` или `Content-Type: application/json`. Это особенно полезно для обеспечения корректного отображения текста на клиентах: задавая набор символов по умолчанию для разных типов файлов, вы повышаете совместимость с многобайтовыми кодировками символов, такими как UTF-8. Если тип содержимого запроса не совпадает ни с одним из типов, указанных в `charset_types`, NGINX не будет применять набор символов по умолчанию, заданный директивой `charset`, к таким ответам, что позволяет точно контролировать, как разные типы содержимого обрабатывают кодировку символов.

Пример конфига

http {
    charset UTF-8;
    charset_types text/html application/json text/css;
}

Если `charset` не задан в вашей конфигурации, то `charset_types` не будет иметь эффекта, так как нет набора символов, который можно применить к указанным типам.

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

charset_map Директива charset_map задаёт соответствие наборов символов их эквивалентным MIME-компонентам в NGINX.
http
Синтаксисcharset_map { charset source_charset destination_charset; ... };
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `charset_map` позволяет задавать, каким образом разные кодировки символов должны отображаться на MIME-компоненты в контексте `http` NGINX. Это особенно полезно для того, чтобы содержимое, обслуживаемое NGINX, корректно указывало свою кодировку символов, что может влиять на отображение контента в браузерах. Каждая запись в блоке `charset_map` состоит из исходной и целевой кодировок, позволяя при необходимости выполнять преобразование между различными кодировками. Директива действует в контексте `http` и настраивается с помощью блочной структуры, содержащей ряд записей в формате `charset source_charset destination_charset;`. Например, если определённую кодировку нужно трактовать как другую — например, сопоставить `latin1` с `utf-8` — это можно объявить в этом блоке. Когда NGINX обрабатывает запросы, он просматривает это соответствие, чтобы определить, как поступать с кодировкой символов для содержимого, отправляемого клиентам. Важно убедиться, что определённые соответствия точны и необходимы, поскольку неверная конфигурация может привести к неправильному отображению содержимого в браузерах клиентов. Кроме того, это может иметь решающее значение для интернационализации, когда содержимое должно поставляться в разных языках и кодировках в зависимости от местоположения и предпочтений пользователя.

Пример конфига

charset_map {
    charset windows-1251 utf-8;
    charset iso-8859-1 utf-8;
};

Убедитесь, что все используемые наборы символов поддерживаются и распознаются клиентскими браузерами.

Перекрывающиеся или конфликтующие определения наборов символов могут привести к непредвиденному поведению или некорректному отображению содержимого.

Не забудьте перезапустить NGINX после внесения изменений в charset map, чтобы они вступили в силу.

dav_methods Директива `dav_methods` указывает, какие HTTP-методы разрешены для функции WebDAV (Web Distributed Authoring and Versioning) в NGINX.
httpserverlocation
Синтаксисdav_methods method1 method2 ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `dav_methods` используется для определения набора HTTP-методов, которые разрешены при взаимодействии клиентов с ресурсами через WebDAV. Эта директива имеет ключевое значение для управления правами доступа к ресурсам, которые изменяются посредством HTTP-запросов. Разрешая конкретные методы, такие как `GET`, `PUT`, `DELETE` и `PROPFIND`, администратор может контролировать, какие действия клиенты могут выполнять на сервере, повышая тем самым как безопасность, так и функциональность. Например, если директива настроена так, чтобы разрешать `PUT`, клиенты смогут загружать файлы, тогда как запрет `DELETE` помешает им удалять файлы. Такая тонкая настройка прав необходима для сервисов, которые активно используют WebDAV, позволяя серверу соответствующим образом реагировать в зависимости от метода взаимодействия. Директива может принимать один или несколько аргументов, которые соответствуют HTTP-методам, которые вы хотите разрешить, что делает её гибкой при настройке прав. По сути, директива `dav_methods` применяется в контекстах `http`, `server` или `location` и может быть критически важна для того, чтобы позволять только требуемые HTTP-действия, тем самым эффективно защищая ваши службы WebDAV.

Пример конфига

location /dav {
    dav_methods PUT DELETE PROPFIND;
}

Убедитесь, что указанные методы поддерживаются модулем WebDAV; в противном случае клиенты могут получать ошибки.

Добавление слишком большого количества HTTP-методов может привести к потенциальным рискам безопасности, если ими неправильно управлять.

create_full_put_path Директива 'create_full_put_path' позволяет создавать полные пути каталогов для PUT-запросов.
httpserverlocation
Синтаксисcreate_full_put_path on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'create_full_put_path' является опцией конфигурации в NGINX, которая определяет, следует ли создавать полные пути для файлов, загружаемых клиентом, во время PUT-запросов. Когда установлено значение 'on', NGINX не только создаст целевой файл, указанный в PUT-запросе, но и обеспечит существование всех каталогов, ведущих к этому целевому файлу. Это особенно важно в сценариях, когда клиенты могут пытаться загружать файлы в пути, которые ранее не были созданы на сервере, что повышает надёжность обработки загрузок файлов, гарантируя наличие необходимой структуры каталогов. Если директива установлена в 'off' (по умолчанию), NGINX вернёт 403 Forbidden, если каталог, указанный в пути PUT, не существует. Однако при включённой 'create_full_put_path' во время операции PUT, если промежуточные каталоги отсутствуют, NGINX попытается автоматически создать их, позволяя загрузке завершиться успешно. Это может значительно упростить управление загрузками и помочь предотвратить ошибки из‑за отсутствующих каталогов при использовании клиентами PUT-запросов. С точки зрения ожидаемого поведения, когда эта директива размещена в контекстах http, server или location, она функционирует одинаково во всех случаях, что делает её гибкой для различных конфигураций, где ожидаются загрузки файлов.

Пример конфига

location /uploads {
    create_full_put_path on;
    root /var/www;
}

Убедитесь, что пользователь worker в NGINX имеет соответствующие права на создание каталогов.

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

Не забудьте проверить включение этой директивы в соответствующий контекст.

min_delete_depth Директива `min_delete_depth` задаёт минимальную глубину для удаления каталогов при обработке файловой системы NGINX.
httpserverlocation
Синтаксисmin_delete_depth number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `min_delete_depth` используется в обработке файлов NGINX для указания минимальной глубины каталога, необходимой для выполнения операций удаления. Когда эта директива установлена, NGINX разрешает удалять только те каталоги, глубина которых больше или равна указанному уровню. Это особенно полезно для предотвращения случайного удаления корневых или верхнеуровневых каталогов за счёт введения более строгого условия для операций удаления. В иерархической конфигурации NGINX глубина каталога вычисляется на основе числа слэшей (/) в пути. Например, путь `/var/www/html` имеет глубину 2. Директива помогает защититься от необратимых удалений, обеспечивая возможность удаления только тех каталогов, которые соответствуют критерию минимальной глубины. Таким образом администраторы могут снизить риски потери данных при управлении файловой структурой на сервере. Эту директиву можно задавать на нескольких уровнях, включая `http`, `server` и `location`, что даёт гибкость в зависимости от потребностей конфигурации. Значение, присваиваемое `min_delete_depth`, должно быть положительным целым числом, соответствующим требуемой глубине каталога для возможности удаления.

Пример конфига

http {
    min_delete_depth 2;
}

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

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

dav_access Директива `dav_access` управляет правами доступа к ресурсам WebDAV в NGINX.
httpserverlocation
Синтаксисdav_access allow|deny ip_address;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `dav_access` используется в HTTP-модуле NGINX для задания правил, которые контролируют доступ к ресурсам WebDAV на основе IP-адреса клиента. Разрешая или запрещая конкретные IP-адреса или диапазоны адресов, администраторы сайта могут управлять тем, кто может взаимодействовать с ресурсами, доступными через WebDAV. Эта директива может принимать от одного до трёх аргументов в зависимости от требуемых операций, которые обычно подразумевают указание 'allow' для предоставления доступа или 'deny' для его ограничения. Она работает путём проверки IP-адреса входящего запроса по заданным правилам и соответственно разрешает или блокирует запрос. При настройке `dav_access` администраторы могут определять несколько правил, которые могут быть либо включающими (allow), либо исключающими (deny). Правила могут быть структурированы иерархически, то есть правило deny может переопределять правило allow в случае конфликта. Следует уделять внимание порядку правил, поскольку NGINX обрабатывает их последовательно и применит действие, соответствующее первому совпавшему правилу. Пользователи также могут комбинировать правила для IPv4 и IPv6, которые в конфигурации обрабатываются отдельно.

Пример конфига

location /webdav {
    dav_methods PUT DELETE MKCOL COPY MOVE;
    dav_access allow 192.168.1.0/24;
    dav_access deny all;
}

Убедитесь, что IP-адреса правильно отформатированы, чтобы избежать случайных блокировок.

Порядок правил allow и deny может привести к непредвиденному доступу; проверьте последовательность директив.

Будьте осторожны с 'deny all', так как при неправильной настройке оно может заблокировать весь доступ.

degradation Директива 'degradation' используется для задания обработки запросов, когда в контексте http выполняются определённые критерии.
http
Синтаксисdegradation value;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `degradation` позволяет пользователю настраивать обработку запросов в зависимости от заданных условий во время обработки сервером. При её использовании конфигурируются параметры, влияющие на поведение сервера; это особенно полезно для приложений, которым требуется приоритизировать определённые типы трафика или адаптироваться к меняющимся условиям нагрузки. Директива принимает один аргумент, определяющий способ оценки и обработки запросов; конкретные сведения о допустимых значениях аргумента и его контексте использования следует уточнять в документации соответствующего модуля и системных ресурсах. Эта директива особенно полезна для динамического управления качеством обслуживания на основе реальной нагрузки или шаблонов доступа. Реализуя параметры degradation, администраторы могут обеспечить работу приложения при повышенной нагрузке за счёт ограничения доступа, изменения поведения ответов или определения резервных стратегий. Этот механизм может быть необходим для поддержания непрерывности сервиса и производительности в периоды пиковых нагрузок или при нестабильных сетевых условиях. Примеры сценариев: понижение приоритета для определённых типов запросов, включение подробного логирования для диагностики или настройка времени отклика.

Пример конфига

http {
    degradation 1;
}

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

Проверьте, соответствует ли директива `degradation` другим директивам управления доступом в конфигурации. Соблюдайте четкий порядок приоритетов.

degrade Директива 'degrade' используется для управления механизмом резервного переключения, когда основной сервер недоступен.
httpserverlocation
Синтаксисdegrade;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'degrade' в NGINX позволяет администраторам задавать, как должен вести себя сервер, когда primary backend server недоступен. Эта директива особенно полезна в схемах балансировки нагрузки, где может быть несколько upstream серверов или сервисов. Включив директиву 'degrade', NGINX позволит маршрутизировать запросы на назначенный вторичный сервер или заранее определённый набор серверов даже когда один или несколько upstream серверов не работают. Это помогает поддерживать доступность сервиса и гарантировать, что пользователи продолжают получать ответы даже в случае сбоев. Когда директива 'degrade' включена, она фактически изменяет поведение при отказах, позволяя обслуживать запросы с вторичных ресурсов вместо полного отказа. Это особенно важно в средах с высокой доступностью, где критично поддерживать непрерывность сервиса. Администраторам необходимо убедиться, что соответствующие конфигурации fallback настроены, например, определены backup servers в контексте upstream, чтобы эффективно использовать эту директиву. Кроме того, успех использования этой директивы зависит от общих health checks и правильной настройки upstream серверов.

Пример конфига

http {
    upstream backend {
        server primary_server;
        server backup_server backup;
    }
    server {
        location / {
            proxy_pass http://backend;
            degrade;
        }
    }
}

Убедитесь, что серверы upstream правильно определены; отсутствие конфигураций может привести к непредвиденному поведению.

Директива degrade directive применяется только при использовании upstreams; она может не иметь эффекта в простых серверных контекстах.

empty_gif Директива 'empty_gif' настраивает NGINX на выдачу пустого GIF-изображения.
location
Синтаксисempty_gif;
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива 'empty_gif' используется внутри контекста location в конфигурации NGINX, чтобы инструктировать сервер возвращать небольшой прозрачный GIF, когда запрос соответствует этому location. Эта директива особенно полезна для пикселей отслеживания или заполнителей, где контент недоступен, но требуется ответ для клиентского отслеживания. Директива не принимает аргументов и активирует встроенный URL-ответ для пустого GIF-изображения, которое имеет размер 1x1 пиксель и полностью прозрачно. Когда поступает запрос к location, в котором задана директива 'empty_gif', NGINX не будет обрабатывать дальнейшие директивы для этого запроса в этом location; вместо этого он сформирует HTTP-ответ, содержащий данные GIF-изображения. По умолчанию NGINX выполняет типичную обработку запроса, если иное не указано директивами, подобными 'empty_gif'. Поэтому эффективное использование этой директивы требует аккуратного размещения в определениях location в конфигурации сервера, чтобы она случайно не перекрывала другие настройки конфигурации. Директива расширяет возможности сервера по предоставлению ряда функций без необходимости наличия физического файла изображения на сервере, что оптимизирует использование ресурсов и упрощает конфигурацию в сценариях, таких как аналитическое отслеживание или отображение визуальных заполнителей.

Пример конфига

location /tracking {
    empty_gif;
}

Убедитесь, что директива находится в правильном контексте location; в противном случае она не будет работать как задумано.

Использование 'empty_gif' в контексте location вместе с другими конфликтующими директивами может привести к непредсказуемому поведению; тщательно протестируйте конфигурацию.

fastcgi_pass Директива `fastcgi_pass` перенаправляет запросы на сервер FastCGI для обработки, обычно используется с PHP и другими веб-приложениями.
locationif in location
Синтаксисfastcgi_pass address;
По умолчаниюnone
Контекстlocation, if in location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_pass` в NGINX указывает местоположение сервера FastCGI, который будет обрабатывать запросы. Она может направлять трафик на TCP socket, Unix socket или IP-адрес с указанным портом. Эта директива обычно настраивается внутри блока `location`, что позволяет NGINX управлять тем, как обрабатываются запросы в зависимости от пути URL и других параметров. Когда запрос поступает, он маршрутизируется на указанный сервер FastCGI, который обрабатывает запрос и возвращает соответствующий ответ NGINX, который затем отдает его клиенту. В контексте использования вы обычно настраиваете директиву `fastcgi_pass` вместе с дополнительными директивами, такими как `fastcgi_param`, которая задает параметры для FastCGI-приложения (например, имя файла скрипта, метод запроса и т. д.). Сервер FastCGI отвечает обработанными данными, и NGINX пересылает ответ обратно клиенту. Этот механизм необходим для генерации динамического контента в веб-приложениях, где бэкенд-обработка делегируется серверу FastCGI для повышения производительности и масштабируемости.

Пример конфига

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Убедитесь, что сервер FastCGI запущен и доступен; в противном случае NGINX не сможет подключиться и ответить на запросы клиентов.

Проверьте, что сокет или адрес, указанные в `fastcgi_pass`, соответствуют настроенному порту и IP-адресу вашего приложения FastCGI, чтобы избежать проблем с подключением.

Убедитесь, что вы добавили соответствующие параметры с помощью `fastcgi_param`, особенно параметр `SCRIPT_FILENAME`, иначе приложение FastCGI может работать некорректно.

fastcgi_index Директива `fastcgi_index` задаёт файл по умолчанию, который будет отдаваться при обработке FastCGI-запроса без указания имени файла.
httpserverlocation
Синтаксисfastcgi_index file_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_index` в NGINX указывает файл по умолчанию, который будет отдаваться, когда FastCGI-запрос направлен в локацию без указания имени файла. Когда клиент запрашивает каталог, NGINX проверяет наличие указанного файла `fastcgi_index` в этом каталоге. Если в запросе не указан конкретный файл, NGINX автоматически добавит значение `fastcgi_index` к запросу для FastCGI-сервера, чтобы тот сгенерировал ответ. Эта директива обычно используется вместе с настройками `fastcgi_param` и `include`, что позволяет более плавно интегрировать PHP или другие приложения на базе FastCGI. Она улучшает удобство для пользователей, гарантируя, что если ожидается индексный файл (например, `index.php`), он будет автоматически отдан без необходимости явного указания его клиентом. Директива может быть установлена на нескольких уровнях конфигурации: `http`, `server` и `location`, что позволяет гибко управлять поведением в разных контекстах вашей конфигурации NGINX.

Пример конфига

location / {
    index index.php;
    fastcgi_index index.php;
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
}

Убедитесь, что указанный файл присутствует в каталоге, чтобы он корректно отдавался.

Отсутствие этой директивы может привести к ошибкам 404, если ожидается индексный файл, но он не запрашивается явно у FastCGI.

fastcgi_split_path_info Директива fastcgi_split_path_info используется для разделения URI на две части, что особенно полезно для передачи конкретной информации пути в приложения FastCGI.
httpserverlocation
Синтаксисfastcgi_split_path_info regex;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_split_path_info` позволяет указать регулярное выражение, которое соответствует части URI запроса и разделяет его на два компонента: "script" и "path info". Это важно для приложений FastCGI, когда вы хотите направлять определённые запросы URI к конкретным скриптам, одновременно передавая остаточную информацию пути для обработки. Директива определяет, как парсится URI, и позволяет приложению эффективно обрабатывать запросы. Когда эта директива задана, сервер обрабатывает URI запроса в соответствии с указанным шаблоном, захватывая "script" и "path info" в переменные окружения `SCRIPT_NAME` и `PATH_INFO` соответственно. Эта функциональность позволяет разработчикам создавать чистые URL, одновременно позволяя их скриптам корректно работать с ожидаемыми входными данными. Предоставленное регулярное выражение должно быть тщательно сконструировано, чтобы адекватно захватывать требуемое; неправильные шаблоны могут привести к непредвиденному поведению или неверной маршрутизации запросов. Директива может использоваться внутри контекстов `http`, `server` и `location`, что делает её очень гибкой для использования на разных уровнях конфигурации NGINX. Важно убедиться, что указанное регулярное выражение соответствует синтаксису, используемому в NGINX, и не конфликтует с существующими маршрутами на вашем сервере.

Пример конфига

location ~ \.php$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi_params;
}

Убедитесь, что регулярное выражение корректно соответствует структуре URI, ожидаемой вашим приложением; в противном случае вы можете потерять информацию о пути.

Если несколько директив `fastcgi_split_path_info` определены в разных контекстах, NGINX может использовать правило, определённое в наиболее специфичном контексте, что может привести к путанице.

fastcgi_store Директива fastcgi_store позволяет сохранять ответы FastCGI в указанное расположение на диске.
httpserverlocation
Синтаксисfastcgi_store on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`fastcgi_store` используется для определения поведения NGINX в отношении сохранения ответа, полученного от FastCGI-сервера. Когда эта директива установлена, она инструктирует NGINX сохранять тело ответа FastCGI-приложения в файл на диске, что позволяет повысить эффективность обслуживания повторных запросов к одному и тому же ресурсу FastCGI. При указании первый аргумент должен быть допустимым путем к файлу или URI, где должен храниться ответ. Это поддерживает различные возможности файловой системы; например, это может быть динамически создаваемый путь файла на основе переменных запроса или статический путь. Режим хранения также может включать установку прав доступа к файлам в зависимости от конфигурации — что очень полезно при настройке прав для выдачи статических файлов из ответов FastCGI. Кроме того, директива влияет на кэширование, поскольку она позволяет более устойчивый механизм кэширования по сравнению со стандартным кэшированием в памяти, так как сохраняет ответы в виде файлов. Однако при конфигурации пути хранения, прав доступа и стратегий очистки этих файлов требуется тщательное планирование для грамотного управления дисковым пространством в процессе работы.

Пример конфига

location /example {
    fastcgi_pass backend;
    fastcgi_index index.php;
    fastcgi_store on;
    fastcgi_store_access user:rw group:rw all:r;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Убедитесь, что путь, указанный для хранения, доступен для записи процессом NGINX; в противном случае ответы не будут сохраняться корректно.

Будьте внимательны к пространству на диске; по мере накопления файлов могут потребоваться стратегии мониторинга и очистки, чтобы предотвратить переполнение диска.

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

fastcgi_store_access Директива 'fastcgi_store_access' управляет доступом к сохранённым файлам, создаваемым модулем FastCGI в NGINX.
httpserverlocation
Синтаксисfastcgi_store_access allow|deny ip_address;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_store_access' задаёт права доступа к файлам, которые сохраняются при использовании модуля FastCGI. Эта директива позволяет операторам определять, какие клиенты могут получить доступ к сохранённым файлам на основе их IP-адресов, используя правила allow или deny. Она может принимать до трёх параметров, где каждый параметр задаёт различные правила доступа в зависимости от указанных IP-адресов. Директива особенно полезна в сценариях, где в файлах, сгенерированных ответами FastCGI, могут храниться конфиденциальные данные, поэтому жизненно важно строго контролировать доступ, чтобы предотвратить несанкционированный доступ. Когда эта директива установлена, NGINX проверяет входящий запрос по указанным правилам доступа. Если IP клиента совпадает с любым правилом 'allow', доступ предоставляется, а если совпадает с правилом 'deny' — доступ запрещается. Если ни одно правило не применимо, поведение доступа определяется конфигурацией по умолчанию. Директива обеспечивает гибкость и контроль, позволяя администраторам тонко настраивать уровни доступа в соответствии с потребностями их приложений. Например, её можно настроить так, чтобы разрешать доступ только из определённых сетей или IP-адресов и запрещать остальные, что повышает безопасность сохранённых ответов FastCGI.

Пример конфига

location /store {
    fastcgi_store on;
    fastcgi_store_access user:rw group:rw all:r;
    fastcgi_pass backend;
}

Не забывайте указывать корректные IP-адреса в правилах allow/deny; неправильная конфигурация может привести к несанкционированному доступу.

Если ни одно правило не совпадает, применяется политика доступа по умолчанию, что может привести к непредвиденному поведению, если она не определена должным образом.

fastcgi_buffering Директива `fastcgi_buffering` управляет тем, нужно ли буферизовать ответы от FastCGI-серверов.
httpserverlocation
Синтаксисfastcgi_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_buffering`, при установке в значение `on`, включает буферизацию ответов от FastCGI-серверов перед их отправкой клиенту. Этот механизм буферизации позволяет NGINX эффективнее обрабатывать ответы, считывая всё тело ответа от FastCGI-сервера в буфер перед пересылкой клиенту. Напротив, при установке в `off` ответы передаются клиенту сразу после получения, что может повысить отзывчивость ценой ухудшения управления ресурсами, особенно при высокой нагрузке. Когда директива установлена в `on`, NGINX использует несколько предопределённых размеров буферов, которые можно настроить с помощью других директив, таких как `fastcgi_buffers` и `fastcgi_buffer_size`. Такая стратегия буферизации может привести к снижению задержек для клиентов, поскольку NGINX сможет отправлять более крупные куски данных быстрее, когда весь ответ будет получен — это особенно полезно для больших тел ответа. Однако буферизацию нужно управлять осторожно; чрезмерная буферизация может привести к увеличению использования памяти. Эта директива может быть настроена в контекстах `http`, `server` или `location`, что обеспечивает гибкую конфигурацию в зависимости от конкретных потребностей. Важно понимать последствия обоих значений (`on` и `off`) для оптимальной настройки производительности NGINX в соответствии с требованиями приложения.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_buffering off;
    include fastcgi_params;
}

Установка `fastcgi_buffering` в `off` может привести к повышенной загрузке процессора, так как ответы передаются клиентам напрямую без буферизации.

Рекомендуется контролировать использование памяти при использовании `fastcgi_buffering on`, поскольку большие ответы могут потреблять значительные объёмы памяти.

fastcgi_request_buffering Директива `fastcgi_request_buffering` управляет тем, включена ли буферизация тела запроса для запросов FastCGI.
httpserverlocation
Синтаксисfastcgi_request_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

В NGINX директива `fastcgi_request_buffering` позволяет администратору включать или отключать буферизацию тела запроса при обработке запросов модулем FastCGI. По умолчанию, когда эта директива установлена в 'on', NGINX буферизует всё тело запроса перед передачей его процессу FastCGI. Это может повысить производительность, особенно в сценариях, где приложению требуются все данные запроса перед началом обработки. Однако установка `fastcgi_request_buffering` в 'off' позволяет передавать запросы напрямую в приложение FastCGI без промежуточной буферизации в NGINX. Это особенно полезно при обработке больших загрузок или когда приложение обрабатывает данные в реальном времени. При такой настройке данные могут начинать обрабатываться по мере их поступления, что потенциально снижает потребление памяти и улучшает отзывчивость при работе с большими полезными нагрузками или длительными запросами. Директиву можно указывать на уровнях контекстов `http`, `server` или `location`, что позволяет тонко настраивать поведение обработки запросов в зависимости от конкретных локаций или серверных блоков в соответствии с потребностями обслуживаемого приложения.

Пример конфига

location /upload {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_request_buffering off;
}

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

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

fastcgi_ignore_client_abort Директива fastcgi_ignore_client_abort контролирует, должен ли NGINX игнорировать отключение клиента при обработке запросов FastCGI.
httpserverlocation
Синтаксисfastcgi_ignore_client_abort on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_ignore_client_abort` — это параметр конфигурации в NGINX, который помогает управлять поведением запросов, обрабатываемых через интерфейс FastCGI. Когда она включена (установлена в 'on'), NGINX продолжит обработку ответа от бэкенд-сервера FastCGI даже если клиент, сделавший запрос, отключился до полного отправления ответа. Напротив, если директива установлена в 'off', NGINX завершит FastCGI-запрос при отключении клиента, что может быть важно в сценариях, где приоритетом является экономия ресурсов. Она позволяет контролировать использование ресурсов в ситуациях, когда клиент может отказаться от запроса, потенциально снижая затраты на продолжающуюся обработку на бэкенде. Важно отметить, что если у вас есть длительно выполняющиеся FastCGI-запросы, которые должны завершиться даже после отключения клиента, включение этой директивы может быть полезно. Однако в случаях, когда ответ генерируется динамически и имеет значение для сессии клиента, сохранение значения по умолчанию (off) может быть разумным, чтобы избежать лишней обработки и расходования ресурсов. Эту директиву можно задать в контекстах `http`, `server` или `location`, что определяет, где регулируется поведение при отключении клиента.

Пример конфига

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_ignore_client_abort on;
}

Установка этой директивы в положение 'on' может привести к трате ресурсов, если клиент отключится, так как NGINX продолжит обработку запросов, которые уже могут быть неактуальны.

Тщательно оцените, когда использовать 'on', поскольку это может повлиять на производительность, особенно при высокой нагрузке.

fastcgi_bind Директива `fastcgi_bind` настраивает адрес, на который FastCGI-сервер будет привязываться для приёма запросов.
httpserverlocation
Синтаксисfastcgi_bind address [port];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_bind` используется в HTTP-сервере NGINX для указания адреса или сокета, к которому FastCGI-сервер должен привязываться при обработке запросов. Эта директива может принимать один или два аргумента. Первый аргумент — это адрес (IPv4 или IPv6) или путь к Unix socket, который указывает, где FastCGI-сервер может слушать соединения. Опциональный второй аргумент может указывать порт для привязки, позволяя более точно контролировать сетевые интерфейсы и порты, используемые процессом FastCGI. При использовании Unix socket синтаксис просто представляет собой путь к сокету без указания порта. Этот механизм привязки критичен в сценариях, где может работать несколько FastCGI-серверов, поскольку позволяет NGINX направлять трафик к нужному экземпляру FastCGI. FastCGI-серверы могут быть эффективно распределены в зависимости от заданной привязки, что может повысить производительность за счёт ограничения лишней сетевой нагрузки. Правильная конфигурация директивы `fastcgi_bind` необходима при развёртывании приложений на NGINX, зависящих от FastCGI, так как обеспечивает корректное распределение серверных ресурсов в соответствии с требованиями приложения и поддерживает отзывчивость на клиентские запросы. Для контекста эта директива может использоваться в блоках `http`, `server` или `location`, что даёт широкую гибкость в настройке обработчиков FastCGI для разных частей установки NGINX.

Пример конфига

location ~ \.php$ {
    fastcgi_pass   127.0.0.1;  # Example FastCGI server address
    fastcgi_bind   127.0.0.1:9000;
}

Убедитесь, что указанный адрес правильный и доступен для рабочих процессов NGINX.

Избегайте привязывания к адресам, не выделенным серверу, поскольку это может привести к ошибкам 'address already in use'.

При использовании Unix sockets убедитесь, что путь сокета имеет соответствующие права, чтобы NGINX мог получить к нему доступ.

fastcgi_socket_keepalive Директива `fastcgi_socket_keepalive` включает или отключает функцию keepalive для FastCGI socket-соединений.
httpserverlocation
Синтаксисfastcgi_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_socket_keepalive` позволяет управлять тем, следует ли поддерживать постоянные соединения с серверами FastCGI. Если установить 'on', NGINX будет держать FastCGI socket открытым после обработки запроса, что позволит последующим запросам повторно использовать существующее соединение вместо установления новых. Это может привести к повышению производительности за счёт уменьшения накладных расходов на создание и разрушение socket'ов, особенно при высокой нагрузке, когда множество запросов направляются к одному и тому же FastCGI-серверу. Директиву можно задавать внутри контекстов `http`, `server` или `location`, что делает её гибкой — она может применяться глобально или к конкретным блокам серверов и локациям. Флаг также можно установить в 'off', если вы хотите отключить поведение keepalive, в результате чего для каждого запроса к FastCGI-серверу будет устанавливаться новое соединение. Изменение этого параметра требует тщательного учёта способности FastCGI-сервера обрабатывать постоянные соединения, а также любых конфигураций таймаутов, которые могут повлиять на производительность.

Пример конфига

http {
    server {
        location / {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_socket_keepalive on;
        }
    }
}

Включение keepalive может привести к непредвиденному поведению, если FastCGI server не поддерживает его должным образом, поэтому рекомендуется провести тестирование.

Чрезмерное количество keepalive соединений может привести к истощению ресурсов на FastCGI server, если ими не управлять должным образом.

fastcgi_connect_timeout Задаёт таймаут для попыток установления соединения с сервером FastCGI.
httpserverlocation
Синтаксисfastcgi_connect_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_connect_timeout` задаёт максимальное время, в течение которого NGINX будет ожидать установления соединения с сервером FastCGI до того, как запрос будет признан неудачным. Этот таймаут особенно важен, когда ваш сервер FastCGI находится под большой нагрузкой или медленно отвечает, поскольку он помогает предотвратить зависание NGINX при попытке установить соединение. Если соединение не удаётся установить в указанный промежуток времени, запрос будет прерван, и клиенту будет возвращена ошибка 504 Gateway Timeout. Эта директива устанавливается в контексте конфигурации `http`, `server` или `location`, что позволяет настраивать её глобально или конкретно для определённых блоков server или путей location. Значение `fastcgi_connect_timeout` задаётся в секундах и может быть положительным целым числом. Важно выбрать подходящее значение с учётом ожидаемого времени ответа вашего сервера FastCGI, чтобы оно не было слишком большим (что ведёт к ненужным задержкам) и не слишком маленьким (что вызывает преждевременные таймауты).

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_connect_timeout 30s;
    include fastcgi_params;
}

Установка слишком низкого значения может привести к частым тайм-аутам в условиях нормальной нагрузки.

Убедитесь, что другие настройки таймаутов (например, `fastcgi_read_timeout`) не конфликтуют с этой директивой.

Необходимо соблюдать ограничения контекста конфигурации; установка этой директивы вне допустимого контекста приведёт к ошибке.

fastcgi_send_timeout Устанавливает таймаут отправки ответов серверу FastCGI.
httpserverlocation
Синтаксисfastcgi_send_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_send_timeout` задает максимальное время, в течение которого NGINX будет ждать ответа от сервера FastCGI. Если это время превысит предел, NGINX завершит соединение с сервером FastCGI и вернет клиенту ошибку. Значение указывается в миллисекундах и помогает предотвратить задержки, вызванные неотзывчивыми приложениями FastCGI. Директиву можно устанавливать на уровнях блоков `http`, `server` или `location`, что обеспечивает гибкую конфигурацию в зависимости от конкретного случая использования. При настройке `fastcgi_send_timeout` важно выбрать подходящее значение, исходя из ожидаемого времени ответа вашего FastCGI-бэкенда. Слишком короткий таймаут может приводить к необоснованным ошибкам для обычных запросов, тогда как слишком длинный — задерживать обработку неотзывчивых запросов. Поведение директивы можно дополнительно уточнить, используя ее совместно с другими директивами, такими как `fastcgi_read_timeout` и `fastcgi_buffering`, что эффективно контролирует как обработку ответов, так и стратегию таймаутов.

Пример конфига

location /app {
    include fastcgi_params;
    fastcgi_pass backend;
    fastcgi_send_timeout 30s;
}

Установка слишком малого значения времени ожидания может привести к преждевременному завершению действительных запросов.

Если не настроить эту директиву совместно с `fastcgi_read_timeout`, это может привести к несогласованному поведению при длительной обработке.

fastcgi_send_lowat Директива `fastcgi_send_lowat` задаёт ограничение на объём данных, отправляемых NGINX на FastCGI-сервер, прежде чем операции отправки можно будет считать блокирующими.
httpserverlocation
Синтаксисfastcgi_send_lowat number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_send_lowat` используется для оптимизации отправки данных из NGINX на FastCGI-серверы путём указания порога отправки данных. Если суммарное количество байтов, ожидающих отправки, остаётся ниже этого порога, процесс может отправлять больше данных без блокировки, что обеспечивает лучшую производительность, особенно при высокой нагрузке. Директива полезна в сценариях, где важна низкая задержка, например в веб‑приложениях, которые полагаются на частые небольшие ответы от FastCGI‑бэкенда. Параметр директивы `fastcgi_send_lowat` — одно целое число, обозначающее количество байтов. Когда это значение задано, если объём данных, поставленных в очередь на отправку на FastCGI‑сервер, превысит этот порог, NGINX начнёт блокировать или ограничивать дальнейшие операции отправки. Это позволяет соединению оставаться эффективным, обеспечивая оптимальное использование сетевых ресурсов без перегрузки сервера. Настройка этого значения особенно полезна с учётом потребностей приложения и характеристик производительности бэкенда.

Пример конфига

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_send_lowat 16384;
}

Установка этого значения слишком низко может привести к чрезмерной блокировке и снижению пропускной способности, особенно при высокой нагрузке.

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

fastcgi_buffer_size Задает размер буфера для чтения первой части ответа FastCGI.
httpserverlocation
Синтаксисfastcgi_buffer_size size;
По умолчанию16k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_buffer_size` задаёт размер буфера, используемого для чтения заголовка ответов FastCGI от бэкенд‑сервера. Когда NGINX обменивается данными с приложением FastCGI, он буферизует заголовок ответа, чтобы корректно обработать его перед передачей тела. Правильно подобранный размер буфера может повысить производительность вашей конфигурации NGINX, гарантируя, что заголовки помещаются в буфер без необходимости нескольких операций чтения, что снижает задержки. Размер буфера определяется в контексте блоков `http`, `server` или `location`, что позволяет задавать его с точностью до уровня конфигурации. Директива принимает аргумент со значением размера, например `16k` или `32`. Если буфер недостаточно велик для хранения данных заголовка, NGINX может переключиться на отдельный буфер для тела, что может привести к увеличению времени ответа или использованию ресурсов. Обеспечение соответствия `fastcgi_buffer_size` ожидаемым размерам ответов ваших приложений FastCGI имеет решающее значение для оптимальной производительности.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_buffer_size 32k;
    include fastcgi_params;
}

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

Изменение размера буфера без тестирования может негативно повлиять на производительность; всегда проверяйте изменения с помощью тестов производительности.

fastcgi_pass_request_headers Директива 'fastcgi_pass_request_headers' управляет передачей заголовков запроса серверам FastCGI.
httpserverlocation
Синтаксисfastcgi_pass_request_headers on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_pass_request_headers' используется в конфигурациях NGINX для определения того, следует ли пересылать заголовки клиентского запроса на FastCGI-сервер. Эта директива принимает в качестве аргумента логический флаг, который позволяет включить или отключить передачу этих заголовков. При значении 'on' NGINX передаёт все заголовки из клиентского запроса, включая те, которые могут быть изменены или добавлены промежуточными прокси или другими сервисами. Напротив, установка 'off' означает, что никакие заголовки запроса не будут отправлены на FastCGI-сервер. Эффективное использование этой директивы важно для приложений, которые зависят от определённых заголовков для корректной работы, например `HTTP_REFERER` или `USER_AGENT`. Непередача этих заголовков может привести к проблемам в веб-приложениях или системах управления контентом, которые ожидают определённые заголовки запроса. Также важно учитывать вопросы безопасности при пересылке некоторых заголовков, так как это может раскрыть чувствительную информацию из клиентских запросов, которой могут злоупотребить. Эту директиву можно задать в контекстах http, server или location, что делает её гибкой в зависимости от требований конфигурации. Правильное использование и понимание этой директивы, особенно с точки зрения производительности и безопасности, имеет ключевое значение при интеграции NGINX с приложениями FastCGI.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_pass_request_headers on;
    include fastcgi_params;
}

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

Убедитесь, что ваше FastCGI-приложение правильно обрабатывает передаваемые заголовки.

fastcgi_pass_request_body Директива `fastcgi_pass_request_body` управляет пересылкой тела запроса на FastCGI-сервер.
httpserverlocation
Синтаксисfastcgi_pass_request_body on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_pass_request_body` используется в конфигурации NGINX, чтобы указать, должно ли тело HTTP-запроса клиента отправляться на FastCGI-сервер. Эта директива принимает в качестве аргумента флаг, который может быть 'on' или 'off'. Если установлено 'on', тело запроса пересылается на бэкенд FastCGI-сервер в рамках обработки запроса. Если же установлено 'off', тело запроса не отправляется, что фактически игнорирует любые данные, которые клиент мог отправить в теле запроса. Эта директива особенно полезна в ситуациях, когда обработка запроса не требует входных данных из тела, например при GET-запросах или при использовании FastCGI-сервера для операций, которые не обрабатывают входные данные. Правильное использование обеспечивает эффективную передачу данных и управление ответами между NGINX и FastCGI-бэкендом, минимизируя ненужную передачу данных, когда она не нужна. Часто она используется совместно с другими директивами FastCGI, такими как `fastcgi_pass`, чтобы гарантировать обращение к соответствующему серверу в зависимости от заданных контекстов запроса.

Пример конфига

location /example {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass_request_body off;
}

Убедитесь, что установили эту директиву в соответствии с тем, требуется ли FastCGI-приложению тело запроса; установка её в 'off', когда оно необходимо, приведёт к отсутствию данных.

Помните, что эта директива применяется только к запросам, обрабатываемым через FastCGI; её использование в других контекстах может не дать никакого эффекта.

fastcgi_intercept_errors Директива `fastcgi_intercept_errors` настраивает NGINX на перехват ошибок из ответов FastCGI для пользовательской обработки ошибок.
httpserverlocation
Синтаксисfastcgi_intercept_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_intercept_errors` работает совместно с FastCGI и управляет тем, как NGINX обрабатывает ошибки, возвращаемые FastCGI-сервером, например HTTP-статусы 4xx или 5xx. При значении 'on' NGINX будет перехватывать эти ответные ошибки, что позволяет задавать пользовательские страницы ошибок или выполнять дополнительную обработку вместо прямой пересылки исходного ответа об ошибке FastCGI клиенту. Это особенно полезно в ситуациях, когда вы хотите отображать удобочитаемые сообщения об ошибках для пользователя или реализовать специфические механизмы восстановления после ошибок. Директива принимает булев флаг в качестве аргумента, который может быть 'on' или 'off'. Когда установлено 'on', любые ответные ошибки от FastCGI-сервера (например, со статусными кодами в диапазоне 400 или 500) могут быть обработаны с помощью конкретных конфигураций страниц ошибок, определённых в конфигурации NGINX. При значении 'off' поведение по умолчанию позволяет NGINX возвращать ответ FastCGI как есть, включая любые сообщения об ошибке. Директива может использоваться в контекстах 'http', 'server' или 'location', что даёт гибкость в выборе места установки в зависимости от требуемой области действия конфигурации обработки ошибок.

Пример конфига

location /app {
    fastcgi_pass backend;
    fastcgi_intercept_errors on;
    fastcgi_index index.php;
    include fastcgi_params;
}

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

Эта директива не влияет на ответы, не относящиеся к FastCGI; убедитесь, что вы настроили обработку ошибок для других типов бэкендов при необходимости.

fastcgi_read_timeout Директива `fastcgi_read_timeout` задаёт максимально допустимое время, в течение которого NGINX будет ожидать ответа от FastCGI сервера до истечения таймаута.
httpserverlocation
Синтаксисfastcgi_read_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_read_timeout` используется для указания продолжительности, в течение которой NGINX будет ожидать ответа от FastCGI сервера после отправки запроса. Это полезно в сценариях, когда обработка на стороне FastCGI может занять больше времени, чем ожидалось, и вы хотите избежать преждевременного закрытия соединений, которые всё ещё могут в итоге ответить. Таймаут применяется индивидуально к каждому запросу и может быть задан в разных контекстах, таких как `http`, `server` и `location`. Параметр этой директивы — значение времени, которое можно указать в секундах (s), минутах (m), часах (h) или днях (d). Если время ожидания превышено и ответ не получен, NGINX разорвёт соединение с FastCGI сервером и может вернуть клиенту ошибку. Настройка `fastcgi_read_timeout` может быть критически важна для оптимизации производительности приложений, которым требуется больше времени на обработку, например при выполнении сложных запросов к базе данных или операций с файлами. Важно отметить, что слишком низкое значение может привести к нежелательному закрытию соединений, тогда как слишком высокое — заставит клиентов ждать необоснованно долго ответа, который может никогда не поступить. Поэтому рекомендуется подбирать это значение, исходя из характеристик производительности приложения.

Пример конфига

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_read_timeout 120s;
}

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

Если вы установите timeout выше максимального времени выполнения PHP, timeout всё равно будет применяться согласно этой директиве; поэтому вашему приложению, возможно, потребуется привести эти настройки в соответствие.

fastcgi_buffers Директива 'fastcgi_buffers' задаёт количество и размер буферов, используемых для чтения ответа от FastCGI-сервера.
httpserverlocation
Синтаксисfastcgi_buffers number size;
По умолчанию8 4k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_buffers` имеет решающее значение для настройки того, как NGINX обрабатывает ответ от FastCGI-сервера. Она задаёт количество буферов и размер каждого буфера, которые NGINX использует при чтении ответов. Эта директива помогает оптимизировать производительность и использование памяти, управляя тем, сколько данных может быть считано одновременно с FastCGI-бэкенда до отправки клиенту. Когда вы указываете `fastcgi_buffers` с двумя аргументами, первый аргумент обозначает количество буферов, а второй — размер каждого буфера. NGINX выделяет общее пространство буферов в соответствии с указанными значениями, что помогает эффективно буферизовать большие ответы и предотвращать преждевременную отправку клиентам частичных ответов. Буферы могут вмещать полный размер ответа от FastCGI-сервера, улучшая производительность приложений, которые генерируют большие ответы, например веб-приложений с интенсивной обработкой данных. Также важно отметить, что значение `fastcgi_buffers` должно быть установлено соответствующим образом, исходя из ожидаемого размера ответов, которые будет генерировать ваше приложение. Установка слишком малого значения может привести к снижению производительности или дополнительным накладным расходам, поскольку NGINX может вынужденно читать с FastCGI-бэкенда чаще, чем необходимо для формирования полного ответа.

Пример конфига

fastcgi_buffers 16 8k;

Убедитесь, что размеры буферов соответствуют объёму ответа; в противном случае NGINX может неэффективно обрабатывать большие ответы.

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

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

fastcgi_busy_buffers_size Директива `fastcgi_busy_buffers_size` задаёт размер занятых буферов, которые FastCGI использует для буферизации ответов от вышестоящего сервера.
httpserverlocation
Синтаксисfastcgi_busy_buffers_size size;
По умолчанию8k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

В NGINX директива `fastcgi_busy_buffers_size` определяет максимальный размер пространства буферизации FastCGI, который может использоваться для обрабатываемых ответов. Это распределение памяти критично для управления тем, как FastCGI буферизует данные, отправляемые от вышестоящего сервера, прежде чем они будут переданы клиенту. Когда достигается размер, указанный в `fastcgi_busy_buffers_size`, NGINX начнёт либо отправлять клиенту накопленные в буфере ответы, либо обрабатывать трафик иначе в зависимости от настроек. Директива принимает один аргумент, задающий размер занятых буферов в байтах. Если выделенного буфера недостаточно, NGINX можно настроить так, чтобы либо отложить обработку, либо управлять потоком данных, обеспечивая корректный порядок ответов и их успешную доставку. Эта директива может влиять на производительность, особенно при высокой нагрузке: слишком маленький буфер может привести к ухудшению времени отклика и увеличению задержек, поскольку NGINX придётся часто сбрасывать буферы, чтобы вместить входящие данные. Для оптимальной производительности при настройке этой директивы следует учитывать ожидаемые максимальные размеры ответов от вышестоящего сервера и типичную нагрузку на сервер NGINX. Неправильная конфигурация может привести к узким местам в производительности, поэтому мониторинг и тестирование необходимы для подбора подходящих размеров буферов под конкретные потребности приложения.

Пример конфига

http {
    server {
        location /api {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_busy_buffers_size 16k;
            include fastcgi_params;
        }
    }
}

Установка размера слишком малого может привести к увеличению задержки, поскольку NGINX чаще сбрасывает буферы.

Конфликтующие настройки с `fastcgi_buffer_size` могут привести к неэффективному использованию памяти.

Отсутствие корректировки размера буфера в соответствии с типичной нагрузкой может привести к проблемам с производительностью.

fastcgi_force_ranges Директива `fastcgi_force_ranges` заставляет FastCGI server отвечать на запросы диапазонов байтов статусом 206 Partial Content.
httpserverlocation
Синтаксисfastcgi_force_ranges on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_force_ranges` используется в NGINX для обработки запросов диапазонов байтов, отправляемых на FastCGI backend. По умолчанию некоторые приложения FastCGI могут некорректно поддерживать диапазоны байтов, что приводит к неправильной доставке содержимого при частичных запросах. Когда эта директива включена (установлена в 'on'), NGINX обеспечит, что запросы с диапазонами байтов правильно интерпретируются и обрабатываются FastCGI server, принуждая его отвечать с `206 Partial Content`, при условии, что указанный диапазон действителен. На практике данная директива особенно важна при отдаче видео- или аудиоконтента по HTTP, когда клиенты могут запрашивать определённые диапазоны байтов для потоковой передачи. Поручая FastCGI server учитывать такие запросы с диапазонами, NGINX повышает совместимость и эффективность доставки содержимого. Директива может применяться глобально или в рамках конкретных контекстов server и location, что делает её гибкой для различных конфигураций сайтов. Директива `fastcgi_force_ranges` принимает флаг: он может быть установлен в 'on' или 'off', при этом 'off' отключает принудительное поведение ответа. Когда она включена, NGINX взаимодействует напрямую с FastCGI server для согласования и управления диапазонами байтов, обеспечивая клиентам получение соответствующих сегментов данных, которые они запрашивают. Такое поведение улучшает опыт конечного пользователя, особенно для приложений с богатым медиа-контентом.

Пример конфига

server {
    location /api {
        fastcgi_pass backend;
        fastcgi_force_ranges on;
    }
}

Убедитесь, что FastCGI-сервер поддерживает запросы диапазонов, поскольку не все серверы корректно реализуют эту функциональность.

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

fastcgi_limit_rate Директива 'fastcgi_limit_rate' ограничивает скорость, с которой NGINX отправляет данные на серверы FastCGI.
httpserverlocation
Синтаксисfastcgi_limit_rate size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_limit_rate' используется для контроля пропускной способности, выделяемой ответам FastCGI, предлагая способ задать ограничения на скорость передачи данных от NGINX к бэкенду FastCGI. Это помогает управлять нагрузкой на сервер и оптимизировать распределение ресурсов в ситуациях, когда отдельные приложения FastCGI могут генерировать чрезмерный трафик, особенно в периоды высокого спроса. Когда директива установлена, она задаёт максимальное количество байт в секунду, которые могут быть отправлены на сервер FastCGI. Если эта скорость превышается, NGINX временно приостанавливает отправку заголовков и возобновляет её только после того, как скорость передачи данных опустится ниже заданного порога. Важно отметить, что 'fastcgi_limit_rate' принимает один аргумент, который обычно указывается в байтах в секунду и может использовать суффиксы, такие как 'k' для килобайт или 'm' для мегабайт, что облегчает настройку ограничений пропускной способности. Директиву можно размещать в контекстах 'http', 'server' или 'location', что даёт гибкость в применении разных ограничений в зависимости от области действия вашего приложения или структуры сайта. Администраторы могут точно настроить, сколько пропускной способности выделяется на обработку FastCGI, что позволяет лучше управлять производительностью в различных условиях.

Пример конфига

location /fastcgi {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_limit_rate 100k;
}

Убедитесь, что 'fastcgi_limit_rate' задан в соответствующем контексте; при некорректном использовании он может не сработать как задумано.

Следите за устанавливаемым значением, чтобы непреднамеренно не лишить ресурсов процессы бэкенда FastCGI.

fastcgi_cache Директива fastcgi_cache включает кэширование ответов от серверов FastCGI для повышения производительности веб-приложений.
httpserverlocation
Синтаксисfastcgi_cache zone;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache` задает зону общей памяти, используемую для хранения ответов FastCGI, фактически кэшируя их, чтобы снизить нагрузку на сервер и ускорить время ответа для часто запрашиваемого контента. Когда сервер FastCGI формирует ответ, он может кэшироваться на основе параметров запроса, что позволяет последующим идентичным запросам обслуживаться из кэша вместо повторного формирования ответа через обращение к бэкенд-серверу. Директива требует аргумента — имени зоны кэша, которая предварительно определяется с помощью директивы `fastcgi_cache_path`. Её можно использовать в различных контекстах, таких как блоки `http`, `server` и `location`, что позволяет осуществлять точечный контроль над тем, как разные локации обрабатывают кэширование. В сочетании с сопутствующими директивами, такими как `fastcgi_cache_key`, администраторы могут определить, что считается уникальной записью в кэше, тем самым настраивая поведение механизма кэширования под потребности приложения. Поведение кэширования также определяется связанными директивами, такими как `fastcgi_cache_valid`, которая задаёт время, в течение которого записи в кэше считаются действительными, и `fastcgi_cache_bypass`, позволяющая динамически управлять обходом кэша, что обеспечивает возможность предоставления обновлённых данных, когда это необходимо.

Пример конфига

http {
    fastcgi_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m;
    server {
        location / {
            fastcgi_pass backend;
            fastcgi_cache my_cache;
            fastcgi_cache_valid 200 1h;
        }
    }
}

Убедитесь, что зона кэша определена с помощью директивы fastcgi_cache_path; в противном случае эта директива не будет работать должным образом.

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

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

fastcgi_cache_key Директива `fastcgi_cache_key` определяет ключ кэша, используемый механизмом кэширования FastCGI.
httpserverlocation
Синтаксисfastcgi_cache_key string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_key` играет ключевую роль в определении уникального ключа, используемого при сохранении или извлечении закэшированных ответов FastCGI. Формируя ключ кэша, она позволяет NGINX различать разные элементы кэша в зависимости от конкретики запроса. Этот ключ может быть комбинацией переменных, что позволяет эффективно сохранять и извлекать динамический контент, обеспечивая точные и релевантные попадания в кэш для конкретных запросов. При определении ключа кэша вы можете использовать различные переменные, доступные в NGINX, которые могут представлять такие атрибуты, как запрошенный URI, метод запроса или другие заголовки. Конфигурация позволяет реализовать индивидуальные стратегии кэширования для оптимизации производительности и использования ресурсов. Директива действует в контекстах, таких как `http`, `server` и `location`, обеспечивая гибкость на разных уровнях конфигурации NGINX. Важно отметить, что неправильная настройка `fastcgi_cache_key` может привести к несоответствиям в кэше и, как следствие, к выдаче некорректных ответов пользователям. Поэтому крайне важно тщательно конструировать ключ кэша, чтобы полностью воспользоваться возможностями кэширования NGINX и избежать непредвиденного поведения.

Пример конфига

fastcgi_cache_key "$scheme$request_method$host$request_uri";

Убедитесь, что ключ включает все необходимые переменные, чтобы предотвратить конфликты кэша.

Избегайте использования конфиденциальных данных в ключе кэша для повышения безопасности.

Учтите возможные последствия для производительности при использовании сложных выражений или нескольких переменных.

fastcgi_cache_path Указывает путь для хранения кэшированных данных при использовании FastCGI-кэширования.
http
Синтаксисfastcgi_cache_path path [levels=levels] [zone=name:size] [inactive=time] [max_size=size];
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_path` используется для определения параметров хранения FastCGI-кэша в NGINX. Эта директива задаётся внутри блока `http` и указывает путь, в котором будут храниться кэшированные файлы, а также настройки для размера зоны кэша, ключей и других параметров. По сути она создаёт каталог, содержащий данные ответов от FastCGI-сервера, что может значительно ускорить время ответа за счёт выдачи кэшированного содержимого вместо перенаправления запросов к бэкенд-серверу каждый раз. Эта директива требует как минимум двух аргументов: путь кэша и строку конфигурации зоны кэша, которая обычно включает имя и размер кэша. Зона кэша определяет, как NGINX сегментирует и управляет кэшированными ответами. Также можно указать дополнительные параметры, такие как `inactive` или `max_size`, чтобы задать, как долго элементы будут храниться в кэше или максимальный размер кэша соответственно. Важность этой директивы трудно переоценить, так как правильная настройка FastCGI-кэша может привести к улучшению производительности и снижению нагрузки на бэкенд-серверы.

Пример конфига

http {
    fastcgi_cache_path /var/cache/nginx/fastcgi_cache levels=1:2 keys_zone=fastcgi_cache:10m inactive=60m max_size=1g;
}

Убедитесь, что указанный путь имеет соответствующие права доступа, позволяющие NGINX записывать файлы кэша.

Если размер кэша превысит указанное значение max_size, NGINX начнёт удалять наименее недавно использовавшиеся файлы кэша, что может повлиять на производительность, если конфигурация не настроена должным образом.

fastcgi_cache_bypass Директива `fastcgi_cache_bypass` позволяет указать условия, при которых кэш FastCGI должен быть пропущен.
httpserverlocation
Синтаксисfastcgi_cache_bypass condition;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_bypass` является частью HTTP-модуля NGINX и используется для управления механизмами кэширования FastCGI. При настройке эта директива принимает одно или несколько условий (переменные или атрибуты запроса клиента), которые определяют, когда NGINX должен пропустить кэшированный ответ и вместо этого получить свежий от upstream-сервера. Она особенно полезна в ситуациях, когда необходимо гарантировать возврат клиентам самых актуальных данных в зависимости от их запросов или определённых условий, таких как конкретные заголовки, куки или параметры запроса, которые указывают на то, что нужен динамический ответ, а не закэшированный. Эту директиву можно задать в контекстах `http`, `server` или `location`, что даёт гибкость в области её применения. Как правило, используют переменные, такие как `$arg_argname` для обращения к конкретным параметрам запроса, `$http_cookie` для кук, или даже пользовательские заголовки приложения для создания соответствующих условий обхода. Это помогает оптимизировать использование ресурсов, позволяя при необходимости отдавать устаревшие данные, одновременно обеспечивая выдачу самых свежих данных, когда это необходимо. В сочетании с другими директивами, связанными с кэшированием FastCGI, такими как `fastcgi_cache` и `fastcgi_cache_key`, она обеспечивает надёжную стратегию кэширования для повышения производительности при сохранении актуальности содержимого в зависимости от взаимодействия с пользователем и чувствительности данных.

Пример конфига

location / { 
    fastcgi_pass backend;
    fastcgi_cache my_cache;
    fastcgi_cache_bypass $http_cache_bypass;
}

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

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

fastcgi_no_cache Директива `fastcgi_no_cache` управляет тем, кэшировать ли ответы от приложений FastCGI на основе указанных условий.
httpserverlocation
Синтаксисfastcgi_no_cache condition | variable_names;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_no_cache` используется, чтобы указать NGINX, следует ли кэшировать ответы от FastCGI-серверов, таких как обработчики PHP. Эта директива принимает одну или несколько переменных или условий, определяющих правила кэширования. Например, если значение указанной переменной истинно, NGINX не кэширует ответ, что позволяет генерировать динамический контент без задержек, вызванных попаданиями в кэш. Она работает совместно с директивой `fastcgi_cache_bypass` для обеспечения согласованного поведения кэширования на основе похожих условий. Директива должна быть задана в контексте `http`, `server` или `location` в конфигурационном файле NGINX и обычно используется вместе с настройками кэширования для достижения оптимальной производительности. Она особенно полезна в приложениях, где требуется инвалидировать кэш в определённых обстоятельствах, например, когда пользователь вошёл в систему, или содержимое ответа значительно меняется в зависимости от параметров запроса. Эффективно управляя динамическим контентом, `fastcgi_no_cache` помогает поддерживать актуальность данных приложения и улучшает пользовательский опыт в веб-приложениях.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_no_cache $http_cache_control;
}

Убедитесь, что условия кэширования чётко определены, чтобы избежать ненужной нагрузки на сервер FastCGI.

Использование неправильных имён переменных может привести к непредсказуемому поведению кэша или неверным ответам.

fastcgi_cache_valid Определяет, как долго действительные кэшированные ответы сохраняются в кэше FastCGI.
httpserverlocation
Синтаксисfastcgi_cache_valid code time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_valid` задаёт период времени, в течение которого кэшированный ответ FastCGI считается действительным, то есть может быть отдан без повторного запроса к backend server. Эта директива принимает интервал времени и конкретный код ответа или диапазон кодов ответа. Например, использование `fastcgi_cache_valid 200 10m;` указывает, что ответ 200 OK будет кэшироваться в течение 10 минут. Можно указать несколько строк этой директивы, чтобы задать разные периоды действия для разных кодов ответа. Важно отметить, что директива должна располагаться в соответствующем контексте, например в блоках http, server или location, и работает в сочетании с директивой `fastcgi_cache`. Когда отдается действительный кэш, директива `fastcgi_cache_bypass` может использоваться для условного обхода кэша. Это обеспечивает большую гибкость в поддержании актуального содержимого при необходимости, при этом сохраняя преимущества кэширования для повторяющихся запросов.

Пример конфига

fastcgi_cache my_cache;
fastcgi_cache_valid 200 10m;
fastcgi_cache_valid 404 1m;

Убедитесь, что fastcgi_cache определён перед использованием этой директивы.

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

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

fastcgi_cache_min_uses Задает минимальное количество обращений, после которых ответ будет кэшироваться в FastCGI cache.
httpserverlocation
Синтаксисfastcgi_cache_min_uses number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_min_uses` задаёт минимальное количество одинаковых запросов к конкретному URI, которое должно быть выполнено, прежде чем его ответ будет помещён в кэш. Это особенно полезно, чтобы избежать кэширования ответов для малопосещаемых конечных точек, гарантируя сохранение в кэше только часто запрашиваемого содержимого. Значение этой директивы должно быть положительным целым числом, так как оно указывает, сколько раз должен поступить запрос к одному и тому же ресурсу до принятия решения о кэшировании ответа. Когда количество запросов к конкретному URI достигает или превышает значение, определённое директивой `fastcgi_cache_min_uses`, для этого ответа срабатывает механизм кэширования. Это помогает оптимизировать поведение кэша, предотвращая занятость кэш-памяти редкими или неактуальными ответами. Директиву можно задать в контекстах `http`, `server` или `location`, что позволяет обеспечить детальный контроль в зависимости от потребностей приложения. Минимизируя потенциальное загрязнение кэша ответами для редко запрашиваемых URI, вы можете повысить производительность приложения и эффективность использования кэш-памяти. Это особенно полезно в сценариях с динамическим содержимым, когда некоторые ответы не должны кэшироваться, если они не запрашиваются часто.

Пример конфига

http {
    fastcgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
    server {
        location /api {
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_cache my_cache;
            fastcgi_cache_min_uses 5;
        }
    }
}

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

Убедитесь, что ваш бэкенд способен обрабатывать объём запросов, если кэширование отключено для малоиспользуемых URIs.

Убедитесь, что кэширование включено, иначе эта директива не будет иметь эффекта.

fastcgi_cache_max_range_offset Управляет максимальным допустимым смещением для range-запросов в кэшировании FastCGI.
httpserverlocation
Синтаксисfastcgi_cache_max_range_offset size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_max_range_offset` задаёт максимальное количество байт, которое может быть указано в качестве смещения, когда клиент выполняет range‑запрос к ресурсу, обслуживаемому кэшированием FastCGI. Эта директива помогает оптимизировать поведение кэша и ответы для частично загруженных ресурсов, гарантируя, что сервер не выдаёт устаревшие или избыточные данные, когда клиенты запрашивают только определённые части файла. Установка этой директивы с числовым значением позволяет контролировать детализацию ответа на range‑запросы к кешированному содержимому. Если смещение превышает указанное значение, NGINX может отказаться от выполнения range‑запроса или обработать его иначе в зависимости от реализации модуля FastCGI и применяемой стратегии кэширования. Это особенно полезно в ситуациях, где критично минимизировать потребление пропускной способности, или для более эффективной выдачи ответов при работе с большими файлами, к которым часто обращаются по частям. Эту директиву можно применять в разных контекстах, включая http, server и location-блоки в файле конфигурации NGINX, что делает её гибкой для различных сценариев использования и настроек сервера.

Пример конфига

http {
    fastcgi_cache_path /var/cache/nginx/fastcgi_temp levels=1:2 keys_zone=my_cache:10m;
    server {
        location / {
            fastcgi_pass backend;
            fastcgi_cache my_cache;
            fastcgi_cache_max_range_offset 1048576;  # 1 MB
        }
    }
}

Установка слишком большого смещения может привести к ненужному использованию пропускной способности при частичном получении содержимого.

Если смещение не задано и поступает запрос диапазона с большим смещением, это может привести к тому, что NGINX отклонит запрос или вернет ошибку 416.

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

fastcgi_cache_use_stale Директива `fastcgi_cache_use_stale` управляет тем, выдаются ли устаревшие кешированные ответы в определённых сценариях, например, когда upstream server недоступен или когда запрос превышает время ожидания.
httpserverlocation
Синтаксисfastcgi_cache_use_stale error | timeout | invalid_header | updating;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_use_stale` позволяет NGINX выдавать устаревшие кешированные ответы в определённых условиях, улучшая пользовательский опыт и производительность за счёт сокращения простоев или задержек при проблемах с сервером. Эту директиву можно включать для различных сценариев, включая 'error', 'timeout', 'invalid_header' или 'updating'. Если запрос сталкивается с такими проблемами, вместо возврата ошибки NGINX может отдать последний успешно закешированный ответ. Такое поведение особенно полезно в конфигурациях с высокой доступностью, когда важно поддерживать вовлечённость пользователей, даже если серверы бэкенда испытывают временные проблемы. Эту директиву можно задавать в нескольких контекстах: `http`, `server` и `location`, что делает её гибкой для различных конфигураций. Каждый переданный аргумент должен указывать, в каких сценариях следует возвращать устаревшие данные. Если указано несколько условий, устаревший контент будет выдан, если выполнено любое из них. Директива работает совместно с директивой `fastcgi_cache` и фактически повышает устойчивость механизма кэширования, смягчая влияние сбоев upstream или медленных ответов на опыт клиента.

Пример конфига

location /api {
    fastcgi_pass backend;
    fastcgi_cache my_cache;
    fastcgi_cache_use_stale error timeout;
}

С устаревшими ответами следует обращаться осторожно, чтобы пользователи не получали устаревшие или неверные данные.

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

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

fastcgi_cache_methods Директива fastcgi_cache_methods задаёт, какие HTTP-методы должны кэшироваться с помощью FastCGI.
httpserverlocation
Синтаксисfastcgi_cache_methods GET | HEAD | POST | ...;
По умолчаниюGET
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива fastcgi_cache_methods используется в конфигурации NGINX, чтобы задавать, какие HTTP-методы (например, GET или POST) будут кэшироваться при использовании FastCGI. По умолчанию NGINX кэширует только ответы на GET-запросы, что подходит для страниц, которые редко меняются и могут обслуживаться напрямую из кэша. Однако в некоторых случаях приложения могут возвращать на POST-запросы ответы, которые выгодно кэшировать для повышения производительности и снижения нагрузки на бэкенд-сервер. Эта директива позволяет администраторам настроить поведение кэширования в соответствии с потребностями приложения. Директива принимает в качестве параметра один или несколько HTTP-методов. Например, указание "GET POST" позволяет кэшировать как GET, так и POST-запросы. Важно учитывать природу запроса и связанного с ним ответа: не все POST-запросы следует кэшировать, так как они часто приводят к изменению состояния. Неправильное кэширование таких запросов может привести к некорректной работе приложения или к тому, что пользователям будет выдаваться устаревший контент. При применении этой директивы её можно размещать в контексте http, server или location, что обеспечивает гибкость конфигурации кэширования в зависимости от требуемой степени детализации управления. Если указанные методы не соответствуют ожидаемому поведению вашего приложения, это может непреднамеренно привести к узким местам в производительности или к сценариям некорректного кэширования.

Пример конфига

location ~ \.php$ {
    fastcgi_pass   backend;
    fastcgi_cache  my_cache;
    fastcgi_cache_methods GET POST;
}

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

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

Убедитесь, что бэкенд корректно обрабатывает кэшированные ответы на POST. При необходимости используйте отдельные ключи кэша.

fastcgi_cache_lock Директива 'fastcgi_cache_lock' контролирует поведение блокировки при операциях кэширования FastCGI, чтобы предотвратить одновременные запросы, приводящие к перегрузке при генерации кэша.
httpserverlocation
Синтаксисfastcgi_cache_lock on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_cache_lock' может использоваться для предотвращения одновременной генерации одинаковых ответов FastCGI несколькими запросами. При включении, если два или более запросов обращаются к одному и тому же кэшируемому ресурсу, только первый запрос будет продолжен для генерации upstream-ответа. Последующие запросы будут поставлены в очередь до тех пор, пока ответ не будет сгенерирован и помещён в кэш, после чего они смогут отдавать кэшированный ответ вместо отправки множества запросов к upstream. Директива принимает флаг ('on' или 'off'). При установке в 'on' NGINX применяет механизм блокировки, позволяя только одному запросу генерировать ответ, пока остальные ждут. Установка в 'off' отключает это поведение, в результате чего все запросы к одному и тому же ресурсу могут одновременно генерировать новые upstream-запросы, что может привести к повышенной нагрузке и проблемам с производительностью в условиях высокого трафика. Важно отметить, что использование 'fastcgi_cache_lock' может повысить эффективность в сценариях, где вероятны случаи одновременной генерации кэша, но это должно совмещаться с подходящей стратегией кэширования, чтобы обеспечить оптимальную производительность при максимальном использовании кэша.

Пример конфига

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_cache my_cache;
    fastcgi_cache_lock on;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
}

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

Если 'fastcgi_cache_lock' включен, убедитесь, что настройки времени жизни кэша также настроены, иначе устаревшие ответы могут подаваться дольше, чем нужно.

fastcgi_cache_lock_timeout Устанавливает максимальное время ожидания получения блокировки в FastCGI cache.
httpserverlocation
Синтаксисfastcgi_cache_lock_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_lock_timeout` задаёт длительность, в течение которой запрос будет ожидать получения блокировки в FastCGI cache, если другой запрос уже обрабатывает эту запись кэша. Это особенно полезно в сценариях, когда запросы могут сталкиваться при попытке сохранить одинаковое кэшированное содержимое. Если время ожидания истечёт до того, как блокировка будет получена, запрос на блокировку терпит неудачу, что предотвращает длительные задержки для параллельных запросов и позволяет им продолжить выполнение вместо бесконечного ожидания. Эта директива может помочь улучшить время отклика вашего приложения, особенно при высокой нагрузке. Установив `fastcgi_cache_lock_timeout`, вы можете точно контролировать, сколько времени один запрос будет ждать другой, уменьшая задержку и улучшая общий пользовательский опыт в периоды пикового трафика. Директива должна задаваться в соответствующем контексте, таком как `http`, `server` или `location`, и принимает один аргумент — длительность тайм-аута. Когда настроенный тайм-аут достигается, последующие запросы могут получить альтернативный ответ или обрабатываться иначе в зависимости от внутренней логики приложения. Поэтому при выборе значения для этой директивы следует тщательно взвесить поведение блокировок и общую производительность.

Пример конфига

location /api {
    fastcgi_pass backend;
    fastcgi_cache my_cache;
    fastcgi_cache_lock on;
    fastcgi_cache_lock_timeout 10s;
}

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

Пользователям необходимо убедиться, что директива `fastcgi_cache_lock` включена, чтобы эффективно использовать `fastcgi_cache_lock_timeout`.

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

fastcgi_cache_lock_age Директива `fastcgi_cache_lock_age` задаёт время ожидания доступности блокировки кэша `FastCGI` перед повторной попыткой запроса.
httpserverlocation
Синтаксисfastcgi_cache_lock_age number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_lock_age` в HTTP-модуле NGINX задаёт максимальное время в секундах, которое запрос должен ожидать доступности блокировки кэша `FastCGI`, если кэш уже заблокирован другим запросом. Когда поступает несколько запросов к одному ресурсу и кэш заблокирован из-за обработки того же содержимого другим запросом, эта директива предотвращает бесконечное ожидание запросов. Вместо этого заданный период ожидания (устанавливаемый этой директивой) позволяет повторить запросы после определённого времени. Это помогает оптимизировать время ответа для пользователей и улучшает общую производительность сервера, избегая чрезмерных задержек в ожидании. Параметр для `fastcgi_cache_lock_age` задаётся в секундах и принимает целочисленное значение. Например, если эта директива установлена в 10, любой запрос, столкнувшийся с блокировкой кэша, будет ждать максимум 10 секунд, прежде чем отказаться от получения блокировки и отправить новый запрос. Слишком большие значения могут привести к задержкам в ответах пользователям, тогда как слишком маленькие — к ненужным промахам кэша. Администраторам следует подбирать значение параметра `fastcgi_cache_lock_age`, исходя из ожидаемых шаблонов доступа к кэшу для их приложений и допустимой задержки для конечных пользователей.

Пример конфига

location /app {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_cache my_cache;
    fastcgi_cache_lock on;
    fastcgi_cache_lock_age 10;
}

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

Если `fastcgi_cache_lock` не включён, `fastcgi_cache_lock_age` не будет иметь эффекта.

fastcgi_cache_revalidate Директива 'fastcgi_cache_revalidate' управляет тем, будет ли NGINX повторно проверять кешированные ответы FastCGI.
httpserverlocation
Синтаксисfastcgi_cache_revalidate on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_cache_revalidate' в NGINX позволяет более тонко контролировать повторную проверку кешированных ответов от FastCGI-бэкендов. Когда эта директива установлена в 'on', NGINX будет отправлять условные запросы с использованием заголовков 'If-Modified-Since' или 'If-None-Match' на основе кешированного содержимого. Это гарантирует, что если содержимое изменилось на бэкенде, клиент получит обновлённый ответ соответственно. Такое поведение помогает поддерживать кешированное содержимое актуальным, одновременно минимизируя ненужные запросы к бэкенду, что может улучшить производительность в средах с динамическим содержимым, которое не меняется часто. В противоположность этому, когда значение установлено в 'off', NGINX будет отдавать кешированные ответы без запроса к бэкенду на предмет обновлений, что может привести к отдаче устаревшего содержимого, если исходные данные изменились. Директива особенно полезна при работе с содержимым, частота обновления которого непредсказуема, так как она находит баланс между обслуживанием из кеша и обеспечением того, чтобы пользователи получали наиболее свежую версию ответа, не теряя преимуществ эффективности кеширования.

Пример конфига

http {
    fastcgi_cache_path /var/cache/nginx/fastcgi_tmp levels=1:2 keys_zone=my_cache:10m;

    server {
        location /fastcgi {
            include fastcgi_params;
            fastcgi_pass backend;
            fastcgi_cache my_cache;
            fastcgi_cache_revalidate on;
        }
    }
}

Убедитесь, что ваше backend FastCGI-приложение поддерживает conditional GET-запросы, чтобы эта директива была эффективной.

Использование этой директивы с очень часто изменяющимся контентом может привести к чрезмерному количеству backend-запросов, нивелируя преимущества кэширования.

fastcgi_cache_background_update Директива `fastcgi_cache_background_update` позволяет выполнять обновления кэша в фоновом режиме, пока текущий ответ обслуживается.
httpserverlocation
Синтаксисfastcgi_cache_background_update on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_cache_background_update` — это логический параметр, который определяет, будет ли NGINX обновлять закэшированный FastCGI-контент в фоновом режиме, если контент при доступе устарел. При значении `on` это позволяет одновременно отдавать существующий закэшированный ответ, в то время как выполняется новый запрос для получения обновлённого содержимого, что особенно полезно при высокой нагрузке, когда ожидание обновления кэша может приводить к задержкам и увеличению времени загрузки. Это означает, что пользователи продолжат получать кэшированную версию, пока потенциально продолжительный запрос к бэкенду обрабатывается в фоне. Напротив, если директива установлена в `off` (по умолчанию), пользователи, запрашивающие устаревшие кэшированные ответы, будут вынуждены ждать выполнения нового запроса прежде чем получить обновлённую версию. Это менее эффективно с точки зрения пользовательского опыта и использования ресурсов. Директива может применяться в контекстах `http`, `server` или `location`, что даёт гибкость в управлении поведением кэша в зависимости от потребностей приложения или конкретных маршрутов. Правильная настройка этой директивы может значительно повысить отзывчивость и скорость веб-приложений, сильно зависящих от FastCGI-кэширования, так как она минимизирует нагрузку и время ожидания при обновлении кэша. Однако необходимо тщательно продумать стратегию инвалидизации кэша, чтобы не допустить длительной выдачи устаревшего содержимого, особенно в динамических приложениях с частыми изменениями данных.

Пример конфига

location /api {
    fastcgi_pass backend;
    fastcgi_cache my_cache;
    fastcgi_cache_background_update on;
}

Убедитесь, что серверная часть может эффективно обрабатывать одновременные запросы, чтобы избежать проблем с производительностью.

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

fastcgi_temp_path Директива `fastcgi_temp_path` задаёт путь к временным файлам, используемым обработчиком FastCGI в NGINX.
httpserverlocation
Синтаксисfastcgi_temp_path path1 [path2 [path3 [path4]]];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_temp_path` определяет путь к файлам, в которых NGINX хранит временные данные, создаваемые в процессе обработки FastCGI. Это особенно полезно при работе с большими ответами или когда вывод от FastCGI буферизуется. Указанный путь должен быть доступен для записи рабочими процессами NGINX. Можно указать до четырёх каталогов, разделённых пробелами; NGINX будет использовать первый доступный каталог для хранения временных файлов, что позволяет распределять нагрузку по нескольким дискам при необходимости. Когда обрабатывается запрос FastCGI и ответ превышает определённые пределы буферов, NGINX записывает данные в указанные временные файлы до тех пор, пока весь ответ не будет обработан, прежде чем отправить его клиенту. Это повышает общую производительность, позволяя NGINX эффективно управлять использованием памяти и предотвращая сбои из-за чрезмерного потребления памяти. Структуру каталогов, возможно, потребуется создать заранее, и важно установить соответствующие права доступа, чтобы избежать проблем с доступом.

Пример конфига

fastcgi_temp_path /var/tmp/nginx/fastcgi_temp;

Убедитесь, что указанный путь существует и доступен для записи рабочими процессами NGINX, чтобы избежать ошибок.

Если используется несколько путей, учтите, что их порядок имеет значение; NGINX будет проверять пути последовательно, пока не найдёт место, доступное для записи.

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

fastcgi_max_temp_file_size Директива 'fastcgi_max_temp_file_size' задаёт максимально допустимый размер временных файлов для ответов FastCGI.
httpserverlocation
Синтаксисfastcgi_max_temp_file_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_max_temp_file_size' задаёт максимальный размер, который могут достигать временные файлы, создаваемые NGINX для буферизации данных ответов FastCGI. Если размер ответа превышает этот предел, NGINX вернёт ошибку 502 Bad Gateway и отклонит запрос. Это особенно полезно для управления ресурсами сервера и предотвращения того, чтобы чрезмерно большие ответы FastCGI не занимали всё доступное дисковое пространство. Эта директива может применяться в нескольких контекстах, включая 'http', 'server' и 'location', что обеспечивает гибкость конфигурации в зависимости от сценария использования. Значение задаётся в байтах, и следует с осторожностью выбирать соответствующий размер, исходя из ожидаемого объёма ответов FastCGI. Слишком маленький размер может привести к увеличению числа ошибок, тогда как слишком большой — к чрезмерному использованию дискового пространства, особенно при высокой нагрузке. При применении директивы необходимо учитывать характеристики рабочей нагрузки вашего приложения и доступное дисковое пространство. Может потребоваться мониторинг и корректировка этой настройки по мере изменения размеров ответов со временем или в зависимости от закономерностей пользовательской нагрузки, чтобы приложение оставалось производительным и устойчивым к неожиданным всплескам трафика.

Пример конфига

location /cgi-bin {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_max_temp_file_size 16m;
}

Установка слишком низкого значения может привести к частым ошибкам 502, если ответы FastCGI превышают лимит.

Не все приложения FastCGI соблюдают ограничения на временные файлы, что может привести к непредвиденному поведению.

Убедитесь, что на сервере достаточно свободного места на диске для временных файлов при использовании больших лимитов.

fastcgi_temp_file_write_size Директива `fastcgi_temp_file_write_size` настраивает максимальный размер временных файлов, которые могут быть записаны ответами FastCGI.
httpserverlocation
Синтаксисfastcgi_temp_file_write_size size;
По умолчанию8k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_temp_file_write_size` в NGINX используется для определения максимального размера временных файлов, которые модуль FastCGI может записывать при обработке запросов. Эта директива особенно полезна при работе с большими ответами, поскольку помогает эффективно управлять использованием памяти и дискового пространства, снижая риск перегрузки сервера. Установив эту директиву, администраторы могут увеличить или уменьшить допустимый размер в зависимости от ожидаемых размеров ответов FastCGI. Директива принимает один аргумент — значение размера (байт). Если размер ответа превышает указанный предел, ответ будет записан во временный файл, а не напрямую в память. Это уменьшает всплески использования памяти и позволяет серверу эффективнее обрабатывать больше запросов, при необходимости используя диск. Эту директиву можно задавать в любом контексте: http, server или location, что делает её гибкой для разных конфигураций. Однако при настройке важно учитывать доступное дисковое пространство и влияние записи на диск на производительность. Следует выбрать подходящее значение, исходя из обычной нагрузки приложения и характеристик ответов FastCGI.

Пример конфига

http {
    fastcgi_temp_file_write_size 16k;
}

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

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

fastcgi_next_upstream Директива 'fastcgi_next_upstream' в NGINX определяет, в каких случаях запрос FastCGI должен быть передан на следующий сервер в upstream-блоке FastCGI.
httpserverlocation
Синтаксисfastcgi_next_upstream error timeout invalid_header http_500;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_next_upstream' позволяет указать, при каких условиях запрос к серверу FastCGI должен быть повторно отправлен на следующий сервер из настроенной группы upstream. Эта директива может принимать один или несколько параметров, которые соответствуют конкретным сценариям, таким как тайм-ауты, не-2xx ответы и ошибки соединения. Включив эту директиву, NGINX способен более корректно обрабатывать потенциальные ошибки сервера, пытаясь выполнить запрос на альтернативном сервере, что повышает устойчивость и надёжность веб-приложений. Например, типичный сценарий использования предполагает развертывание нескольких серверов FastCGI для обработки PHP. Включив директиву 'fastcgi_next_upstream' с параметрами, такими как 'error' и 'timeout', NGINX попытается повторно отправить неудачный запрос на другой настроенный сервер FastCGI, если исходный сервер столкнулся с ошибкой или не отвечает в течение определённого времени. Эта функция особенно полезна в средах с балансировкой нагрузки, где критично поддержание высокой доступности. Полный набор параметров включает опции, такие как 'error', 'timeout', 'invalid_header', 'http_500' и другие, что позволяет тонко настроить, при каких ошибочных условиях должна срабатывать повторная отправка. Возможность повторных попыток на основе ошибок помогает смягчать последствия сбоев отдельных серверов, обеспечивая бесшовный опыт для пользователей и поддерживая высокую доступность. Однако следует внимательно настроить эту директиву, чтобы не создавать дополнительную нагрузку при возникновении ошибок.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_next_upstream error timeout invalid_header;
    include fastcgi_params;
}

Использование этой директивы с слишком большим количеством параметров может привести к непредвиденному поведению, поэтому важно понимать, что означает каждый параметр.

Убедитесь, что следующий upstream-сервер правильно настроен для обработки запросов; в противном случае он тоже может выйти из строя, что приведёт к циклу повторных попыток.

Чрезмерное использование может привести к снижению производительности, если upstream-серверы часто недоступны.

fastcgi_next_upstream_tries Директива `fastcgi_next_upstream_tries` задаёт, сколько раз NGINX будет повторно обращаться к следующему upstream‑серверу при сбое запроса FastCGI.
httpserverlocation
Синтаксисfastcgi_next_upstream_tries number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_next_upstream_tries` определяет, сколько upstream‑серверов следует опробовать в случае неудачного запроса FastCGI. Установив эту директиву, NGINX позволяет распределять нагрузку между бэкенд‑серверами FastCGI, пытаясь повторно отправить запрос на указанное количество других серверов, если первоначальный сервер отказал. Это особенно полезно в сценариях, где критична высокая доступность и необходимо обеспечить работу приложения даже при недоступности одного или нескольких upstream‑серверов. При указании значения этой директивы его можно задать в контекстах http, server или location, что позволяет тонко настроить поведение в зависимости от потребностей приложения. Например, можно задать большее значение в location, более подверженном сбоям, и более низкое — в более стабильных частях приложения. Указанное значение должно быть положительным целым числом; при значении 0 функция фактически отключается, и NGINX не будет пытаться повторно обращаться к другим upstream‑серверам. Стоит отметить, что эта директива взаимодействует с другими, связанными с FastCGI, директивами, в частности с `fastcgi_next_upstream`, которая определяет условия, при которых будут происходить повторы. Совместное использование обеих директив обеспечивает комплексный контроль над тем, как NGINX обрабатывает сбои бэкенда и переключение на резервный сервер.

Пример конфига

location /api {
    fastcgi_pass backend;
    fastcgi_next_upstream_tries 3;
}

Установка значения в 0 полностью отключает механизм повторных попыток, что может привести к более частым ошибкам, если первичный FastCGI‑сервер недоступен.

Убедитесь, что FastCGI‑серверы способны обрабатывать повторные попытки; в противном случае та же ошибка может повториться при следующей попытке.

fastcgi_next_upstream_timeout Устанавливает таймаут для последующих upstream-запросов FastCGI в NGINX.
httpserverlocation
Синтаксисfastcgi_next_upstream_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_next_upstream_timeout` задаёт продолжительность таймаута для последующих запросов FastCGI, когда первоначальный запрос завершается неудачей. Эта директива даёт тонкий контроль над тем, сколько времени сервер будет ждать, прежде чем отказаться от FastCGI upstream после неудачной первой попытки. Указание этого таймаута может быть критически важным для приложений, для которых время отклика имеет значение, и где сервер может повторно отправлять запросы на другой бэкенд для получения более быстрого ответа. Таймаут можно задавать в разных контекстах, включая http, server и location-блоки, что обеспечивает гибкость в зависимости от потребностей конфигурации. Директива принимает значение времени в качестве аргумента, обычно в секундах. Если указанный таймаут истекает без получения ответа от upstream-сервера FastCGI, NGINX прерывает запрос и аналогичным образом переходит к следующему upstream. Такое поведение гарантирует, что серверы остаются отзывчивыми и могут корректно обрабатывать сбои приложений FastCGI. Иногда разработчики могут захотеть скорректировать этот таймаут в зависимости от производительности приложения и необходимых стратегий переключения, чтобы обеспечить более высокую доступность и снизить задержки при обслуживании запросов.

Пример конфига

location /api {
    fastcgi_pass backend;
    fastcgi_next_upstream_timeout 10s;
    include fastcgi_params;
}

Убедитесь, что timeout установлен на разумное значение, чтобы избежать чрезмерной задержки при повторных попытках.

Использование слишком короткого timeout может привести к частым ошибкам при выполнении запросов, если upstream-сервер медленно отвечает.

fastcgi_param Задает параметры для запросов FastCGI в NGINX.
httpserverlocation
Синтаксисfastcgi_param name value; [value];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_param` используется в конфигурации NGINX для установки переменных окружения, которые передаются серверам FastCGI. По умолчанию она применяется в контекстах, таких как `http`, `server` и `location`, что обеспечивает гибкость при настройке поведения FastCGI для разных маршрутов приложения. Директива принимает два или три параметра: первый параметр — имя переменной, второй — её значение, а опционально третий параметр может указывать, должно ли значение браться из заголовка запроса. Когда директива `fastcgi_param` используется, она по сути передаёт информацию, относящуюся к обработке запроса FastCGI. Например, можно задать параметры, такие как `SCRIPT_FILENAME`, который указывает скрипт для выполнения на сервере FastCGI. Эта директива гарантирует, что необходимые переменные доступны приложению FastCGI для корректного ответа на запрос пользователя. Она особенно полезна, когда требуется явно определить, как определённые переменные должны обрабатываться логикой приложения FastCGI. Важно отметить, что `fastcgi_param` перезаписывает любые параметры с тем же именем, уже заданные в конфигурации, что позволяет точно контролировать окружение, передаваемое обработчику FastCGI, и тем самым избегать конфликтов или непредвиденного поведения значений переменных.

Пример конфига

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Убедитесь, что имена переменных корректны и указаны верно, так как опечатки могут привести к непредсказуемому поведению.

Будьте осторожны при перезаписи существующих параметров; при необходимости явно задавайте нужные значения.

fastcgi_pass_header Директива 'fastcgi_pass_header' указывает, какие заголовки должны быть переданы от FastCGI сервера в ответ клиенту.
httpserverlocation
Синтаксисfastcgi_pass_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_pass_header' позволяет определить, какие HTTP-заголовки, полученные от FastCGI сервера, должны быть включены в ответ, отправляемый клиенту. Эта директива может быть задана несколько раз в одном и том же контексте, что позволяет передавать несколько заголовков. Когда запрос обрабатывается и FastCGI сервер возвращает заголовки, NGINX фильтрует эти заголовки на основе конфигурации, заданной с помощью 'fastcgi_pass_header'. В итоговый ответ клиенту будут включены только те заголовки, которые соответствуют указанным в этой директиве; все остальные заголовки будут проигнорированы. Это особенно полезно для контроля того, какая метаинформация или директивы возвращаются клиенту, повышая безопасность или позволяя сосредоточиться только на релевантных данных. Директива 'fastcgi_pass_header' может быть определена в контекстах 'http', 'server' и 'location', что делает ее гибкой для различных конфигураций. С помощью этой директивы администраторы могут гарантировать, что чувствительные заголовки не будут раскрыты, или что нерелевантные заголовки не будут засорять ответы. Важно отметить, что эта директива используется совместно с конфигурацией FastCGI и требует директивы 'fastcgi_pass' для направления трафика на FastCGI сервер. Важный аспект ее настройки заключается в том, что имена заголовков нечувствительны к регистру, тогда как значения могут быть чувствительны к регистру в зависимости от приложения. Поэтому при указании заголовков для передачи убедитесь, что точное написание и регистр значений остаются последовательными для корректной работы.

Пример конфига

location /some_location {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_pass_header X-My-Custom-Header;
}

Убедитесь, что заголовки, которые вы хотите передать, действительно присутствуют в ответе FastCGI; в противном случае ничего отправлено не будет.

Эта директива не действует, если сервер FastCGI неправильно настроен и не отправляет ожидаемые заголовки.

Заголовки, указанные в этой директиве, должны быть написаны правильно и совпадать по регистру с тем, как они отправляются сервером FastCGI.

fastcgi_hide_header Директива 'fastcgi_hide_header' управляет тем, какие HTTP-заголовки из ответа FastCGI скрываются от клиентов.
httpserverlocation
Синтаксисfastcgi_hide_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_hide_header' используется в конфигурации NGINX для указания, какие заголовки из ответа сервера FastCGI не должны отправляться клиенту. Эта директива может предотвратить раскрытие отдельных заголовков по причинам безопасности или эксплуатации, тем самым помогая поддерживать чистый интерфейс, скрывая от клиентов ненужную или конфиденциальную информацию. Она принимает один аргумент — имя HTTP-заголовка, который вы хотите скрыть. Например, указание 'fastcgi_hide_header X-Powered-By;' предотвратит возврат заголовка 'X-Powered-By' клиенту, даже если приложение FastCGI включает его в свой ответ. Эта директива может размещаться в различных контекстах, включая 'http', 'server' и 'location', что обеспечивает гибкость конфигурации в зависимости от того, где вы хотите применить подавление заголовков. Когда указанный заголовок присутствует в ответе FastCGI, NGINX просто не будет включать его в итоговый HTTP-ответ, отправляемый клиенту, тем самым не раскрывая потенциально конфиденциальную информацию. Эта функция особенно полезна при работе с приложениями, которые раскрывают информацию, которую можно использовать для атак по снятию отпечатков, либо при настройке приложений с учётом специфических требований безопасности.

Пример конфига

location /api {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_hide_header X-Powered-By;
}

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

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

Директива не повлияет на заголовки, которые модифицируются или генерируются самим NGINX; она применяется только к заголовкам, возвращаемым FastCGI-бэкендом.

fastcgi_ignore_headers Директива `fastcgi_ignore_headers` настраивает NGINX на игнорирование определённых HTTP-заголовков, возвращаемых ответами FastCGI.
httpserverlocation
Синтаксисfastcgi_ignore_headers header_name [header_name ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_ignore_headers` используется для указания, какие заголовки из ответов FastCGI следует игнорировать NGINX при обработке ответа. По умолчанию NGINX возвращает клиенту все заголовки ответа FastCGI. Однако в некоторых ситуациях вы можете захотеть подавить отправку отдельных заголовков клиентам, например некоторых заголовков, связанных с безопасностью, или заголовков, изменяющих поведение кэширования. Эта директива принимает одно или несколько имён заголовков в качестве аргументов. Когда указанный в директиве заголовок присутствует в ответе FastCGI, NGINX полностью его игнорирует и не пересылает клиенту. Это особенно полезно для защиты приложения и управления тем, как обрабатываются определённые ответы, без изменения поведения вашего upstream-приложения. Например, игнорирование `X-Powered-By` может помочь предотвратить раскрытие используемой серверной технологии. Директиву `fastcgi_ignore_headers` можно использовать в контекстах `http`, `server` и `location`, что обеспечивает гибкость в разных конфигурациях. Вы можете указать любую комбинацию заголовков для игнорирования, что даёт тонкий контроль над тем, какая информация раскрывается клиентам.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_ignore_headers X-Powered-By;
    include fastcgi_params;
}

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

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

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

fastcgi_catch_stderr Директива 'fastcgi_catch_stderr' управляет тем, будет ли NGINX перехватывать вывод стандартного потока ошибок от приложений FastCGI.
httpserverlocation
Синтаксисfastcgi_catch_stderr on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'fastcgi_catch_stderr' используется в контекстах 'http', 'server' и 'location' для управления обработкой сообщений об ошибках, создаваемых приложениями FastCGI. Когда она включена, любые сообщения, отправленные приложением FastCGI в стандартный поток ошибок, будут перехватываться и записываться NGINX, что облегчает отладку и предоставляет видимость проблем приложения непосредственно в журнале ошибок NGINX. По умолчанию эта директива установлена в 'off', то есть NGINX перехватывает только стандартный вывод, если это явно не включено. Эта директива принимает один аргумент: 'on' или 'off'. Установив значение 'on', разработчик может получить ценную информацию об ошибках, которая может быть критически важна для диагностики проблем в приложениях FastCGI, особенно в производственных средах, где просмотр этих логов может заранее указать на возможные ошибки в выполнении кода. Важно учитывать, что чрезмерное логирование может привести к ухудшению производительности, если приложение генерирует много сообщений об ошибках, поэтому рекомендуется аккуратно управлять уровнями логирования. Правильное использование 'fastcgi_catch_stderr' повышает общую сопровождаемость приложений FastCGI, централизуя логирование ошибок через NGINX и предоставляя разработчикам ясное представление о ошибках времени выполнения, которые могут не проявляться в других местах. Тем не менее при использовании этой директивы следует учитывать компромисс с точки зрения производительности при повышенных уровнях детализации логов, особенно при высоких нагрузках.

Пример конфига

location /api {
    fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    fastcgi_catch_stderr on;
}

Убедитесь, что ваше приложение FastCGI настроено на вывод ошибок в stderr; в противном случае эта директива не будет иметь эффекта.

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

fastcgi_keep_conn Директива `fastcgi_keep_conn` управляет тем, оставлять ли соединение с FastCGI-сервером открытым после получения ответа.
httpserverlocation
Синтаксисfastcgi_keep_conn on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `fastcgi_keep_conn` в NGINX, применимая в контекстах http, server и location, представляет собой флаг, определяющий, поддерживать ли постоянное соединение между NGINX и FastCGI-сервером после завершения запроса. По умолчанию после обработки запроса соединение с FastCGI-сервером закрывается. Однако установка этой директивы в 'on' будет поддерживать соединение открытым для последующих запросов, снижая задержку для следующих запросов и потенциально улучшая производительность в средах с высокой нагрузкой, где к одному и тому же FastCGI-серверу отправляется несколько запросов. Когда `fastcgi_keep_conn` включена, соединения переиспользуются вместо постоянного открытия и закрытия, что экономит ресурсы и повышает пропускную способность. Это особенно полезно для приложений, размещённых в конфигурациях, где часто идут последовательные запросы, например при генерации динамического контента в PHP или аналогичных технологиях. Тем не менее, удержание открытых соединений может занять ресурсы сервера, поэтому эту опцию следует использовать осторожно в зависимости от поведения приложения и общей способности сервера обрабатывать нагрузку.

Пример конфига

location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_keep_conn on;
}

Включение `fastcgi_keep_conn` может привести к исчерпанию ресурсов, если слишком много соединений остаются открытыми и не используются.

Если у сервера FastCGI есть ограничение на число одновременных соединений, убедитесь, что включение этой директивы не превысит это ограничение.

flv Директива 'flv' включает или отключает обработку FLV-видеофайлов для потоковой передачи в NGINX.
location
Синтаксисflv;
По умолчаниюoff
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива `flv` используется в конфигурации NGINX в контексте location block для указания того, следует ли обрабатывать файлы FLV (Flash Video) при отдаче контента. Когда она включена, NGINX настраивается для корректной обработки запросов к файлам FLV, обеспечивая потоковую передачу видео с правильными заголовками и поведением, ожидаемым FLV-плеерами. Эта директива не принимает аргументов; достаточно просто включить её, чтобы активировать функцию обработки FLV в данном контексте. Реализация в исходном коде NGINX обеспечивает применение специфических заголовков ответа и правил буферизации к файлам FLV для обеспечения плавного воспроизведения. Директива может быть помещена в location block, где вы хотите отдавать контент FLV. Если она используется в server block без конкретного location, директива будет проигнорирована, если явно не заданы местоположения для файлов FLV. При отдаче файлов с правильным MIME type использование директивы `flv` гарантирует, что NGINX корректно обработает запросы и сможет оптимизировать работу для улучшения потоковой передачи. Важно отметить, что эта директива в значительной степени устарела, поскольку использование Flash заметно сократилось, и для потокового видео предпочитаются современные альтернативы.

Пример конфига

location /videos {
    flv;
    root /var/www/videos;
}

Убедитесь, что вы правильно отдаёте файлы `.flv` с корректным MIME type; в противном случае поток может не воспроизводиться корректно.

Проверьте, что location block правильно определён, чтобы эта directive вступила в силу.

geo Директива `geo` в NGINX определяет переменную, которая может быть установлена на основе IP-адресов клиентов или других географических местоположений.
http
Синтаксисgeo $variable { default value; range1 value1; range2 value2; ... }
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `geo` используется для создания сопоставления IP-адресов клиентов с переменными, которые могут применяться в различных конфигурациях NGINX. Она особенно полезна при настройке контроля доступа и управлении маршрутизацией запросов на основе географического положения. Эта директива может задавать как IPv4, так и IPv6 адреса и может располагаться внутри контекста `http`. Каждое правило сопоставления состоит из адреса (или диапазона) и необязательной переменной, которая либо содержит значение (например, '1' или '0' для разрешения или запрета доступа), либо устанавливается в 'default' для не совпадающих адресов. Внутри блока `geo` можно указывать отдельные IP-адреса, записи в нотации CIDR или географические диапазоны. NGINX будет проверять IP-адрес клиента по этим правилам в том порядке, в котором они определены. Если найдено соответствие, NGINX установит указанную переменную соответственно. Если адрес не совпал ни с одним правилом, будет применено значение, заданное директивой `default`. Это делает `geo` мощным инструментом для создания динамических конфигураций, реагирующих на разные IP-адреса клиентов, будь то для распределения нагрузки, контроля доступа или настройки приложений. Важно понимать, что директива `geo` должна быть определена в блоке `http`, и она не принимает другие связанные директивы непосредственно внутри себя, что может вызывать путаницу в сложных конфигурациях NGINX. Кроме того, эта директива работает на уровне HTTP и в основном зависит от сетевых деталей входящих запросов, поэтому её следует правильно использовать, исходя из ожидаемых характеристик клиентских запросов.

Пример конфига

geo $remote_addr {
    default 0;
    192.168.1.0/24 1;
    10.0.0.0/8 2;
}

Убедитесь, что блок `geo` находится внутри контекста `http`; размещение в другом месте приведёт к ошибкам.

При использовании нотации CIDR убедитесь, что синтаксис корректен, чтобы избежать непреднамеренных совпадений.

Помните, что порядок определений имеет значение: при первом совпадении будет установлено значение переменной.

geoip_country Директива `geoip_country` используется для указания местоположения базы данных GeoIP, чтобы включить геолокацию по IP в NGINX.
http
Синтаксисgeoip_country path | off;
По умолчаниюoff
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `geoip_country` позволяет указать NGINX путь к базе данных GeoIP, необходимой для выполнения геолокации на основе IP-адресов клиентов. При настройке NGINX может присваивать запросам географическую информацию, такую как страна происхождения. Эта информация может впоследствии использоваться для контроля доступа или персонализации содержимого, обеспечивая адаптацию ответов сервера в зависимости от местоположения пользователей. Директива принимает один или два аргумента: путь к файлу базы данных GeoIP и необязательную опцию 'country'. Если она указана, это включает или отключает определённые функции поиска по странам или изменяет поведение при использовании базы данных. Эта функциональность важна, когда организациям необходимо применять политики по регионам, таргетировать рекламу или отдавать локализованный контент, поскольку она помогает точно определять источник входящих запросов. Интеграция с модулем GeoIP позволяет серверу динамически определять страну пользователя, что даёт возможность привязывать правила к конкретным географическим регионам. Учтите, что это требует внешней базы данных, которую необходимо регулярно обновлять для поддержания точности соответствий геолокации.

Пример конфига

geoip_country /path/to/geoip.dat;

Убедитесь, что файл базы данных GeoIP доступен рабочему процессу NGINX, иначе он не будет загружен.

Директива должна быть задана в контексте http и не допускается в контекстах server или location.

Если путь к базе данных GeoIP неверен или файл отсутствует, NGINX запишет ошибку в журнал и переопределит директиву как 'off'.

geoip_org Директива `geoip_org` позволяет NGINX указывать имя организации, связанной с IP-адресом, к которому осуществляется доступ.
http
Синтаксисgeoip_org [];
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `geoip_org` является частью модуля NGINX HTTP Core и облегчает управление доступом за счёт использования данных GeoIP для определения организации, связанной с конкретным IP-адресом. Используя базу данных GeoIP, NGINX может динамически предоставлять или ограничивать доступ на основании организационной принадлежности клиента, запрашивающего ресурсы. Эта директива позволяет серверу принимать меры в зависимости от информации об организации, полученной из GeoIP, что даёт администраторам возможность реализовывать пользовательскую маршрутизацию, логирование или политики доступа, основанные на субъекте, выполняющем запрос. Директива может принимать от одного до двух аргументов: либо одну строку, представляющую имя базы данных GeoIP, либо конкретное имя организации для сопоставления с входящими запросами. Наличие этих параметров обеспечивает гибкую настройку, позволяя администраторам адаптировать обработку трафика в соответствии с организационными критериями, подразумеваемыми IP-адресами. Если указан только имя организации, NGINX будет использовать его во внутреннем поиске для идентификации соединений, тогда как необязательный аргумент пути к DB облегчает привязку к пользовательским или сторонним базам данных GeoIP. В целом, `geoip_org` играет ключевую роль в расширении возможностей контроля доступа NGINX, используя технологию GeoIP для связывания запросов с организационными данными и позволяя принимать более взвешенные решения при управлении трафиком.

Пример конфига

geoip_org /path/to/geoip/db GeoIP Org Name;

Убедитесь, что база данных GeoIP установлена правильно и указанный путь верен.

Использование устаревшей или повреждённой базы данных GeoIP может привести к неправильной идентификации организации.

Директива требует корректных прав доступа к файлу базы данных для правильной работы.

geoip_city Директива `geoip_city` позволяет настроить запросы геолокации по IP-адресу для получения информации на уровне города.
http
Синтаксисgeoip_city /path/to/GeoIPCity.dat;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `geoip_city` разработана для расширения возможностей HTTP-сервера NGINX по принятию географических решений на основе IP-адреса клиента путём обращения к базе данных GeoIP. Указывая путь к базе данных GeoIP city, эта директива позволяет NGINX определять и задавать переменные на основе географического положения входящих запросов. Когда директива `geoip_city` используется в контексте `http`, она принимает один или два аргумента: путь к файлу базы данных GeoIP city и, опционально, дополнительный аргумент для указания флага обработки некорректных IP-адресов. Директива обрабатывает входящие запросы, сопоставляет IP клиента с записями в указанной базе данных GeoIP и делает доступными данные геолокации на уровне города (например, название города, регион и страна) для использования в конфигурации. Эта геоинформация затем может использоваться в правилах доступа, форматировании файлов журналов и даже для персонализации содержимого. Директива обычно полезна для приложений, которым требуется целевая доставка контента в зависимости от географического положения пользователя, таких как локализованная реклама или соблюдение местных регуляций. Важно поддерживать файл базы данных GeoIP в актуальном состоянии, так как соответствия IP→местоположение могут часто меняться. Некорректные или устаревшие данные могут привести к плохому пользовательскому опыту из-за неточностей в детализации геолокации.

Пример конфига

http {
    geoip_city /usr/share/GeoIP/GeoIPCity.dat;
    server {
        location / {
            if ($geoip_city) {
                add_header X-City $geoip_city;
            }
        }
    }
}

Убедитесь, что указанный файл базы данных GeoIP существует и доступен пользователю NGINX.

Использование устаревшей базы данных GeoIP может привести к неточным данным геолокации.

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

geoip_proxy Директива `geoip_proxy` используется для настройки модуля GeoIP для определения географического расположения IP-адресов на основе proxy protocol.
http
Синтаксисgeoip_proxy header_name;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `geoip_proxy` задаёт способ для NGINX использовать proxy protocol, чтобы получить исходный IP-адрес клиента, что позволяет повысить точность определения географического положения с помощью баз GeoIP. Это особенно полезно в средах, где запросы пересылаются от одного прокси-сервера к другому, поскольку адресация в запросе может не отражать реальное географическое местоположение клиента. При настройке NGINX будет читать исходный IP-адрес клиента из указанного заголовка, а не напрямую из клиентского соединения. Директива принимает один аргумент — имя заголовка, который следует проверять; обычно он содержит исходный адрес клиента (например, `X-Real-IP`). При использовании этой директивы крайне важно убедиться, что вышестоящие прокси корректно заполняют указанный заголовок допустимыми IP-адресами для точных запросов к базам GeoIP. Некорректная настройка может привести к записи неправильных географических данных в логах или к ошибкам при управлении доступом. Выполнение директивы происходит в контексте HTTP, что позволяет применять её глобально в server-блоках или в отдельных location-блоках. Заголовки корректно обрабатываются при входящих запросах, поэтому важно поддерживать единообразную конфигурацию на всех промежуточных прокси в развертывании.

Пример конфига

http {
    geoip_proxy X-Forwarded-For;
}

Убедитесь, что ваш upstream-прокси включает правильные заголовки, иначе NGINX может определить неверные IP-адреса.

Неправильная конфигурация может привести к уязвимостям в безопасности, поскольку некорректная обработка IP-адресов может подвергнуть ваше приложение атакам подмены.

Эта директива действительна только в том случае, если модуль GeoIP скомпилирован и включён в NGINX.

geoip_proxy_recursive Директива позволяет выполнять рекурсивные географические определения IP-адресов для прокси-серверов в NGINX.
http
Синтаксисgeoip_proxy_recursive on | off;
По умолчаниюoff
Контекстhttp
МодульNGINX HTTP Core

Описание

`geoip_proxy_recursive` директива используется в контексте `http` NGINX для управления поведением прокси-запросов с поддержкой GeoIP. Когда установлено в 'on', эта директива позволяет модулю выполнять рекурсивные запросы для получения географической информации клиента. Это особенно полезно в сценариях, когда клиент подключается через несколько прокси, поскольку при определении географического местоположения сохраняется исходный IP-адрес клиента. Директива гарантирует, что модуль GeoIP получает данные из реального IP клиента, а не из IP последнего прокси. Когда директива включена, NGINX будет проверять заголовки, такие как `X-Forwarded-For` или `X-Real-IP`, чтобы получить реальный IP-адрес клиента. Если эти заголовки содержат несколько адресов, NGINX пройдет по ним, чтобы найти исходный IP-адрес, обеспечивая точные данные о местоположении для GeoIP-запросов. Эта функциональность важна для приложений, которым требуется контент, ориентированный по геолокации, или меры безопасности, основанные на географическом положении. Директива интерпретируется как флаг, то есть имеет бинарное состояние. Либо она активирована (установлена в 'on'), либо нет (установлена в 'off'). Поведение соответствует общей модели NGINX по переключению директив между включённым и выключенным состояниями, обеспечивая гибкость в зависимости от конкретных требований конфигурации окружения.

Пример конфига

http {
    geoip_proxy_recursive on;
    geoip_country /path/to/GeoIP.dat;
}

Убедитесь, что модуль GeoIP установлен и правильно настроен.

Использование этой директивы без понимания того, как прокси влияют на заголовки IP-адресов, может привести к неточным географическим данным.

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

grpc_pass Директива grpc_pass используется для передачи gRPC-запросов на бэкенд-сервер.
locationif in location
Синтаксисgrpc_pass URL;
По умолчаниюnone
Контекстlocation, if in location
МодульNGINX HTTP Core

Описание

Директива `grpc_pass` специально предназначена для маршрутизации gRPC-запросов внутри NGINX. Она определяет бэкенд-сервер, на который пересылаются gRPC-запросы. Директива принимает в качестве аргумента URL, который может указывать либо на группу upstream-серверов, определённую директивой `upstream`, либо на прямой адрес сервера. Когда NGINX получает gRPC-запрос, он преобразует этот запрос в необходимый формат и пересылает его указанному бэкенду, обрабатывая бинарный протокол, необходимый для gRPC-взаимодействия. В контексте конфигурации NGINX директива `grpc_pass` используется внутри блока `location`, что делает её необходимой для определения части URI, которая должна быть сопоставлена с конкретным бэкенд-сервисом. Корректная обработка заголовков ответа, управление соединениями и механизмы бинарного кодирования/декодирования автоматически выполняются NGINX, что позволяет разработчикам сосредоточиться на логике приложения, а не на тонкостях gRPC-взаимодействия. Важно убедиться, что upstream-сервер поддерживает gRPC и должным образом настроен для обработки запросов, пересылаемых из NGINX. Поскольку gRPC использует HTTP/2, директива `grpc_pass` по сути требует сборки NGINX с поддержкой HTTP/2. Это означает, что сервер должен быть правильно настроен на приём HTTP/2-соединений, что в сочетании с `grpc_pass` обеспечит полноценную поддержку gRPC-трафика.

Пример конфига

location /gRPC {
    grpc_pass grpc://localhost:50051;
}

Убедитесь, что NGINX был собран с поддержкой HTTP/2, чтобы правильно обрабатывать gRPC с помощью grpc_pass.

Не используйте grpc_pass совместно с директивами, изменяющими HTTP-протокол, такими как proxy_set_header, предназначенными для HTTP/1.x, — это может привести к несоответствию протоколов.

При указании URL бэкенда убедитесь, что он начинается с 'grpc://' или 'grpcs://', чтобы обозначить правильный протокол. После определения директивы grpc_pass другие параметры конфигурации, такие как таймауты, также могут потребовать соответствующей настройки.

grpc_bind Директива `grpc_bind` задаёт адрес и порт для привязки сервера, чтобы обрабатывать gRPC-трафик в NGINX.
httpserverlocation
Синтаксисgrpc_bind address [port];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_bind` используется в NGINX для определения локального адреса и порта, к которым сервер будет привязываться для обработки gRPC-запросов. Эта директива может быть установлена в контекстах `http`, `server` и `location`, что позволяет гибко настраивать конфигурацию в зависимости от потребностей маршрутизации трафика. Она принимает один или два аргумента; первый аргумент — адрес (IPv4 или IPv6), а второй аргумент — необязательный номер порта. Использование директивы без указания порта по умолчанию приводит к использованию стандартного порта для gRPC (как правило, 50051). После того как директива `grpc_bind` настроена, NGINX слушает входящие gRPC-запросы на указанном адресе и порту и пересылает их на определённый в конфигурации upstream gRPC-сервер. Это позволяет приложениям эффективно обрабатывать gRPC-трафик, используя NGINX в качестве обратного прокси для управления подключениями, балансировки нагрузки и других функций, таких как ограничение скорости или аутентификация. Следует позаботиться о том, чтобы указанный адрес и порт не были уже заняты, чтобы избежать конфликтов привязки, которые могут привести к прерыванию сервиса.

Пример конфига

grpc_bind 0.0.0.0 50051;

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

Если вы указываете IPv6-адрес, убедитесь, что ваша система его поддерживает и что формат адреса корректен.

grpc_socket_keepalive Директива grpc_socket_keepalive включает поддержку TCP keepalive для gRPC-соединений в NGINX.
httpserverlocation
Синтаксисgrpc_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_socket_keepalive` используется для включения или отключения функции TCP keepalive для gRPC-соединений, обрабатываемых NGINX. Когда она включена, эта директива обеспечивает сохранение неактивных TCP-соединений в рабочем состоянии путем отправки периодических keepalive-зондов. Это важно для поддержания долгоживущих соединений, которые часто используются в gRPC для взаимодействия сервисов. По умолчанию во многих операционных системах TCP keepalive может быть отключён, что может привести к закрытию соединений и прерыванию связи после периода простоя. Директива принимает значение-флаг, то есть может быть установлена в 'on' (включено) или 'off' (отключено). При установке в 'on' NGINX настроит параметры сокета для keepalive, что позволит отправлять keepalive-пакеты в соответствии с настройками системы (такими как `tcp_keepalive_time`, `tcp_keepalive_intvl` и `tcp_keepalive_probes`). Поэтому для корректной работы keepalive также необходимо отрегулировать эти параметры на уровне системы. Обратите внимание, что включение этой функции без надлежащих настроек сервера может привести к проблемам с производительностью или избыточному сетевому трафику, особенно в средах с высокой нагрузкой.

Пример конфига

server {
    listen 80;
    grpc_socket_keepalive on;
    location /myservice {
        grpc_pass grpc://backend;
    }
}

Убедитесь, что настройки TCP keepalive вашей операционной системы сконфигурированы надлежащим образом, поскольку NGINX полагается на них для управления keepalive packets.

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

grpc_connect_timeout Задаёт тайм-аут установления соединения с бэкенд-сервером gRPC.
httpserverlocation
Синтаксисgrpc_connect_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_connect_timeout` задаёт максимальное время, отведённое на установление соединения с бэкенд-сервером gRPC, в миллисекундах. Этот тайм-аут важен для того, чтобы длительные или неотзывчивые соединения не задерживали обработку клиентских запросов на продолжительное время. Если тайм-аут истёк до успешного установления соединения, NGINX прервет попытку соединения и вернёт клиенту ошибку, что позволит вашему приложению корректно обработать сбои соединения. Директива может размещаться в контекстах `http`, `server` или `location`, что позволяет администраторам задавать тайм-ауты соединения, соответствующие конкретным требованиям архитектуры приложения. Период тайм-аута можно задать любым положительным целым значением; если установить 0, тайм-аут будет отключён полностью, что обычно не рекомендуется в рабочей среде, где критична отзывчивость клиентов. Наиболее эффективно `grpc_connect_timeout` используется для балансировки между задержкой установления соединения и производительностью приложения, позволяя быстро выполнять повторные попытки или переключаться на альтернативные механизмы отказоустойчивости, если бэкенд-сервис не отвечает.

Пример конфига

http {
    server {
        location / {
            grpc_pass grpc://backend;
            grpc_connect_timeout 500ms;
        }
    }
}

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

Отключение таймаута (установка в 0) может привести к длительным задержкам в сообщении об ошибках, если бэкенд-сервис не отвечает.

grpc_send_timeout Определяет таймаут отправки gRPC-ответов клиенту.
httpserverlocation
Синтаксисgrpc_send_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_send_timeout` в NGINX задаёт максимальный период времени, в течение которого сервер должен отправить gRPC-ответ клиенту после обработки запроса. Эта директива важна для того, чтобы клиентские приложения не ждали ответа бесконечно, что помогает управлять ресурсами и поддерживать производительность приложения. Директива действует в различных контекстах, таких как `http`, `server` и `location`, позволяя устанавливать разные значения таймаута в зависимости от конкретных потребностей ваших приложений. По истечении заданного периода таймаута NGINX разорвет соединение и сгенерирует код состояния gRPC, обозначающий ошибку таймаута. Это особенно полезно в средах с большим количеством микросервисов, где быстрые ответы об ошибке предпочтительнее потенциально бесконечного ожидания сильно задерживающих сервисов. Указанный таймаут применяется только для отправки ответов после того, как сервер начал их отправлять клиенту, то есть он не влияет на время обработки самого запроса, а лишь на интервал отправки финальных пакетов ответа. Синтаксис этой директивы: `grpc_send_timeout time;`, где `time` может быть задан в разных форматах, например `30s` для тридцати секунд или `1m` для одной минуты и т.д. Важно выбрать значение таймаута, которое уравновешивает предоставление достаточного времени для получения ответа и предотвращает блокировку общей работоспособности приложения из-за неотзывчивых сервисов.

Пример конфига

location /api {
    grpc_pass grpc://backend_service;
    grpc_send_timeout 30s;
}

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

Убедитесь, что значение таймаута не конфликтует с другими настройками, такими как `client_body_timeout` или `send_timeout`, поскольку это может привести к непредвиденному поведению.

grpc_intercept_errors Директива `grpc_intercept_errors` включает или отключает перехват кодов ошибок gRPC в NGINX.
httpserverlocation
Синтаксисgrpc_intercept_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_intercept_errors` в NGINX позволяет управлять тем, как gRPC‑сервисы обрабатывают ошибки. При включении NGINX перехватывает ответы об ошибках gRPC и заменяет их на пользовательские ответы в соответствии с поведением, заданным в конфигурации. Это особенно полезно для предоставления более удобочитаемых сообщений об ошибках или для стандартизации ответов об ошибках, отправляемых клиентам. Эта директива принимает булев аргумент — 'on' или 'off'. При установке в 'on' NGINX будет перехватывать ошибки от upstream gRPC‑сервиса и позволит дополнительно настроить обработку или трансформацию этих ошибок прежде чем вернуть их клиенту. Например, вы можете записать ошибку в лог или сопоставить определённые коды ошибок с более подробными сообщениями. При установке в 'off' NGINX просто пропустит код и сообщение об ошибке от backend gRPC‑сервиса без перехвата или изменений.

Пример конфига

http {
    server {
        location /some-grpc-service {
            grpc_pass grpc://backend_service;
            grpc_intercept_errors on;
        }
    }
}

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

Имейте в виду, что некоторые коды ошибок gRPC могут некорректно преобразовываться в HTTP-ответы, поэтому настраивайте внимательно.

grpc_buffer_size Директива grpc_buffer_size задает размер буфера, используемого для чтения ответов gRPC от upstream servers в NGINX.
httpserverlocation
Синтаксисgrpc_buffer_size size;
По умолчанию32k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_buffer_size необходима для оптимизации производительности gRPC-приложений, обслуживаемых через NGINX. Когда NGINX выступает в роли обратного прокси для gRPC, ему нужно эффективно читать ответы от upstream servers. Эта директива определяет размер буфера, выделяемого для чтения этих ответов, что позволяет контролировать использование памяти и пропускную способность. Больший буфер может вместить более крупные ответы, но может потреблять больше памяти, тогда как меньший буфер может приводить к более быстрому выделению памяти, но при превышении размера буфера приводить к дополнительным операциям чтения. Эту директиву можно настроить в контекстах http, server или location, что обеспечивает гибкость её применения. Администраторы могут подбирать размер буфера в соответствии с конкретными потребностями своих gRPC-сервисов. Например, если ответы вашего gRPC обычно большие, увеличение размера буфера может снизить количество обращений NGINX к upstream servers за данными и, таким образом, улучшить общую задержку и производительность gRPC-сервиса. Параметры этой директивы включают одно значение, обозначающее размер буфера в байтах, либо можно использовать суффиксы размеров, такие как `k`, `m`, для указания килобайт или мегабайт. Рекомендуется тщательно настраивать этот параметр исходя из ожидаемых размеров ответов upstream gRPC services.

Пример конфига

http {
    grpc_buffer_size 64k;
    server {
        location /grpc {
            grpc_pass backend;
        }
    }
}

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

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

grpc_read_timeout Устанавливает таймаут для чтения ответов от gRPC сервера в NGINX.
httpserverlocation
Синтаксисgrpc_read_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_read_timeout` определяет максимальный интервал времени, в течение которого NGINX будет ждать ответа от gRPC backend server после установления соединения. Этот таймаут критически важен для регулирования того, как долго сервер должен продолжать ожидать ответа, прежде чем отказаться и закрыть соединение. Он позволяет администраторам тонко настраивать отзывчивость сервера и управление ресурсами, избегая длительных зависаний, когда запросы висят бесконечно. Эта директива может быть указана в трёх контекстах: `http`, `server` и `location`. Её значение задаётся в формате времени (например, '30s' для 30 секунд). Значение директивы должно быть допустимым интервалом времени, который можно указать в секундах, минутах или часах. Если ответ не получен в течение указанного периода таймаута, NGINX вернёт ошибку клиенту, что обеспечивает лучшую отказоустойчивость сервисов, которые могут испытывать задержки. Установка подходящего значения `grpc_read_timeout` имеет решающее значение, особенно в производственной среде, где gRPC-сервисы могут демонстрировать различное время отклика в зависимости от нагрузки. Слишком короткий таймаут может привести к ненужным повторным попыткам или ошибкам, тогда как слишком длинный может ухудшить отзывчивость приложения, поскольку запросы могут без необходимости длительно висеть.

Пример конфига

location /example {
    grpc_pass grpc://backend;
    grpc_read_timeout 30s;
}

Убедитесь, что таймаут указан в правильном формате (например, '30s').

Установка слишком короткого таймаута может привести к частым ошибкам и повторным попыткам.

Если не задано, значение по умолчанию (60 секунд) может быть недостаточным для некоторых операций gRPC.

grpc_next_upstream Директива `grpc_next_upstream` контролирует поведение NGINX, когда запрос к gRPC upstream server не удался.
httpserverlocation
Синтаксисgrpc_next_upstream error | timeout | invalid_header;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_next_upstream` используется в контексте HTTP, server или location blocks для определения условий, при которых NGINX будет пытаться отправить запрос на next upstream server, настроенный для обработки протокола gRPC. Директива принимает один или несколько аргументов, которые задают различные условия отказа, такие как истечение таймаута, сбои соединения или другие ошибки. При возникновении указанного отказа NGINX автоматически повторит запрос с использованием следующего сервера в upstream block, повышая надёжность и доступность gRPC-сервисов за счёт автоматического восстановления от временных проблем. Поведение директивы `grpc_next_upstream` обеспечивает как детализированный контроль, так и гибкость. Например, если запрос истекает по таймауту или backend server недоступен, директива позволяет NGINX бесшовно попробовать другой сервер. Параметры этой директивы могут быть заданы в соответствии с требованиями приложения, что позволяет администратору сервера тонко настроить стратегию обработки отказов. Это особенно полезно в распределённых системах, где каждый компонент сервиса может иметь разные характеристики доступности. Эта директива тесно связана с общей стратегией балансировки нагрузки NGINX, позволяя реализовывать сложные схемы, такие как активные проверки состояния и обработка недоступности сервисов. Важно настраивать эту директиву вместе с настройками upstream block, чтобы обеспечить согласованную реакцию как на стороне клиента, так и на стороне backend server, что в конечном итоге улучшает пользовательский опыт в приложениях, использующих gRPC для коммуникаций в режиме реального времени.

Пример конфига

upstream grpc_backend {
    server backend1.example.com:50051;
    server backend2.example.com:50051;
}

location / {
    grpc_pass grpc://grpc_backend;
    grpc_next_upstream error timeout;  # Retry on error or timeout
}

Убедитесь, что upstream‑серверы правильно определены и доступны, чтобы избежать ненужных повторных попыток, не дающих реального решения.

Использование слишком большого количества параметров может привести к непредвиденному поведению; будьте осторожны и определяйте только соответствующие случаи отказа.

grpc_next_upstream_tries Директива `grpc_next_upstream_tries` управляет количеством попыток связаться с upstream-серверами при обработке клиентских запросов по gRPC.
httpserverlocation
Синтаксисgrpc_next_upstream_tries number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_next_upstream_tries` задаёт, сколько upstream-серверов NGINX должен попытаться опросить в случае, если предыдущий сервер не отвечает. При обработке gRPC-запроса, если первый upstream-сервер возвращает ошибку, NGINX может повторно отправить запрос на последующие серверы в соответствии со значением этой директивы. Директива полезна в балансируемых по нагрузке окружениях для обеспечения надёжности связи клиент — сервер за счёт возможности переключения на запасные серверы при возникновении проблем. Механизм повторных попыток полезен при транзиентных сбоях, но его применение следует соотносить с возможным увеличением задержки ответа клиенту. Эта директива действует в контекстах `http`, `server` и `location`. Значение, заданное для `grpc_next_upstream_tries`, должно быть положительным целым числом, обозначающим количество допустимых повторных попыток при сбое запроса к upstream. Если директива установлена в 0, повторные попытки полностью отключаются, что приводит к немедленному провалу после первого обращения к upstream-серверу. Поведение по умолчанию определяется конфигурацией администратора сервера и может быть скорректировано для балансировки производительности и надёжности в зависимости от потребностей приложения.

Пример конфига

grpc_next_upstream_tries 3;

Установка значения в 0 отключает повторные попытки, что может привести к немедленным сбоям при ошибках upstream.

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

grpc_next_upstream_timeout Устанавливает таймаут подключения к следующему upstream server в gRPC-запросах.
httpserverlocation
Синтаксисgrpc_next_upstream_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_next_upstream_timeout` задаёт максимальное время ожидания подключения к следующему upstream server, когда предыдущий upstream server даёт сбой во время gRPC-запроса. Этот таймаут важен в сценариях, где несколько upstream server могут участвовать в обработке клиентского запроса. Если первоначальный upstream server сталкивается с ошибкой, сконфигурированный таймаут определяет, как долго NGINX будет пытаться подключиться к следующему доступному upstream server в стеке, прежде чем операция завершится по таймауту. Параметр для `grpc_next_upstream_timeout` задаётся в миллисекундах, что позволяет тонко контролировать скорость формирования ответа даже в неблагоприятных условиях, когда основной сервер не отвечает или работает медленно. Это напрямую влияет на эффективность и отзывчивость сервиса, особенно в случаях высокой частоты ошибок или задержек среди upstream server. Настраивая эту директиву, администраторы могут оптимизировать пользовательский опыт и использование ресурсов, балансируя между ожиданием ответа сервера и переключением на альтернативные серверы. Эту директиву можно установить в разных контекстах, таких как `http`, `server` и `location`, что делает её универсальной на разных уровнях конфигурации. Использование её в сочетании с родственными директивами, такими как `grpc_pass` или `proxy_next_upstream`, может дополнительно повысить общую функциональность и надёжность сервера.

Пример конфига

location /api {
    grpc_pass grpc://my_upstream;
    grpc_next_upstream_timeout 500ms;
}

Убедитесь, что указанное время соответствует требованиям к производительности вашего приложения; очень короткий timeout может привести к частым failovers, а слишком длинный timeout — к задержкам ответов.

Эта директива действует только при использовании gRPC; убедитесь, что ваш upstream server сконфигурирован соответствующим образом.

grpc_set_header Sets a gRPC header for the request.
httpserverlocation
Синтаксисgrpc_set_header name value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `grpc_set_header` directive allows you to add or modify HTTP/2 headers for gRPC requests passed to a backend server. This is particularly useful in a microservices architecture where specific metadata may need to be sent along with the request. The directive takes two parameters: the first is the name of the header to be set, and the second is the value to assign to that header. This allows for dynamic generation of header values based on the context of the request or predefined variables. When the `grpc_set_header` directive is used in a particular context (http, server, or location), it will apply headers at that level of configuration. For instance, if declared in a server block, all gRPC requests handled by that server will carry the specified headers. If declared inside a location block, only those requests matching that location will have the headers set. It’s also possible to use variables within the directive to set header values dynamically, increasing flexibility in how metadata is passed to the backend services.

Пример конфига

location /rpc {
    grpc_pass grpc://backend;
    grpc_set_header api-key $api_key;
    grpc_set_header user-id $http_user_id;
}

Ensure that headers are set correctly without typos, as gRPC is sensitive to header names.

Avoid using unsupported header names that may be filtered by the gRPC protocol or the backend server.

grpc_pass_header Директива `grpc_pass_header` настраивает, какие HTTP-заголовки должны пересылаться в gRPC-запросах.
httpserverlocation
Синтаксисgrpc_pass_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_pass_header` используется для указания, какие заголовки из входящего запроса должны быть переданы на upstream gRPC server. Эта директива играет ключевую роль при проксировании gRPC, особенно когда определённые заголовки требуются gRPC-службой во время её работы. Когда она устанавливается в соответствующих контекстах (http, server, location), она позволяет тонко управлять пересылкой заголовков, давая возможность сервисам получать необходимые метаданные от клиентов. Одна из ключевых особенностей директивы `grpc_pass_header` — её способность принимать один аргумент, который задаёт имя HTTP-заголовка для пересылки. Этот аргумент нечувствителен к регистру, то есть указание `example-header` или `Example-Header` даст одинаковый результат. Директива может повторяться для пересылки нескольких заголовков при необходимости, что помогает сохранять важную метаинформацию при взаимодействии между сервисами. Использование этой директивы особенно полезно в сценариях, где требуется сохранять и передавать вместе с вызовами gRPC токены аутентификации, идентификаторы отслеживания или другие формы метаданных. Это улучшает совместимость между сервисами, которые зависят от детальной информации в заголовках для своей работы, и, следовательно, повышает общую функциональность API.

Пример конфига

location /api {
    grpc_pass backend;
    grpc_pass_header Custom-Header;
}

Убедитесь, что имя заголовка написано правильно и соответствует тому, что ожидает upstream gRPC server, поскольку эта директива нечувствительна к регистру.

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

grpc_hide_header Директива grpc_hide_header предотвращает отправку определённых заголовков в ответах gRPC клиентам.
httpserverlocation
Синтаксисgrpc_hide_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_hide_header используется для управления тем, какие заголовки исключаются из ответов gRPC, обслуживаемых NGINX. Эта директива помогает управлять конфиденциальной информацией или контролировать взаимодействие с клиентом, скрывая заголовки, которые в противном случае могли бы быть раскрыты. Она принимает один аргумент, который задаёт имя заголовка, подлежащего сокрытию. Когда эта директива установлена, любой ответ от gRPC-сервера, содержащий указанный заголовок, будет отфильтрован NGINX до достижения клиента.

Пример конфига

location /grpc {
    grpc_pass grpc://backend;
    grpc_hide_header X-My-Header;
}

Убедитесь, что имя заголовка написано правильно и совпадает по регистру с заголовком в ответе.

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

grpc_ignore_headers Директива grpc_ignore_headers указывает, какие заголовки gRPC следует игнорировать при обработке запросов.
httpserverlocation
Синтаксисgrpc_ignore_headers header-name [header-name ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_ignore_headers позволяет указать список заголовков gRPC, которые следует игнорировать при обработке запросов. Эта директива принимает в качестве аргументов одно или несколько имён заголовков, и заголовки, совпадающие с любым из указанных имён, будут исключены из обработки сервером NGINX. Это может быть полезно в ситуациях, когда определённые заголовки мешают логике приложения или когда политики безопасности требуют исключения конкретных заголовков из клиентских запросов. Директива может использоваться в http, server, or location contexts, что означает, что её действие может распространяться на весь сервер, на конкретный виртуальный хост или даже на определённый location block. Гибкость использования этой директивы позволяет тонко управлять трафиком gRPC. Если заголовки не указаны, по умолчанию игнорироваться не будут никакие заголовки, то есть все заголовки будут обрабатываться. При использовании этой директивы важно убедиться, что заголовки, которые вы решите игнорировать, не нарушат ожидаемую работу ваших приложений gRPC. Игнорирование критических заголовков может привести к непредвиденному поведению приложения, поскольку сервер может не получить необходимые данные для корректной обработки запросов.

Пример конфига

location /grpc {
    grpc_pass grpc://backend;
    grpc_ignore_headers 
        x-grpc-status
        x-user-header;
}

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

Учтите контекст, в котором вы используете grpc_ignore_headers; размещение его в неправильном контексте может привести к непредвиденному поведению.

grpc_ssl_session_reuse Включает или отключивает повторное использование SSL-сессий для gRPC-соединений в NGINX.
httpserverlocation
Синтаксисgrpc_ssl_session_reuse on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_session_reuse` настраивает повторное использование SSL-сессий для gRPC-соединений, устанавливаемых через сервер NGINX. Она принимает логическое значение; при включении gRPC-клиенты могут повторно использовать существующие SSL-сессии для установления новых соединений, что оптимизирует использование ресурсов и повышает производительность. Когда эта директива установлена в 'on', NGINX потенциально сокращает время, необходимое для SSL-рукопожатия при последующих соединениях, поскольку рукопожатие можно пропустить при повторном использовании существующей сессии. И наоборот, установка в 'off' отключает эту функциональность, что может привести к увеличению задержки при повторных соединениях из-за необходимости полного SSL-рукопожатия каждый раз. Директива применима в различных контекстах, включая `http`, `server` и `location`, что обеспечивает гибкость в зависимости от области действия gRPC-сервисов, которым требуется повторное использование сессий. Обратите внимание, что хотя повторное использование сессий может значительно улучшить производительность, оно требует соответствующей настройки и совместимости между сервером и клиентами для корректной работы. SSL session IDs должны быть общими между сервером и клиентами для успешного повторного использования, что иногда требует дополнительных мер по кэшированию сессий между несколькими экземплярами сервера, если это необходимо.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_session_reuse on;
    ssl_certificate /path/to/cert;
    ssl_certificate_key /path/to/key;
    # other configurations...
}

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

Не все gRPC-клиенты поддерживают повторное использование SSL-сессий; проверьте совместимость клиентов перед включением этой функции.

Выигрыш в производительности может быть незначительным, если SSL-сессии не используются часто; рекомендуется провести тестирование.

grpc_ssl_protocols Директива `grpc_ssl_protocols` задаёт разрешённые протоколы SSL/TLS для gRPC-соединений.
httpserverlocation
Синтаксисgrpc_ssl_protocols protocol1 protocol2 ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_protocols` позволяет настроить, какие протоколы SSL и TLS доступны для gRPC-подключений, обрабатываемых NGINX. Пользователи могут указать список протоколов, которые сервер будет принимать для защищённого взаимодействия, что помогает повысить безопасность за счёт исключения устаревших и уязвимых версий протоколов. Эта директива может быть определена в разных контекстах, таких как `http`, `server` или `location`, что даёт гибкость конфигурации в зависимости от потребностей приложения. Типичными допустимыми параметрами для этой директивы обычно являются распространённые версии SSL/TLS, такие как `TLSv1`, `TLSv1.1`, `TLSv1.2` и `TLSv1.3`, что позволяет администраторам тщательно контролировать стандарты безопасности, используемые их приложениями. Кроме того, определение этой директивы в контексте `http` применит настройки ко всему серверу, тогда как определение в контекстах `server` или `location` позволит добиться более тонкого контроля, возможно включая разные настройки протоколов для разных gRPC‑сервисов. Важно располагать указанные протоколы таким образом, чтобы они соответствовали как требованиям безопасности, так и требованиям совместимости клиентских приложений.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_protocols  TLSv1.2 TLSv1.3;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
}

Использование устаревших протоколов, таких как SSLv3, может привести к уязвимостям безопасности, например, к атакам POODLE.

Неправильная конфигурация может вызвать проблемы совместимости с клиентами, если клиенты не поддерживают указанные протоколы.

grpc_ssl_ciphers Директива `grpc_ssl_ciphers` задаёт набор шифров, которые NGINX будет использовать для SSL/TLS‑соединений в gRPC‑сервисах.
httpserverlocation
Синтаксисgrpc_ssl_ciphers cipher_suite;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_ciphers` в NGINX настраивает наборы шифров, которые могут использоваться для защищённых соединений в gRPC‑приложениях. Когда gRPC‑служба настроена на использование SSL/TLS, требуется защищённый канал связи между клиентом и сервером. Директива `grpc_ssl_ciphers` позволяет явно указать, какие шифры сервер должен принимать при согласовании SSL/TLS‑соединений, обеспечивая совместимость и безопасность в зависимости от потребностей вашего приложения. Директива применима в контекстах `http`, `server` и `location`, что даёт гибкость при определении наборов шифров для глобальных или конкретных случаев. Директива принимает один аргумент — двоеточием разделённый список шифров. Каждый шифр в списке должен быть допустимым согласно библиотеке SSL/TLS, используемой NGINX, обычно OpenSSL. Если указано несколько шифров, при установлении защищённого соединения они будут оцениваться в указанном порядке, что позволяет приоритизировать выбор шифров. При настройке наборов шифров важно учитывать безопасность приложения, поскольку использование слабых или устаревших шифров может подвергнуть систему уязвимостям. Кроме того, эта директива взаимодействует с другими, связанными с SSL, директивами для создания защищённой среды для gRPC‑коммуникаций.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_ciphers 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256';
}

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

Использование устаревших или слабых шифров может привести к уязвимостям в безопасности; регулярно обновляйте список шифров в соответствии с лучшими практиками.

grpc_ssl_name Директива grpc_ssl_name задаёт имя хоста для gRPC-сервера при использовании SSL.
httpserverlocation
Синтаксисgrpc_ssl_name hostname;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_ssl_name используется в конфигурации NGINX для задания имени хоста, которое будет отправлено в расширении Server Name Indication (SNI) во время SSL-рукопожатия для gRPC‑соединений. Это особенно важно, когда NGINX действует как обратный прокси для нескольких gRPC‑сервисов, размещённых на одном IP‑адресе, но требующих различных SSL‑сертификатов в зависимости от имени хоста, запрашиваемого клиентом. Когда эта директива задана, NGINX будет заменять имя хоста в SSL‑контексте на указанное значение при обработке gRPC‑запросов. Это повышает безопасность и надёжность SSL‑соединений, гарантируя, что для каждого конкретного запроса к gRPC‑сервису будет представлен корректный сертификат. Директива применяется в контекстах http, server и location, что позволяет гибко настраивать конфигурацию в зависимости от структуры ваших сервисов. Аргументом этой директивы должна быть одна строка, задающая SSL‑имя хоста. Если директива опущена, NGINX по умолчанию использует исходный хост, запрошенный клиентом. Правильная настройка grpc_ssl_name необходима для конфигураций с виртуальным хостингом или при работе с несколькими gRPC‑бэкендами.

Пример конфига

server {
    listen 443 ssl;
    server_name grpc.example.com;

    grpc_ssl_name backend.grpc.example.com;

    location / {
        grpc_pass grpc://backend;
    }
}

Убедитесь, что hostname указан правильно и соответствует SSL certificate, покрывающему этот hostname.

Использование grpc_ssl_name вместе с несколькими server blocks может привести к конфликтам, если они не настроены должным образом.

grpc_ssl_server_name Включает использование имени сервера в SSL‑рукопожатии gRPC для сопоставления с Server Name Indication (SNI).
httpserverlocation
Синтаксисgrpc_ssl_server_name on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_server_name` используется в конфигурациях NGINX, чтобы включить добавление имени сервера в SSL‑рукопожатие для gRPC‑соединений. Это позволяет NGINX удовлетворить требование клиента Server Name Indication (SNI), что помогает правильно направлять соединение к соответствующему бэкенд‑серверу на основе указанного имени хоста. Когда эта директива включена, сервер может обслуживать несколько SSL‑сайтов на одном и том же IP‑адресе, различая их по доменным именам. Директива может быть указана в различных контекстах, включая `http`, `server` и `location`, что обеспечивает гибкость её применения в файле конфигурации. При установке этой директивы в 'on' сервер NGINX будет использовать имя сервера, включённое в gRPC‑запрос, для своей SSL‑конфигурации, что позволит ему корректно выбирать соответствующий набор SSL‑сертификатов, совпадающих с доменным именем. Это особенно полезно в средах, где на одном сервере размещается несколько gRPC‑сервисов. Важно отметить, что включение `grpc_ssl_server_name` может потребовать тщательного управления вашими SSL‑сертификатами, чтобы обеспечить их правильную настройку для работы с SNI. Если используется несколько доменов, убедитесь, что они надёжно защищены действительными SSL‑сертификатами для обеспечения надёжной связи. Эта функция подчёркивает интероперабельность с gRPC‑клиентами, которые ожидают поддержку SNI для корректной работы.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_server_name on;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/key.pem;
}

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

Если перед NGINX используется балансировщик нагрузки, убедитесь, что он поддерживает SNI и правильно пересылает имя сервера.

Эта директива не поддерживается в чисто HTTP-контекстах, а только в конфигурациях с поддержкой https.

grpc_ssl_verify Директива `grpc_ssl_verify` настраивает, следует ли проверять SSL-сертификат gRPC-сервера при выполнении запросов.
httpserverlocation
Синтаксисgrpc_ssl_verify on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_verify` используется в конфигурации сервера NGINX для управления процессом проверки SSL-сертификатов для бэкенд-серверов gRPC. Эта директива принимает флаговый аргумент, который указывает, должна ли выполняться проверка SSL-сертификата при выполнении gRPC-запросов. При установке в 'on' NGINX будет проверять SSL-сертификат, представленный upstream gRPC server, относительно сертификатов CA, настроенных в системе, что обеспечивает безопасное соединение и подтверждает подлинность сервера. Директива может располагаться в контекстах `http`, `server` или `location`, что позволяет гибко настраивать поведение в зависимости от иерархии запросов. Если проверка включена и сертификат сервера недействителен или не может быть подтвержден, NGINX откажется устанавливать соединение. Наоборот, установка директивы в 'off' отключает процесс проверки, что может быть полезно для тестирования, но представляет риск для безопасности в продуктивных средах, где возможны man-in-the-middle attacks. Учтите, что при включенном `grpc_ssl_verify` он опирается на сертификаты CA, доступные в сборке NGINX, которые можно настроить, указав директиву `ssl_trusted_certificate`. Поэтому правильная конфигурация доверенных сертификатов необходима для корректной работы этой директивы и обеспечения безопасной связи с gRPC-сервисами.

Пример конфига

location /api {
    grpc_pass grpc://backend-grpc;
    grpc_ssl_verify on;
}

Убедитесь, что указали правильные CA certificates с помощью директивы `ssl_trusted_certificate` при включении проверки.

Отключение проверки ('off') может подвергнуть сервис рискам безопасности; используйте это только в доверенных окружениях.

grpc_ssl_verify_depth Директива `grpc_ssl_verify_depth` задаёт максимальную глубину проверки цепочек SSL-сертификатов в gRPC-связях.
httpserverlocation
Синтаксисgrpc_ssl_verify_depth number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_verify_depth` используется в конфигурации NGINX для указания максимального числа промежуточных сертификатов, которые могут присутствовать в цепочке проверки SSL при обработке gRPC-запросов. Эта директива особенно актуальна при использовании gRPC поверх SSL, так как она помогает контролировать процесс проверки сертификатов и предотвращать возможные зацикливания или чрезмерную глубину проверки. Задавая эту директиву, администраторы могут удостовериться, что клиенты подключаются к предусмотренным серверам, одновременно поддерживая баланс между безопасностью и производительностью. Директива принимает целое числовое значение, определяющее максимально допустимую глубину проверки SSL-сертификатов. Например, если установить значение '3', цепочка сертификатов может содержать до трёх промежуточных сертификатов до достижения корневого доверенного сертификата. Это полезно в конфигурациях, где выданы несколько сертификатов, и нужно управлять глубиной цепочки, чтобы не выходить за рамки установленных требований. Кроме того, если глубина проверки превысит этот предел, NGINX прервет соединение, тем самым усиливая применение политики безопасности без излишней нагрузки на процесс проверки. Эту директиву можно указывать в различных контекстах, включая `http`, `server` и `location`, что позволяет обеспечить тонкую настройку в зависимости от области действия конфигурации. Важно подбирать это значение с учётом известной структуры сертификатов, используемой на стороне сервера и клиента.

Пример конфига

http {
    server {
        location / {
            grpc_pass grpc://backend;
            grpc_ssl_verify on;
            grpc_ssl_verify_depth 3;
        }
    }
}

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

Не забудьте сочетать `grpc_ssl_verify_depth` с `grpc_ssl_verify on;` для эффективной проверки сертификатов.

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

grpc_ssl_trusted_certificate Директива grpc_ssl_trusted_certificate указывает файл доверенного сертификата для проверки сертификата удалённого узла в gRPC поверх SSL/TLS.
httpserverlocation
Синтаксисgrpc_ssl_trusted_certificate path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_ssl_trusted_certificate используется в NGINX для указания файла, содержащего доверенный корневой сертификат, применяемый при установлении защищённых gRPC‑соединений. Это особенно важно, когда gRPC‑сервисы работают поверх TLS, поскольку директива позволяет клиенту проверять подлинность SSL‑сертификата сервера. Указанный файл сертификата обычно содержит публичные сертификаты Certificate Authorities (CAs), которым доверяют при подписывании сертификатов сервера, что даёт NGINX возможность проверять цепочку доверия при установлении защищённого соединения. При настройке этой директивы нужно указать путь к файлу сертификата в качестве аргумента. Файл должен быть в формате PEM и содержать полную цепочку сертификатов, необходимую для верификации. Также важно убедиться, что права доступа к этому файлу позволяют NGINX читать его. Если директивы заданы в контекстах server или location, они будут применяться ко всем gRPC‑соединениям, обрабатываемым этими блоками, обеспечивая единообразную проверку SSL/TLS для всего проходящего через них трафика gRPC.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
    # Additional configuration...
}

Убедитесь, что указанный путь верен и что NGINX имеет права на чтение файла сертификата.

Файл сертификата должен быть в формате PEM; другие форматы не будут обработаны корректно.

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

grpc_ssl_crl Директива grpc_ssl_crl указывает файл списка отозванных сертификатов (CRL) для gRPC SSL-соединений в NGINX.
httpserverlocation
Синтаксисgrpc_ssl_crl path/to/crl.pem;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_crl` используется в конфигурациях NGINX для указания файла списка отозванных сертификатов (CRL), который сервер использует для проверки действительности клиентских SSL-сертификатов при gRPC-соединениях. Это особенно важно для обеспечения защищённого канала связи, так как позволяет серверу отклонять сертификаты, отозванные до истечения срока их действия. Директива применима в контекстах `http`, `server` и `location`, что даёт гибкость в области применения настроек для разных частей конфигурации. Когда клиент пытается подключиться к серверу, NGINX обращается к указанному файлу CRL для проверки сертификатов, предъявляемых клиентом. Если сертификат клиента найден в CRL, NGINX отклонит подключение, повышая безопасность и не позволяя использовать отозванные сертификаты для установления доверия. Крайне важно поддерживать файл CRL в актуальном состоянии, чтобы он отражал текущий статус сертификатов; обычно его получают от удостоверяющего центра (CA), который управляет подписями и отзывами. Эта директива принимает один аргумент — путь к файлу CRL — и должна использоваться совместно с другими SSL-директивами, такими как `ssl_certificate` и `ssl_certificate_key`, как часть полной gRPC SSL-конфигурации.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate     /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/private/server.key;
    grpc_ssl_crl       /etc/ssl/crl/my_crl.pem;
}

Убедитесь, что файл CRL правильно отформатирован и доступен для рабочих процессов NGINX, иначе это может привести к ошибкам при запуске NGINX.

Если файл CRL слишком велик, это может повлиять на производительность при проверке подключений клиентов; учитывайте размер и частоту обновлений.

grpc_ssl_certificate Директива `grpc_ssl_certificate` указывает файл SSL-сертификата для защиты gRPC-трафика.
httpserverlocation
Синтаксисgrpc_ssl_certificate path/to/certificate.crt;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_certificate` в NGINX используется для указания пути к файлу SSL-сертификата, который будет применяться для шифрования gRPC-коммуникаций поверх HTTPS. Эта директива необходима для обеспечения безопасности данных, передаваемых по gRPC-соединениям, предоставляя шифрование для конфиденциальной информации, пересылаемой по сети. Когда эта директива задана, NGINX будет использовать указанный SSL-сертификат при обработке входящих gRPC-запросов. Эту директиву можно размещать в контекстах `http`, `server` или `location`, что обеспечивает гибкость настройки SSL на разных уровнях внутри архитектуры сервера. Конфигурация ожидает один аргумент, который должен быть корректным путем к файлу с сертификатом в PEM-формате. Если указанный файл не может быть прочитан или не является действительным сертификатом, NGINX не сможет запуститься, тем самым применяя строгие меры для обеспечения защищенной связи. Кроме того, использование директивы должно сопровождаться соответствующими настройками SSL, такими как `grpc_ssl_certificate_key`, чтобы корректно установить и защитить SSL-рукопожатие во время сеансов.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_certificate /etc/ssl/certs/my_cert.crt;
    grpc_ssl_certificate_key /etc/ssl/private/my_key.key;
    location /grpc {
        grpc_pass grpc://backend_service;
    }
}

Убедитесь, что путь к файлу сертификата указан правильно, иначе NGINX не сможет запуститься или перезагрузиться.

Сертификат должен быть в формате PEM, так как сертификаты в другом формате будут вызывать ошибки.

Всегда используйте эту директиву вместе с `grpc_ssl_certificate_key`, чтобы обеспечить корректную конфигурацию SSL.

grpc_ssl_certificate_key Директива grpc_ssl_certificate_key указывает файл закрытого ключа для SSL-сертификата, используемого в gRPC-соединениях.
httpserverlocation
Синтаксисgrpc_ssl_certificate_key path/to/private.key;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_certificate_key` используется для определения файла закрытого ключа, необходимого для установления защищённых gRPC-подключений. Эта директива особенно важна, когда сервер должен аутентифицировать себя перед клиентами с помощью SSL/TLS. В качестве параметра следует указать путь к файлу в кодировке PEM, который содержит закрытый ключ, связанный с SSL-сертификатом, определённым директивой `grpc_ssl_certificate`. Когда gRPC-клиент пытается подключиться, он будет использовать SSL-сертификат и закрытый ключ для установления защищённого соединения, обеспечивая шифрование и безопасность передаваемых данных. Директиву можно использовать на уровнях `http`, `server` или `location`. Такая гибкость позволяет точно настраивать SSL-конфигурации в зависимости от потребностей разных частей веб-сервера. Важно учитывать, что при отсутствии действительного сертификата и соответствующего закрытого ключа клиенты могут не суметь установить соединение, что приведёт к сбоям в коммуникации. Поэтому корректная настройка этой директивы необходима для gRPC-служб, для которых требуются конфиденциальность и целостность посредством шифрования SSL/TLS.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_certificate     /etc/ssl/certs/server.crt;
    grpc_ssl_certificate_key /etc/ssl/private/server.key;
}

Убедитесь, что путь к файлу закрытого ключа указан правильно и доступен процессу NGINX.

Закрытый ключ должен соответствовать SSL-сертификату, указанному директивой grpc_ssl_certificate.

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

grpc_ssl_certificate_cache Директива grpc_ssl_certificate_cache настраивает поведение кэширования сертификатов SSL, используемых в gRPC-коммуникациях, оптимизируя производительность.
httpserverlocation
Синтаксисgrpc_ssl_certificate_cache size [max_size] [ttl];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_ssl_certificate_cache в NGINX предназначена для повышения эффективности gRPC-коммуникаций путем кэширования сертификатов SSL. Она позволяет администраторам указать механизм кэша для хранения сертификатов SSL, часто используемых в gRPC-соединениях, снижая необходимость многократной загрузки и разбора этих сертификатов. Это может значительно снизить задержку и повысить производительность за счет минимизации накладных расходов при повторном установлении защищенных соединений благодаря кэшированию. Эта директива может принимать от 1 до 3 параметров: размер кэша, TTL (Time To Live) для кэшируемых сертификатов и необязательный максимальный размер. Первый параметр задает размер кэша, обычно выражаемый в байтах (например, 10m для 10 мегабайт). TTL определяет, как долго сертификаты остаются действительными в кэше, прежде чем их удалят и заново загрузят. Администраторы могут настраивать эти параметры в зависимости от конкретной нагрузки на сервер и требований к производительности. Гибкость директивы позволяет создавать конфигурации, соответствующие различным требованиям gRPC-приложений, обеспечивая безопасную и эффективную доставку сервисов.

Пример конфига

grpc_ssl_certificate_cache 10m 2m 1h;

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

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

Проверьте права доступа к каталогу кэша, если кэширование не работает.

grpc_ssl_password_file Директива `grpc_ssl_password_file` указывает путь к файлу, содержащему пароль для расшифровки SSL-сертификата, используемого в gRPC-соединениях.
httpserverlocation
Синтаксисgrpc_ssl_password_file path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `grpc_ssl_password_file` используется в конфигурации NGINX для чтения пароля из указанного файла. Этот пароль важен при работе с зашифрованными SSL-сертификатами, которые часто требуются для защищённых gRPC-подключений. При настройке NGINX получит доступ к паролю во время инициализации SSL-контекста, что позволит ему расшифровывать соответствующие SSL-сертификаты. Путь к файлу с паролем должен быть передан в качестве аргумента этой директивы. С точки зрения контекста, директива `grpc_ssl_password_file` может быть размещена в блоках `http`, `server` или `location` файла конфигурации NGINX. Использование директивы критично при работе с gRPC-приложениями, которые полагаются на защищённые каналы. Если указанный файл с паролем отсутствует или недоступен для чтения, NGINX не сможет запуститься, и будет записана ошибка, указывающая на проблему с инициализацией SSL-сертификата. Также крайне важно обеспечить защиту файла с паролем с помощью соответствующих прав доступа в файловой системе, чтобы предотвратить несанкционированный доступ, поскольку он содержит конфиденциальную информацию, необходимую для работы защищённых gRPC-коммуникаций. В производственных средах управление безопасностью таких файлов критично для поддержания целостности и конфиденциальности SSL-коммуникаций.

Пример конфига

server {
    listen 443 ssl;
    grpc_ssl_password_file /etc/ssl/private/grpc_password.txt;
    ssl_certificate /etc/ssl/certs/grpc_cert.pem;
    ssl_certificate_key /etc/ssl/private/grpc_key.pem;
}

Убедитесь, что путь к файлу с паролем указан правильно; в противном случае HTTPS-подключения не будут работать.

Файл с паролем должен иметь правильные права доступа, чтобы рабочие процессы NGINX могли его читать.

Хранение конфиденциальных паролей в plaintext-файлах может представлять риск для безопасности; подумайте о надёжной защите файла.

grpc_ssl_conf_command Директива grpc_ssl_conf_command настраивает параметры SSL для gRPC-подключений в NGINX.
httpserverlocation
Синтаксисgrpc_ssl_conf_command command value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива grpc_ssl_conf_command используется для задания конкретных параметров SSL для gRPC‑связи внутри NGINX. Эту директиву можно включать в контексты http, server или location, что обеспечивает гибкость конфигурации. Она принимает два аргумента, которые представляют команду для выполнения и соответствующее значение. Важным аспектом этой директивы является её возможность изменять настройки SSL специально для gRPC‑подключений, отдельно от стандартных конфигураций HTTP, что имеет решающее значение для обеспечения защищённых каналов связи в архитектуре микросервисов, основанной на gRPC. При использовании grpc_ssl_conf_command каждая указанная команда влияет на обработку входящих gRPC‑запросов и делает это с учётом контекста. Это означает, что в зависимости от уровня иерархии (http, server, location) команды могут применяться более локально или глобально, что позволяет администраторам тонко настраивать операции SSL в соответствии с различными требованиями безопасности для разных частей экосистемы NGINX. Директива особенно полезна для пользовательских конфигураций, которые не покрываются параметрами SSL по умолчанию, и потому необходима для пользователей, желающих улучшить свои gRPC‑развёртывания. Важно отметить, что для корректной работы необходимо указывать правильные значения; неверные аргументы могут привести к неверной конфигурации SSL, что может поставить под угрозу безопасность соединений или вызвать сбои в работе сервиса. Поэтому при использовании этой директивы рекомендуется внимательно сверяться как с документацией по SSL для NGINX, так и с требованиями gRPC.

Пример конфига

grpc_ssl_conf_command valid_commands value;

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

Учтите ограничения контекста; commands могут вести себя по‑разному в зависимости от их контекста (http, server, location).

Обратитесь к документации gRPC SSL, чтобы сопоставить внутренние требования SSL с настроенными commands.

gunzip Директива gunzip включает или отключает распаковку ответов, сжатых gzip, в NGINX.
httpserverlocation
Синтаксисgunzip on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gunzip` используется в NGINX для управления тем, должен ли сервер автоматически распаковывать тела HTTP-ответов, сжатых gzip, перед отправкой их клиенту. Когда она включена, NGINX будет распаковывать содержимое, позволяя клиентам, которые не поддерживают сжатие gzip, корректно интерпретировать ответ без дополнительной обработки на их стороне. Эта директива важна для обеспечения совместимости с различными клиентами, которые могут не уметь правильно обрабатывать кодирование gzip.\n\nДиректива `gunzip` принимает флаг в качестве аргумента, где `on` включает распаковку, а `off` отключает её. Эту директиву можно использовать в контекстах `http`, `server` и `location`, что позволяет тонко настроить, когда ответы должны распаковываться в зависимости от конфигурации. Важно использовать эту директиву осмотрительно: например, включение её для некоторых `location`, которые обслуживают ресурсы, которые могут быть сжаты, может сократить трафик и улучшить время загрузки, но при этом привести к дополнительным накладным расходам для очень маленьких файлов.\n\nПоскольку NGINX использует заголовок `Content-Encoding` для определения того, сжат ли ответ, директива `gunzip` работает в связке с директивами, связанными с gzip, которые контролируют процесс сжатия. Если ответ не сжат (то есть он не содержит заголовка `Content-Encoding: gzip`), установка `gunzip` не окажет никакого эффекта, и исходное содержимое будет отправлено как есть, независимо от состояния директивы. Пользователям следует убедиться, что при включении `gunzip` upstream‑сервер или приложение корректно устанавливают заголовки, чтобы сжатие могло полноценно применяться.

Пример конфига

server {
    listen       80;
    server_name  example.com;

    location / {
        gunzip on;
        proxy_pass http://backend;
    }
}

Убедитесь, что upstream-сервер отправляет правильный заголовок `Content-Encoding`; в противном случае `gunzip` не окажет никакого эффекта.

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

Избегайте включения `gunzip` для особенно маленьких файлов, так как затраты на декомпрессию могут нивелировать любую выгоду от экономии пропускной способности.

gunzip_buffers Директива gunzip_buffers настраивает размеры буферов для декомпрессированных данных ответов в NGINX.
httpserverlocation
Синтаксисgunzip_buffers number size;
По умолчаниюgunzip_buffers 4 16k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`gunzip_buffers` директива указывает количество и размер буферов, используемых для хранения декомпрессированных данных из HTTP-ответов. Эта директива особенно полезна при работе с Gzip-сжатым содержимым, отправляемым клиенту, так как позволяет NGINX эффективно управлять распределением памяти для декомпрессированных данных. Первый параметр задаёт количество буферов, а второй параметр указывает размер каждого буфера в байтах. Когда обрабатывается Gzip-сжатый ответ, NGINX использует эти буферы для временного хранения распакованных данных перед отправкой клиенту. Использование директивы `gunzip_buffers` может улучшить производительность за счёт оптимизации использования памяти во время процесса декомпрессии. По умолчанию директива может быть не задана, что означает, что NGINX будет использовать встроенные размеры буферов для обработки декомпрессированных данных. Администраторам может потребоваться настроить эти параметры в соответствии с особенностями их приложения, особенно при обработке больших файлов или при высокой нагрузке, где правильные размеры буферов могут предотвратить узкие места в производительности. В итоге эта директива универсальна и может повысить эффективность обработки ответов в NGINX при работе с Gzip-сжатым содержимым.

Пример конфига

http {
    gunzip on;
    gunzip_buffers 8 16k;
}

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

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

Если `gunzip` не включен, эта директива не окажет никакого эффекта.

gzip Директива gzip включает или отключает сжатие gzip в NGINX.
httpserverlocationif in location
Синтаксисgzip on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'gzip' в модуле HTTP Core NGINX используется для управления сжатием gzip для ответов, отправляемых клиентам. Включив эту директиву, NGINX будет сжимать ответы с помощью алгоритма gzip, что может существенно уменьшить размер передаваемых данных и улучшить время загрузки у клиентов. Сервер проверяет допустимые типы содержимого и возможности клиента (например, наличие заголовка 'Accept-Encoding: gzip'), чтобы определить, следует ли отвечать сжатым содержимым. Эта директива принимает булево значение: при установке в 'on' сжатие gzip включается, а 'off' отключает его. Кроме того, NGINX предоставляет несколько параметров конфигурации, которые могут уточнять поведение сжатия gzip, таких как 'gzip_types', задающий MIME-типы файлов для сжатия, и 'gzip_vary', указывающий, добавлять ли заголовок Vary к ответам, чтобы обозначить наличие другой версии для клиентов, которые не поддерживают gzip. Использование gzip может быть полезно для сокращения затрат на трафик и улучшения пользовательского опыта, особенно для текстовых файлов, таких как HTML, CSS и JavaScript. Важно использовать сжатие gzip осознанно, поскольку не все типы содержимого выигрывают от сжатия, и чрезмерное его применение может привести к ненужной нагрузке на CPU сервера.

Пример конфига

http {
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

Убедитесь, что модуль gzip включён при компиляции NGINX, так как он может быть исключён в некоторых сборках.

Чрезмерная компрессия уже сжатых файлов (например, изображений JPEG) не даст никакой пользы и может даже увеличить размер файла.

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

gzip_buffers Директива gzip_buffers управляет количеством и размером буферов, используемых для gzip-сжатия в NGINX.
httpserverlocation
Синтаксисgzip_buffers number size;
По умолчанию32 4k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива gzip_buffers задаёт количество и размер буферов, выделяемых для хранения сжатых данных при использовании gzip-сжатия ответов, отправляемых NGINX. Эта директива принимает два параметра: первый задаёт число буферов, а второй — размер каждого буфера. Например, конфигурация `gzip_buffers 16 8k;` означает, что будет выделено 16 буферов по 8 килобайт каждый. Эти буферы используются для хранения сжатого вывода перед отправкой клиенту, и оптимизация этих значений может существенно повлиять на производительность, особенно при высокой нагрузке. Выбор большего размера буфера может уменьшить количество операций записи в выходной поток, что повышает пропускную способность за счёт увеличенного использования памяти. Напротив, меньшие размеры буферов могут привести к более частым операциям записи, но снизить потребление памяти. Важно учитывать, что общий объём буферов также определяется общим количеством выделенной памяти, которое может быть ограничено системными настройками или объёмом памяти, занятой приложением. Неправильная настройка этих значений может привести к неэффективному использованию памяти или узким местам в производительности, особенно при работе с большими ответами или при высоких объёмах трафика.

Пример конфига

gzip on;
gzip_buffers 16 8k;

Установка чрезмерно больших размеров буферов может привести к перерасходу памяти и неэффективному управлению памятью.

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

gzip_types Директива `gzip_types` задаёт MIME-типы, которые должны сжиматься с помощью gzip.
httpserverlocation
Синтаксисgzip_types type [type ...];
По умолчаниюtext/html text/css text/xml application/javascript application/json;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_types` в NGINX используется для определения списка MIME-типов, которые должны сжиматься при включённом модуле `gzip`. Эта директива позволяет более точно контролировать, какие типы файлов подвергаются сжатию, оптимизируя доставку определённых типов содержимого и при этом потенциально исключая те, для которых сжатие может не дать значительного уменьшения размера. Директива принимает в качестве аргументов один или несколько MIME-типов. Указывая эти типы, вы гарантируете, что сжимаются только нужные типы содержимого, такие как текстовые файлы, что улучшает время загрузки и экономит трафик, не обрабатывая излишне нерелевантные типы файлов. Когда модуль gzip включён, он сравнивает заголовок ответа `Content-Type` с указанными MIME-типами в `gzip_types`. Если найдено совпадение, ответ сжимается перед отправкой клиенту. Эта функция особенно важна для текстового содержимого, такого как HTML, CSS, JavaScript и XML, поскольку позволяет существенно уменьшить размер и, следовательно, ускорить загрузку страниц. Тем не менее важно перечислять все релевантные MIME-типы, которые вы хотите сжимать, чтобы максимально повысить эффективность. Кроме того, следует учитывать особенности конкретных форматов файлов; например, некоторые бинарные форматы уже могут быть сжаты, из-за чего дополнительное сжатие с помощью gzip может быть малоэффективным или даже контрпродуктивным.

Пример конфига

gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml;

Для эффективного использования убедитесь, что модуль gzip включен в конфигурации NGINX.

Если MIME type не указан в gzip_types, он не будет сжат, даже если gzip включен.

Чрезмерное сжатие некоторых типов файлов, таких как изображения или видео, может привести к незначительной экономии места.

gzip_comp_level Директива gzip_comp_level задаёт уровень сжатия для кодирования содержимого gzip в NGINX.
httpserverlocation
Синтаксисgzip_comp_level level;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_comp_level` внутри NGINX HTTP Core module позволяет администраторам указать уровень сжатия, применяемого при отдаче содержимого, закодированного с помощью gzip. Допустимые значения находятся в диапазоне от 1 до 9, где 1 означает наименьшее сжатие (и наивысшую скорость обработки), а 9 указывает на максимальный уровень сжатия (что более ресурсоёмко для CPU). По умолчанию `gzip_comp_level` установлен в 1, то есть содержимое будет слабо сжиматься. Повышение этого значения улучшает коэффициент сжатия, что может сэкономить трафик; однако это также приводит к увеличению использования CPU в процессе сжатия. Этот компромисс необходимо тщательно учитывать, особенно для сайтов с большим трафиком, где чрезмерная нагрузка на CPU может повлиять на производительность. Кроме того, уровень сжатия применяется только к данным, подходящим для gzip-сжатия, таким как файлы HTML, CSS и JavaScript, как указано в других директивах `gzip`. Эта директива чувствительна к контексту и может быть определена в контекстах `http`, `server` или `location`, что позволяет гибко настраивать поведение в зависимости от конкретных потребностей. Установка её в контексте `http` применит указанный уровень сжатия глобально, тогда как настройки в контекстах `server` или `location` могут переопределять глобальную настройку для более тонкого контроля.

Пример конфига

http {
    gzip on;
    gzip_comp_level 5;
}

Установка слишком высокого уровня может привести к увеличению нагрузки на CPU, что потенциально скажется на производительности сервера.

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

gzip_window Директива gzip_window задаёт размер скользящего окна для сжатия gzip в NGINX.
httpserverlocation
Синтаксисgzip_window size;
По умолчанию16k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива gzip_window настраивает максимальный размер скользящего окна, используемого алгоритмом сжатия zlib, когда в NGINX включено сжатие Gzip. Она указывает, какую часть входных данных можно хранить в памяти при сжатии ответа. Больший размер окна может повысить эффективность сжатия, позволяя ссылаться на больше данных при обработке каждого байта выходных данных, что приводит к лучшим коэффициентам сжатия. Однако это также увеличивает использование памяти рабочими процессами NGINX, что может быть нежелательно в средах с ограниченными ресурсами памяти. Эта директива принимает один аргумент, который должен быть указан в bytes, то есть, возможно, его нужно задать как числовое значение без суффикса. При установке директивы включается использование указанного размера окна для сжатия Gzip, что повышает общую производительность и эффективность доставки контента по HTTP. Если директива не настроена, будет применена настройка по умолчанию, которая, в зависимости от типа и размера сжимаемого контента, может не полностью задействовать потенциал алгоритма Gzip. На практике пользователям следует тщательно оценивать объём памяти сервера перед увеличением этого значения, особенно в условиях высокой нагрузки или при обработке больших ответов, так как чрезмерное выделение памяти может привести к её исчерпанию и ухудшению производительности.

Пример конфига

gzip on;
 gzip_window 32k;  
 location / {
     gzip_types text/plain text/css application/json; 
     # any other configurations 
 }

Установка очень большого окна может привести к увеличению использования памяти на соединение и потенциально исчерпать доступную память.

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

gzip_hash Директива `gzip_hash` задаёт алгоритм хеширования, используемый для настроек gzip-сжатия в NGINX.
httpserverlocation
Синтаксисgzip_hash { algorithm | md5 | sha1 | crc32 };
По умолчаниюmd5
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_hash` является частью модуля HTTP Core NGINX, который управляет тем, как NGINX обрабатывает gzip-сжатие HTTP-ответов. Задавая метод хеширования, она оптимизирует хранение и извлечение параметров gzip для кэшированного содержимого, что обеспечивает лучшую производительность при высокой нагрузке. Эту директиву можно настроить с использованием различных алгоритмов хеширования, таких как `md5`, `sha1` или `crc32`, что позволяет администратору адаптировать отзывчивость и использование ресурсов при gzip-сжатии в зависимости от возможностей сервера и ожидаемого типа содержимого. Выбор метода хеширования может повлиять как на производительность, так и на размер сохраняемых флагов gzip, а следовательно — на общий объём потребляемой памяти. NGINX анализирует контекст сжатия и генерирует значения хеша на основе настроенных параметров, чтобы гарантировать уникальные идентификаторы для сжатого содержимого в соответствии с выбранной хеш-функцией. Директиву `gzip_hash` можно разместить в контекстах `http`, `server` или `location`, что даёт гибкость в конфигурации. Важно учитывать, что выбор более сложной хеш-функции может повысить уникальность записей, но при этом потреблять дополнительные CPU-циклы, поэтому рекомендуется учитывать конкретные потребности вашего приложения и ожидаемую нагрузку при её настройке.

Пример конфига

http {
    gzip on;
    gzip_hash sha1;
}

Убедитесь, что выбранный алгоритм хеширования поддерживается вашей версией NGINX.

Использование сложного алгоритма хеширования может увеличить нагрузку на CPU при минимальной пользе для эффективности сжатия.

Смена алгоритма хеширования влияет на то, как обрабатываются ранее кэшированные gzip-ответы, что может потребовать их регенерации.

postpone_gzipping Директива 'postpone_gzipping' управляет тем, когда NGINX применяет gzip-сжатие к ответам, что позволяет оптимизировать ресурсы сервера.
httpserverlocation
Синтаксисpostpone_gzipping on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'postpone_gzipping' в NGINX указывает, следует ли откладывать gzip-сжатие тел ответов до момента отправки заголовков ответа. По умолчанию сериализация данных ответа в формате gzip выполняется немедленно. Однако при установке в 'on' NGINX откладывает сжатие до отправки HTTP-заголовков, что может быть полезно в случаях, когда сервер должен отдать приоритет своевременной отправке заголовков клиенту по сравнению с затратами на сжатие. Эта настройка может оптимизировать использование ресурсов и улучшить воспринимаемую задержку, особенно для больших ответов. Директива может использоваться в различных контекстах, включая http, server и location блоки. При применении она принимает один аргумент — 'on' или 'off'. Если установлено 'on', NGINX отложит процесс gzip, что даёт гибкость в обработке определённых типов ответов или в конкретных фазах обработки запроса. Напротив, установка в 'off' или отсутствие указания приведёт к тому, что NGINX будет выполнять gzip немедленно, применяя любые настроенные параметры сжатия сразу после формирования тела ответа.

Пример конфига

http {
    gzip on;
    postpone_gzipping on;
}

Убедитесь, что использование 'postpone_gzipping on' не ухудшает время отклика при больших объёмах данных.

Помните, что этот параметр применяется к gzip-ответам; убедитесь, что ваша конфигурация корректно поддерживает сжатие gzip.

gzip_no_buffer Директива 'gzip_no_buffer' отключает буферизацию вывода сжатия gzip.
httpserverlocation
Синтаксисgzip_no_buffer on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_no_buffer` в NGINX используется для управления буферизацией вывода для ответов, сжимаемых gzip. При установке в 'on' эта директива позволяет NGINX отправлять сжатый вывод напрямую клиенту без предварительного буферизации всего ответа в памяти. Такое поведение особенно полезно для больших ответов или при необходимости потоковой передачи данных в реальном времени, поскольку оно снижает использование памяти и потенциально повышает пропускную способность за счёт отправки данных клиенту по мере их генерации. Напротив, установка директивы в 'off' (что является значением по умолчанию) включает буферизацию и позволяет удерживать весь ответ в памяти до его сжатия и отправки, что может быть выгодно для оптимизации доставки ответов, особенно когда сервер извлекает выгоду из дедупликации данных и эффективности сжатия. Директива принимает один флаговый аргумент: 'on' или 'off'. Когда она активирована, ответы отправляются напрямую без буферизации, тогда как при выключенной опции происходит стандартное буферизированное поведение. Важно отметить, что отключение буферизации может повлиять на производительность в отдельных сценариях, особенно при обработке большого числа одновременных запросов или больших ответов, поскольку накладные расходы на динамическое сжатие данных могут увеличить нагрузку на систему.

Пример конфига

http {
    gzip on;
    gzip_no_buffer on;
}

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

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

gzip_min_length Устанавливает минимальную длину тела ответа для Gzip-сжатия.
httpserverlocation
Синтаксисgzip_min_length size;
По умолчанию20
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`gzip_min_length` директива управляет минимальным размером тела ответа, при превышении которого оно может быть сжато с помощью Gzip в NGINX. Когда формируется ответ, если размер тела меньше указанной длины, оно не будет сжато. Это полезно для оптимизации производительности, поскольку сжатие небольших ответов может быть более ресурсоёмким по CPU, чем простая отправка их несжатыми. Директива принимает аргумент, определяющий минимальную длину в байтах, и может быть установлена в контекстах `http`, `server` или `location`. Это позволяет задавать разные конфигурации для различных уровней иерархии сервера. Путём настройки этого значения администраторы могут найти баланс между накладными расходами на сжатие и экономией сетевого трафика. Это особенно важно в сценариях, где ответы состоят из небольших ресурсов (например, изображений или скриптов), которые могут не получать существенной выгоды от Gzip-сжатия. Чтобы задать эту директиву, достаточно указать числовое значение, представляющее порог в байтах. Например, установка `gzip_min_length 1000;` означает, что любое тело ответа меньше 1000 байт будет отправлено несжатым, а более крупные тела будут сжаты. Такое поведение помогает смягчить падение производительности, вызванное обработкой большого количества маленьких сжатых файлов.

Пример конфига

http {
    gzip on;
    gzip_min_length 1000;
}

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

Если существует несколько конфигураций, эффективное значение может варьироваться в зависимости от контекста, в котором оно задано.

gzip_static Позволяет NGINX напрямую отдавать предварительно сжатые gzip-файлы, если они существуют на диске.
httpserverlocation
Синтаксисgzip_static on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_static` позволяет NGINX отдавать предварительно сжатые файлы с расширением `.gz` вместо сжатия файлов на лету. При включённой опции, если поступает запрос на сжатый ресурс, NGINX сначала проверит наличие соответствующего файла `.gz` в указанном расположении. Если такой файл найден, он будет отдан напрямую, минуя сжатие модуля `gzip` во время работы. Такой предварительно сжатый файл повышает производительность, особенно в периоды пиковой нагрузки, поскольку снижает нагрузку на CPU, связанную с динамическим сжатием `gzip`. Директива принимает один аргумент — `on` или `off`, указывающий, включить или выключить эту функцию. При установке в `on` NGINX проверяет наличие версий файлов, сжатых `gzip` (обычно с суффиксом `.gz`), при обработке запроса. Если такой файл недоступен, NGINX вернётся к отдаче обычного файла (если он существует) или вернёт ошибку, если не найден ни один из файлов. Такое поведение повышает эффективность доставки ресурсов, особенно для текстового содержимого, такого как HTML, CSS или JavaScript, где `gzip`-сжатие обычно даёт значительное уменьшение размера. Стоит отметить, что для эффективной работы `gzip_static` его часто комбинируют с директивой `gzip`, настроенной так, чтобы сжатие применялось к файлам на этапе сборки или развертывания. Кроме того, необходимо правильно управлять заголовками кэша, чтобы избежать отдачи устаревших данных при обновлении статических файлов.

Пример конфига

http {
    gzip_static on;

    server {
        location / {
            root /var/www/html;
        }
    }
}

Убедитесь, что файлы `.gz` корректно сгенерированы и помещены в ожидаемую директорию; в противном случае запросы не смогут вернуть сжатую версию.

Использование `gzip_static` не выполняет автоматического сжатия файлов; как исходные файлы, так и файлы `.gz` должны существовать, чтобы функция работала правильно.

Если `gzip_static` включён без соответствующей директивы `gzip` для динамического сжатия, пользователи могут не получить преимуществ для файлов, которые не были предварительно сжаты.

expires Директива 'expires' управляет автоматической установкой HTTP-заголовков 'Expires' и 'Cache-Control' для указанных ресурсов в NGINX.
httpserverlocationif in location
Синтаксисexpires time | epoch | max;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'expires' используется для установки времени жизни статических ресурсов, обслуживаемых NGINX. Определяя, как долго ресурс должен считаться актуальным, она помогает в кэшировании в браузере и оптимизации времени загрузки за счёт уменьшения количества запросов к серверу. Директива принимает в качестве аргумента значение времени, которое можно задать в секундах (например, '30s'), минутах (например, '5m'), часах (например, '12h') или днях (например, '1d'). Также доступны дополнительные опции: можно указать 'max' для неограниченного срока или 'epoch', чтобы установить время в прошлое. При установке директива 'expires' автоматически формирует соответствующие заголовки ответа для клиентских запросов. Её можно настроить в различных контекстах, включая 'http', 'server' и 'location'. Примечательно, что её также можно использовать внутри условных конструкций 'if' в блоке 'location' для более тонкого управления. Политики кэширования можно адаптировать для разных типов ресурсов, применяя несколько директив 'expires' в разных контекстах, что обеспечивает эффективную отдачу статических файлов.

Пример конфига

location /images {
    expires 30d;
}

Использование 'expires' в неподходящих контекстах может привести к непредвиденному поведению.

Недопонимание разницы между заголовками 'expires' и 'cache-control' может привести к путанице в политике кэширования.

Убедитесь, что 'expires' не конфликтует с другими настройками кэширования в NGINX.

add_header Директива `add_header` устанавливает заголовки HTTP-ответа в NGINX.
httpserverlocationif in location
Синтаксисadd_header name value [always];
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `add_header` позволяет включать определённые HTTP-заголовки в ответы, отправляемые NGINX. Это особенно полезно для параметров конфигурации, таких как политики безопасности (`Strict-Transport-Security`, `Content-Security-Policy`) или для управления поведением кэширования (`Cache-Control`, `Expires`). При указании она устанавливает заголовки для заданного контекста (http, server или location). Можно определить несколько заголовков с помощью нескольких директив `add_header`, и если заголовок уже существует, его значение можно изменить с помощью этой директивы. Важная особенность: `add_header` не перезаписывает существующие заголовки, если не используется параметр `always`, который гарантирует включение добавленных заголовков даже когда код ответа указывает на ошибку (например, 4xx или 5xx). Это позволяет управлять видимостью заголовков независимо от логики ответа приложения.

Пример конфига

server {
    listen 80;
    server_name example.com;
    add_header X-Frame-Options "DENY";
    location / {
        add_header Content-Security-Policy "default-src 'self'";
    }
}

Если вы забудете указать 'always', заголовки могут не включаться в ответах об ошибках (4xx/5xx).

Заголовки, добавленные в вложенном контексте (например, location), переопределят заголовки, определённые в родительском контексте (например, server).

Будьте осторожны с дублирующимися заголовками — при повторном определении в силу вступит только последнее значение.

add_trailer Директива `add_trailer` позволяет добавлять пользовательские заголовки в трейлер ответа в протоколах HTTP/2 и HTTP/3.
httpserverlocationif in location
Синтаксисadd_trailer name value ...;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `add_trailer` используется для указания пользовательских полей заголовков, которые включаются в секцию трейлера ответа в ответах HTTP/2 и HTTP/3. Трейлеры — это дополнительные HTTP-заголовки, отправляемые после тела сообщения. Это может быть полезно для включения метаданных или информации о статусе, которые определяются только после отправки основного полезного содержимого. Эта директива принимает 2–3 параметра: первый параметр — имя добавляемого заголовка, а последующие параметры — значения, которые нужно связать с этим заголовком. Значения могут включать variables, что делает директиву гибкой для динамического содержимого заголовков. Если указано несколько значений, они будут объединены через запятую. Важно отметить, что не все клиенты корректно обрабатывают трейлеры, поэтому разработчикам следует убедиться, что их приложения могут правильно работать с ответами, которые содержат информацию в трейлерах. Кроме того, при использовании этой директивы следует проявлять осторожность, так как она может повлиять на кэширование и поведение клиента в зависимости от добавляемых заголовков.

Пример конфига

server {
    location /example {
        add_trailer X-Custom-Trailer "Trailer Value";
    }
}

Не все клиенты поддерживают трейлеры ответа, что может ограничить применимость директивы `add_trailer`.

Убедитесь в правильном форматировании и допустимых именах заголовков, чтобы избежать проблем с некорректными HTTP-заголовками.

add_header_inherit Директива `add_header_inherit` позволяет применять унаследованные директивы заголовков на указанном уровне контекста в конфигурации NGINX.
httpserverlocationif in location
Синтаксисadd_header_inherit on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `add_header_inherit` управляет наследованием директив заголовков, установленных с помощью `add_header`. Когда эта директива задана, она позволяет любым директивам `add_header`, определённым в родительском контексте (например, http или server), наследоваться дочерними контекстами (например, location). Это особенно полезно для обеспечения согласованности заголовков на разных уровнях конфигурации без необходимости повторно определять заголовки в каждом контексте, что упрощает управление конфигурацией. Директива принимает один аргумент, который указывает, следует ли включить или отключить это наследование: значение `on` разрешает наследование, а `off` — запрещает его. По умолчанию наследование отключено, если оно явно не включено. Когда наследование включено, любые заголовки, добавленные в родительском контексте, автоматически будут включены в ответы дочернего контекста, что позволяет серверу поддерживать единообразные заголовки, такие как заголовки безопасности, политики кэширования или пользовательские заголовки, которые вы хотите применить глобально в конкретном блоке конфигурации. Это повышает как безопасность, так и производительность за счёт уменьшения избыточности определений заголовков в нескольких блоках контекста или в location.

Пример конфига

http {
    add_header X-Frame-Options "DENY";
    server {
        add_header_inherit on;
        location /api {
            # /api will inherit the X-Frame-Options header
        }
    }
}

Если `add_header_inherit` установлено в `off`, заголовки, определённые в родительских контекстах, не будут унаследованы, что может привести к отсутствию заголовков в ответах.

Убедитесь, что `add_header_inherit` определено на правильном уровне контекста, чтобы добиться желаемого поведения при наследовании заголовков.

add_trailer_inherit Директива `add_trailer_inherit` настраивает, наследуются ли трейлерные заголовки из проксируемых ответов в контексте HTTP-сервера NGINX.
httpserverlocationif in location
Синтаксисadd_trailer_inherit on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `add_trailer_inherit` предоставляет механизм для настройки того, как обрабатываются трейлерные заголовки (заголовки, отправляемые после основного тела ответа) в контексте проксируемого сервера. Когда директива включена, она позволяет наследовать эти трейлерные заголовки из ответа upstream-сервера и включать их в ответ, направляемый клиенту. Это особенно полезно при работе с кодировками передачи, такими как chunked, когда дополнительные заголовки нужно отправить в конце ответа, чтобы передать клиенту необходимые метаданные. Директива принимает один аргумент, который является логическим значением: либо 'on', либо 'off'. Если установлено 'on', NGINX включит любые трейлерные заголовки, полученные от upstream-сервера, в ответ, отправляемый клиенту. Если установлено 'off', эти заголовки включены не будут. Важно понимать, что наследование трейлерных заголовков может повлиять на поведение клиента, особенно в сценариях, связанных с HTTP/1.1 chunked-передачами. Поэтому при использовании этой директивы следует внимательно учитывать конфигурацию upstream-сервера и ожидания клиентов.

Пример конфига

http {
    server {
        location /example {
            proxy_pass http://upstream_server;
            add_trailer_inherit on;
        }
    }
}

Убедитесь, что upstream server действительно отправляет trailer headers; в противном случае включение данной directive не даст эффекта.

Чрезмерное использование trailer headers может привести к непредвиденному поведению со стороны клиента, если клиенты не обрабатывают их должным образом.

image_filter Директива image_filter в NGINX позволяет манипулировать и фильтровать файлы изображений на лету.
location
Синтаксисimage_filter filter_type [filter_options];
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива `image_filter` является частью модуля фильтрации изображений NGINX, который предоставляет возможности обработки файлов изображений с помощью заданных фильтров. Эту директиву можно использовать внутри блока `location`, чтобы включить операции, такие как изменение размера, обрезка и изменение формата изображений, отдаваемых веб‑сервером. Директива принимает от одного до трёх аргументов: тип фильтра, его параметры и необязательные флаги конфигурации. Фильтры могут включать такие опции, как изменение размера изображения до заданных размеров или изменение формата для оптимизации времени загрузки и уменьшения использования ресурсов. В зависимости от указанных фильтров и их конфигурации NGINX обрабатывает файлы изображений динамически при запросе, вместо выдачи статических копий, что может значительно улучшить производительность и гибкость.

Пример конфига

location /images {
    image_filter resize 800 600;
    image_filter_jpeg_quality 85;
    image_filter_cache on;
}

Убедитесь, что модуль image_filter включён в сборку NGINX; в противном случае директива не будет работать.

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

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

image_filter_jpeg_quality Устанавливает качество JPEG-изображений для их обработки в NGINX.
httpserverlocation
Синтаксисimage_filter_jpeg_quality number;
По умолчанию75
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `image_filter_jpeg_quality` позволяет указать качество JPEG-изображений при их обработке модулем фильтра изображений NGINX. Она принимает один аргумент, указывающий желаемый уровень качества в диапазоне от 1 до 100. Более низкое значение приводит к более сильному сжатию и ухудшению качества изображения, тогда как более высокое значение обеспечивает лучшее качество изображения, но увеличивает размер файлов. Если вы задаёте эту директиву в контексте `http`, `server` или `location`, NGINX применит указанную настройку качества ко всем JPEG-изображениям, обрабатываемым модулем фильтра изображений. Это особенно полезно для оптимизации доставки изображений за счёт баланса между размером файла и визуальным качеством, что может привести к улучшению времени загрузки и экономии пропускной способности для веб-приложений. Важно отметить, что эта директива будет работать только если модуль фильтра изображений включён и подключён в конфигурации NGINX. Особенность директивы в том, что при обслуживании изображений на сайте, где важны быстрые времена загрузки для пользователей, вам может потребоваться поэкспериментировать с настройкой качества, чтобы найти наилучший баланс между производительностью и внешним видом. Кроме того, изменения этой директивы потребуют перезагрузки конфигурации NGINX для вступления в силу.

Пример конфига

http {
    location /images {
        image_filter jpeg;
        image_filter_jpeg_quality 85;
    }
}

Установка слишком низкого значения качества может привести к заметно плохому качеству изображений.

Директива применяется только при использовании модуля image filter; убедитесь, что он включён.

Изменения этой директивы требуют перезагрузки конфигурации NGINX.

image_filter_webp_quality Задает качество изображений WebP при фильтрации в NGINX.
httpserverlocation
Синтаксисimage_filter_webp_quality quality;
По умолчанию75
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`image_filter_webp_quality` директива используется для определения уровня качества изображений WebP, которые создаются при использовании модуля image_filter в NGINX. Эта директива принимает один аргумент — целое число, задающее качество (от 0 до 100) выходного изображения WebP: 100 соответствует наивысшему качеству и наименьшей компрессии, а 0 даёт наименьшее качество и максимальную компрессию. Директива должна быть включена в файлы конфигурации в контекстах `http`, `server` или `location`, так как она предназначена для управления тем, как изображения обрабатываются и отдаются. При настройке `image_filter_webp_quality` расширяет возможности NGINX по обслуживанию изображений за счёт преобразования входящих изображений в формат WebP, который часто имеет меньший размер по сравнению с другими форматами, такими как JPEG или PNG, без значительной потери визуального качества. Эта конвертация выполняется на лету, если клиент поддерживает формат WebP, что определяется по заголовку `Accept` в HTTP-запросе. Правильная установка параметра качества позволяет разработчикам балансировать между чёткостью изображений и эффективностью размера файлов в зависимости от конкретных потребностей приложения, тем самым улучшая время загрузки и производительность для страниц с большим количеством изображений.

Пример конфига

location /images {
    image_filter png;
    image_filter_webp on;
    image_filter_webp_quality 85;
}

Убедитесь, что модуль image_filter включён и правильно настроен, поскольку эта директива работает только в соответствующем контексте.

Использование значения вне диапазона 0-100 может привести к ошибкам или неожиданному поведению при обработке изображений.

Учтите, что установка более высокого качества (близкого к 100) приведёт к увеличению размера файлов, что может повлиять на скорость загрузки.

image_filter_sharpen Директива 'image_filter_sharpen' применяет фильтр повышения резкости к изображениям, обслуживаемым NGINX.
httpserverlocation
Синтаксисimage_filter_sharpen amount;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'image_filter_sharpen' используется в HTTP-сервере NGINX для применения эффекта повышения резкости к изображениям, обрабатываемым модулем фильтра изображений. Эта директива может улучшить внешний вид изображений, увеличивая контраст на краях и в мелких деталях. Она принимает один параметр, задающий величину повышения резкости, который контролирует степень усиления резкости изображения. Чем выше значение, тем резче становится изображение, но чрезмерная резкость может привести к артефактам. При правильной настройке директива 'image_filter_sharpen' может размещаться в разных контекстах, таких как блоки http, server и location. Директиву следует использовать совместно с модулем фильтра изображений, который обрабатывает файлы изображений, отсылаемые NGINX. Если изображение не обрабатывается или модуль фильтра не включен, директива не окажет никакого эффекта. Эффективность повышения резкости также может варьироваться в зависимости от исходного качества изображения. Важно, чтобы пользователи указывали числовые значения (обычно в диапазоне от 0 до 100) для тонкой настройки степени применения эффекта повышения резкости. Правильная установка значения в соответствии с требованиями визуального вывода может значительно улучшить четкость изображения при сохранении естественного вида и предотвращении чрезмерной резкости.

Пример конфига

location /images {
    image_filter brighten 0.1;
    image_filter_sharpen 10;
}

Убедитесь, что модуль image filter включён в сборку NGINX, иначе эта директива не будет работать.

Использование чрезмерных значений резкости может привести к неестественному виду изображений и видимым артефактам.

Директива действует только для изображений, обработанных через image filter; статические изображения, отдаваемые без обработки, не будут затронуты.

image_filter_transparency Директива 'image_filter_transparency' управляет прозрачностью изображений, обрабатываемых модулем фильтра изображений NGINX.
httpserverlocation
Синтаксисimage_filter_transparency on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'image_filter_transparency' позволяет задавать уровень прозрачности изображений, обрабатываемых модулем фильтра изображений NGINX. Эта директива принимает булев флаг, который, при включении, указывает NGINX отображать изображения с применёнными настройками прозрачности. Это особенно полезно при отдаче изображений, которым необходимо сохранять прозрачный фон для веб‑элементов, таких как логотипы или иконки, гарантируя, что заданная прозрачность в файле изображения будет соблюдена при доставке. Когда эта директива установлена в 'on', фильтр изображений будет обрабатывать изображения так, чтобы сохранять или применять прозрачные области в соответствии с альфа-каналом файла изображения. Эта настройка полезна веб‑разработчикам, стремящимся оптимизировать отображение изображений в различных браузерах и на разных платформах. Она служит простым переключателем, изменяющим способ хранения и передачи данных изображения без необходимости дополнительной обработки или манипуляций на стороне клиента. Директива влияет на то, как рендерятся изображения, но не позволяет настраивать уровни прозрачности помимо двоичного выбора включения или отключения функции. В контексте конфигурации её можно задать внутри блоков http, server или location, что обеспечивает гибкое применение в разных областях настройки. Правильное использование этой директивы в сочетании с другими директивами модуля фильтра изображений может существенно повлиять на визуальное качество изображений, отдаваемых экземпляром NGINX, и, как следствие, улучшить общий пользовательский опыт веб‑приложений.

Пример конфига

location /images/ {
    image_filter on;
    image_filter_transparency on;
    try_files $uri =404;
}

Убедитесь, что image filter module скомпилирован вместе с NGINX; в противном случае эта директива не будет иметь эффекта.

Использование этой директивы в неправильном контексте (например, внутри 'http' или 'server', когда она должна быть в 'location') может привести к ошибкам конфигурации или предупреждениям.

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

image_filter_interlace Директива image_filter_interlace включает интерлейсинг для изображений, обрабатываемых модулем image filter в NGINX.
httpserverlocation
Синтаксисimage_filter_interlace on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива image_filter_interlace используется для управления тем, как изображения отдаются клиентам, особенно в отношении прогрессивного отображения. Когда интерлейсинг включён, изображения отправляются в браузер таким образом, что они могут загружаться и отображаться постепенно, улучшая восприятие пользовательского интерфейса при работе с большими изображениями на медленных соединениях. Директива принимает булев флаг: 'on' включает интерлейсинг, а 'off' отключает его. Это позволяет разработчикам выбирать, отдавать ли изображения в формате, позволяющем прогрессивное отображение, исходя из конкретного сценария использования и требований к производительности. Команду можно настроить в контекстах http, server или location, что позволяет применить её глобально или ограничить действие для отдельных мест. Например, включение этой директивы может быть особенно полезно при отдаче изображений галереи на сайте, поскольку пользователи будут видеть низкокачественную версию изображения во время загрузки, а не ждать полного рендеринга высококачественной версии. Важно учесть, что интерлейсинг обычно поддерживается только некоторыми форматами изображений (такими как PNG и JPEG) и может не приносить выигрыша во всех случаях. В средах, где производительность загрузки изображений критична, имеет смысл протестировать оба варианта, чтобы определить, какой обеспечивает наилучший пользовательский опыт.

Пример конфига

location /images/ {
    image_filter on;
    image_filter_interlace on;
}

Чересстрочная развертка в первую очередь влияет на изображения, поддерживающие прогрессивную загрузку, такие как JPEG и PNG; другие форматы могут от этого не выиграть.

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

image_filter_buffer Директива `image_filter_buffer` задаёт размер буфера, используемого для обработки изображений в NGINX.
httpserverlocation
Синтаксисimage_filter_buffer size;
По умолчанию4k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `image_filter_buffer` настраивает объём памяти, выделяемой для обработки изображений при использовании модуля фильтра изображений NGINX. Эта директива важна при работе с крупными изображениями, так как позволяет эффективно их обрабатывать и избегать чрезмерного выделения памяти, что могло бы привести к снижению производительности. Размер буфера позволяет веб‑серверу NGINX временно удерживать данные изображения в памяти при выполнении операций, таких как изменение размера, обрезка или модификация изображений, перед их отправкой клиентам. Эту директиву можно задавать в контекстах `http`, `server` или `location`. При указании она принимает один аргумент, обозначающий размер буфера в байтах. Если указанный размер недостаточен для обработки изображения, NGINX может вернуть ошибку или не суметь корректно обработать изображение. Поэтому важно убедиться, что буфер настроен соответствующим образом в зависимости от размера и типа изображений, которые обслуживаются или обрабатываются. На практике эта директива помогает поддерживать эффективность использования ресурсов сервера, одновременно обеспечивая возможность беспрепятственного выполнения операций с изображениями. При установке этого значения следует учитывать доступную память сервера и ожидаемую нагрузку, чтобы найти баланс между производительностью и потреблением памяти.

Пример конфига

location /images/ {
    image_filter buffer 16k;
    image_filter resize 200x200;
}

Использование слишком малого буфера может привести к ошибкам при обработке больших изображений.

Размер буфера должен быть степенью двойки и соответствовать ограничениям памяти сервера.

index Директива 'index' определяет файл по умолчанию, который будет возвращён при запросе директории.
httpserverlocation
Синтаксисindex file1 [file2 ...];
По умолчаниюindex.html index.htm
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'index' в NGINX указывает файл по умолчанию, который должен возвращаться, когда клиент запрашивает директорию. Эта директива особенно полезна в случаях, когда в директории нет файла 'index', указанного пользователем, или когда пользователь прямо запрашивает путь директории. Сервер будет искать указанные файлы 'index' в том порядке, в котором они перечислены, до тех пор, пока один не будет найден, либо пока не исчерпаются все варианты. Это позволяет настраивать поведение по умолчанию в зависимости от потребностей приложения. Можно указать несколько файлов 'index', разделяя их пробелами, и NGINX будет проверять наличие каждого файла в заданном порядке. Если ни один из указанных файлов 'index' не найден, NGINX вернёт ошибку 403 Forbidden или 404 Not Found в зависимости от настроек конфигурации. Такая гибкость делает директиву 'index' ключевой частью возможности NGINX бесшовно обслуживать динамические веб-приложения и статический контент.

Пример конфига

location / {
    index index.php index.html index.htm;
}

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

Помните, что если индексный файл не найден, может отображаться листинг каталога, если он включён; убедитесь, что это желаемое поведение.

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

limit_conn_zone Директива 'limit_conn_zone' создаёт область разделяемой памяти для ограничения количества одновременных подключений по указанному ключу.
http
Синтаксисlimit_conn_zone key zone=name:size;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'limit_conn_zone' используется в контексте HTTP для определения зоны памяти, где можно отслеживать количество подключений по заданному ключу (например, по удалённому адресу). Она позволяет установить ограничения на количество одновременно открытых подключений с одного IP‑адреса или по любому другому параметру, что помогает уменьшить злоупотребления или исчерпание ресурсов из‑за чрезмерного числа подключений. Директива принимает два аргумента: первый — ключ, который обычно использует переменные, такие как '$binary_remote_addr' для ссылки на удалённый адрес клиента, или '$servername' для ограничений по имени сервера. Второй аргумент определяет размер зоны разделяемой памяти (например, '10m' для 10 мегабайт). Эта зона памяти используется для хранения счётчиков подключений для указанных клиентов, обеспечивая эффективное отслеживание и ограничение подключений в реальном времени. В сочетании с директивой 'limit_conn' администраторы могут указать, сколько одновременных подключений разрешено для каждого ключа, повышая безопасность и производительность. Установленные ограничения по памяти гарантируют, что это отслеживание будет эффективным без чрезмерного потребления ресурсов.

Пример конфига

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        location / {
            limit_conn addr 10;
        }
    }
}

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

Не забудьте определить директиву 'limit_conn' в блоке server или location, чтобы после настройки зоны ограничение действительно вступило в силу.

limit_conn Директива `limit_conn` ограничивает количество одновременных подключений с одного IP address.
httpserverlocation
Синтаксисlimit_conn zone_name number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_conn` в NGINX используется для ограничения количества одновременных подключений, которые могут быть установлены с одного IP address к конкретному серверу или блоку location. Это важно для предотвращения злоупотреблений или перегрузки, вызванной слишком большим числом подключений, что может ухудшить производительность сервера. Директива принимает два аргумента: имя зоны и максимальное число подключений, разрешённых для каждого IP address. Директива работает совместно с `limit_conn_zone`, которая определяет разделяемую область памяти для отслеживания количества подключений с IP address. Когда поступает запрос, NGINX увеличивает счётчик подключений для исходного IP address в заданной зоне. Если количество подключений превышает установленный лимит, клиент получит ошибку 503 Service Unavailable. Счётчик подключений ведётся по каждому IP address и обычно хранится в памяти, что обеспечивает быструю проверку лимитов подключений без необходимости в постоянном хранилище. Это помогает управлять перегрузками и обеспечивает справедливое распределение ресурсов сервера между пользователями. Для реализации директивы администраторам необходимо задать лимит в соответствующем контексте (http, server или location) и убедиться, что настроена соответствующая директива `limit_conn_zone`. Баланс между определением зоны и установкой лимита в соответствии с ожидаемым трафиком является ключевым для эффективного использования этой директивы.

Пример конфига

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    server {
        location / {
            limit_conn addr 1;
        }
    }
}

Убедитесь, что директива `limit_conn_zone` определена перед использованием `limit_conn`, чтобы избежать ошибок конфигурации.

Будьте осторожны при установке ограничений; чрезмерно строгие лимиты могут блокировать законных пользователей или трафик.

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

limit_conn_log_level Директива `limit_conn_log_level` задаёт уровень логирования для ошибок превышения лимита подключений.
httpserverlocation
Синтаксисlimit_conn_log_level level;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_conn_log_level` используется для определения уровня логирования событий, когда число подключений превышает допустимый лимит, заданный директивой `limit_conn`. Это может помочь при отладке и мониторинге, поскольку позволяет администраторам оценивать серьёзность ситуации, регулируя степень подробности записей в журнале. Директива принимает один аргумент — уровень логирования, который может быть одним из предопределённых уровней NGINX, таких как `error`, `warn`, `info`, `notice` и т.д. В зависимости от выбранного уровня будет логироваться разное количество информации о нарушении ограничения подключений, что полезно для оперативного анализа и диагностики. Устанавливая эту директиву в разных контекстах, таких как HTTP, server или location blocks, вы получаете детальный контроль над тем, как регистрируются проблемы с лимитом подключений в различных частях вашего веб-приложения. Это целенаправленное логирование помогает выявлять конкретные проблемы на разных уровнях архитектуры вашего веб-сервера.

Пример конфига

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn addr 10;
    limit_conn_log_level warn;
    # Other settings...
}

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

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

limit_conn_status Директива `limit_conn_status` задаёт код состояния HTTP, возвращаемый при превышении лимита подключений.
httpserverlocation
Синтаксисlimit_conn_status code;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_conn_status` в NGINX задаёт код состояния HTTP, который будет возвращён клиентам, если их запрос превысит настроенные ограничения на количество подключений для данного контекста (http, server, or location). Эта директива позволяет администраторам настроить поведение ответа, обеспечивая более информативный интерфейс для пользователей, которые могут непреднамеренно попытаться установить больше подключений, чем разрешено конфигурацией NGINX. Когда нарушается лимит, заданный с помощью `limit_conn`, вместо возврата стандартного ответа 503 (Сервис недоступен), который может не дать пользователям понятной информации, может быть возвращён указанный код состояния. Это повышает ясность и помогает в процессе обработки ошибок для клиентских приложений. Код состояния должен быть допустимым HTTP-кодом, и, как правило, разумно избегать распространённых кодов успеха или перенаправления, чтобы не вводить в заблуждение. Для эффективного использования этой директивы рекомендуется оценить ожидаемое поведение клиентских приложений при превышении лимитов, поскольку код состояния, отличный от 503, может изменить то, как клиенты реагируют на проблемы с пропускной способностью. Например, код 429 (Слишком много запросов) может быть уместен, указывая, что пользователя ограничивают за чрезмерный доступ к ресурсам. Эта директива также может сочетаться с логами, адаптированными для мониторинга нарушений ограничений подключений.

Пример конфига

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    limit_conn addr 10;
    limit_conn_status 429;
}

Убедитесь, что код состояния является допустимым HTTP-кодом ответа, чтобы избежать непредвиденного поведения.

Использование директивы в неправильном контексте может привести к ошибкам конфигурации.

limit_conn_dry_run Директива `limit_conn_dry_run` позволяет тестировать лимиты соединений без их принудительного применения.
httpserverlocation
Синтаксисlimit_conn_dry_run on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_conn_dry_run` — это функция, позволяющая администраторам тестировать настройки лимитов соединений без фактического отказа в соединении. Когда она включена, сервер не блокирует соединения, превышающие заданные лимиты, но фиксирует в логах случаи, в которых эти лимиты были бы применены. Это особенно полезно при настройке и валидации конфигураций без влияния на опыт пользователей, поскольку позволяет администратору собрать данные о возможных последствиях введения лимитов до их полного применения. Директива может быть задана в контекстах `http`, `server` или `location` и принимает в качестве аргумента флаг (on/off). Когда она включена (установлена в 'on'), NGINX будет симулировать применение лимитов без блокировки дополнительных соединений. Важно отметить, что пока эта директива активна, реальные соединения не будут отклоняться, что даёт ясное представление об использовании относительно лимитов без нарушения работы. Тем не менее, администраторам следует проявлять осторожность при использовании этой директивы в продуктивной среде, поскольку сервер по‑прежнему будет записывать в логи случаи превышения лимитов, что может ввести в заблуждение при наблюдении, если директиву принять за реальное принудительное ограничение. Идеально использовать её временно при оценке конфигураций.

Пример конфига

http {
    limit_conn_zone $binary_remote_addr zone=addr:10m; 
    server {
        limit_conn addr 10;
        limit_conn_dry_run on;
    }
}

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

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

limit_req_zone Директива 'limit_req_zone' задаёт область общей памяти для ограничения скорости запросов по заданному ключу.
http
Синтаксисlimit_req_zone key zone=name:size;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'limit_req_zone' используется внутри контекста http конфигурации NGINX для определения области общей памяти, которая связана с механизмом ограничения скорости запросов. Она принимает три параметра: ключ, определяющий контекст, в котором будут учитываться запросы (например, IP-адрес клиента или переменная), имя зоны, в которой хранятся счётчики запросов, и максимальный размер этой области общей памяти. При правильной настройке NGINX группирует входящие запросы на основе заданного ключа и подсчитывает эти запросы с течением времени. Например, если ключ — IP-адрес клиента, NGINX будет отслеживать, сколько запросов поступает с каждого отдельного IP. Это позволяет администраторам предотвращать злоупотребления и ограничивать чрезмерное использование конкретных ресурсов. Функция ограничения запросов работает с использованием двух основных опций, burst и nodelay, которые можно указать совместно с директивой 'limit_req' для управления обработкой избыточных запросов. Выбранные параметры должны отражать потребности вашего развертывания, так как разные приложения могут требовать более высоких или низких лимитов и могут быть затронуты одновременными всплесками запросов от пользователей. Поэтому правильная настройка этих параметров критична, чтобы не ограничивать невольно легитимных пользователей, при этом эффективно смягчая злоупотребления.

Пример конфига

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

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

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

Убедитесь, что имя зоны уникально в конфигурации, чтобы избежать конфликтов.

limit_req Директива 'limit_req' контролирует скорость обработки запросов NGINX для защиты от чрезмерной нагрузки.
httpserverlocation
Синтаксисlimit_req zone=name [burst=number] [nodelay];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'limit_req' используется в NGINX для ограничения числа запросов, которые клиент может отправить на сервер за указанный период времени. Эта директива является частью HTTP Core Module и может применяться в разных контекстах, включая http, server, and location blocks. Основная цель этой директивы — контролировать трафик и предотвращать злоупотребления со стороны клиентов, отправляющих слишком много запросов, что может повлиять на производительность и стабильность сервера. Директива 'limit_req' принимает от одного до трёх параметров: 1. **zone** (обязательно): общая область памяти, в которой хранится конфигурация ограничения скорости запросов. 2. **burst** (опционально): позволяет обработать определённое количество избыточных запросов немедленно (без задержки), когда лимит кратковременно превышен. Значение burst допускает всплески трафика. 3. **nodelay** (опционально): если указано, избыточные запросы будут обработаны немедленно, если они не превышают значение burst; в противном случае они задерживаются в соответствии с ограничением скорости. Пользователям необходимо определить общую область памяти с помощью директивы 'limit_req_zone' перед использованием 'limit_req'. Ограничение скорости основано на параметрах, заданных в этих зонах, которые определяют, сколько запросов может исходить от определённого ключа (например, IP address) за указанный период.

Пример конфига

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=1r/s;
server {
    location /api {
        limit_req zone=mylimit burst=5 nodelay;
    }
}

Перед использованием 'limit_req' убедитесь, что зона разделяемой памяти правильно определена с помощью 'limit_req_zone'.

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

Использование 'nodelay' может вызвать резкие всплески трафика, если он настроен неправильно.

limit_req_log_level Директива `limit_req_log_level` задаёт уровень логирования для записей о лимитировании запросов в NGINX.
httpserverlocation
Синтаксисlimit_req_log_level level;
По умолчаниюerror
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_req_log_level` позволяет администраторам указать уровень серьёзности логирования, при котором нарушения лимитов запросов будут фиксироваться. Эта директива может быть определена в контекстах `http`, `server` или `location` и принимает один аргумент, задающий уровень логирования. Доступные уровни включают `error`, `warn`, `info`, `debug` и т.д. По умолчанию, если не настроено иначе, NGINX использует уровень логирования `error` для записей о лимитировании запросов. Когда лимиты запросов, определённые с помощью директивы `limit_req_zone`, превышаются, NGINX может логировать эти события согласно указанному уровню логирования. Это важно для мониторинга: позволяет настроить подробность логов в соответствии с оперативными требованиями или устранять проблемы, связанные с ограничением трафика. Особенно полезно в средах с высоким трафиком, где избыточное логирование может скрывать критически важную информацию. Механизм логирования интегрирован с возможностями логирования ошибок NGINX, поэтому вы можете просматривать эти журналы, чтобы выявлять закономерности и предпринимать соответствующие действия для оптимизации обработки запросов.

Пример конфига

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    limit_req_log_level warn;
}

Установка очень высокого уровня логирования, например debug, может привести к генерации чрезмерного объёма логов, что может быстро заполнить дисковое пространство.

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

limit_req_status Директива `limit_req_status` задаёт HTTP-код состояния, возвращаемый клиентам, когда запрос отклоняется из-за ограничения скорости.
httpserverlocation
Синтаксисlimit_req_status code;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `limit_req_status` является частью модуля NGINX HTTP Core и используется совместно с механизмами ограничения скорости, реализованными директивой `limit_req`. Когда клиент превышает допустимую частоту запросов, в ответ на отклонённые механизмом ограничения запросов обращения возвращается указанный HTTP-код состояния. Это позволяет отправлять пользовательское сообщение, например 503 Service Unavailable, чтобы уведомить клиента о применённом ограничении вместо простого отказа в обработке его запросов. Эта директива принимает один аргумент: требуемый HTTP-код состояния, который будет отправлен в ответе при превышении лимитов запросов. Пользователи могут указать любой допустимый HTTP-код состояния, что обеспечивает гибкость в зависимости от требований их приложения. Чаще всего используются коды 503 (недоступность сервиса) или 429 (слишком много запросов). Важно отметить, что директива влияет только на те запросы, которые не обрабатываются из-за ограничений, и не затрагивает успешно обработанные запросы, находящиеся в пределах лимитов. Как директива конфигурации она может быть определена на уровнях контекстов `http`, `server` или `location`, что даёт возможность применять разные коды состояния в зависимости от области приложения. Разработчикам следует убедиться, что указанный код состояния согласуется с логикой обработки ошибок их приложения и ожиданиями пользователей при применении ограничения скорости.

Пример конфига

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
    location / {
        limit_req zone=one;
        limit_req_status 503;
    }
}

Использование недопустимого кода состояния может привести к непредсказуемому поведению или ошибкам в клиентских приложениях.

Если `limit_req` настроен неправильно, клиенты могут не получать заданный статус, поскольку директива не действует без активного ограничения скорости.

limit_req_dry_run Директива limit_req_dry_run позволяет тестировать ограничение частоты запросов без фактического применения.
httpserverlocation
Синтаксисlimit_req_dry_run on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива limit_req_dry_run специально разработана для упрощения разработки и тестирования конфигураций ограничения частоты запросов в NGINX. При включении она фактически моделирует эффект ограничения частоты запросов, обрабатывая запросы без применения реальных ограничений. Это особенно полезно в ситуациях, когда администраторы хотят наблюдать, сколько запросов было бы обработано и потенциально отклонено из‑за превышения лимитов, не влияя на рабочий трафик. Эта директива принимает бинарный аргумент — либо on, либо off. При установке в on NGINX выполняет проверки ограничения частоты запросов в соответствии с другими директивами, такими как limit_req_zone, но не отклоняет запросы на основании этих лимитов. Вместо этого в логах будет отмечено, были ли превышения. Это позволяет тонко настраивать параметры ограничения частоты запросов и убеждаться, что всё работает как предсказано перед полноценным развёртыванием. Директива чувствительна к контексту и может быть сконфигурирована внутри блоков http, server или location в конфигурациях NGINX. Используя limit_req_dry_run, администраторы могут собирать данные о поведении и шаблонах запросов, что помогает эффективно определить подходящие лимиты частоты, которые следует применить после отключения директивы. Однако важно помнить, что при включённом режиме тестирования фактическое ограничение частоты запросов не будет действовать, что может привести к незамеченным всплескам трафика, если лимиты будут установлены слишком высоко после начала принудительного применения.

Пример конфига

http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

    server {
        location / {
            limit_req zone=one;
            limit_req_dry_run on;
        }
    }
}

Использование limit_req_dry_run в рабочем окружении без тщательного обдумывания может привести к тому, что неожиданно большой объём трафика будет пропущен и не будет отслеживаться.

Обязательно отключите dry run mode перед окончательным развертыванием, чтобы обеспечить соблюдение лимитов скорости и избежать перегрузки трафика.

log_format Директива 'log_format' определяет формат логов, записываемых NGINX.
http
Синтаксисlog_format name format_string;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'log_format' используется в контексте 'http' для указания того, как должны форматироваться записи логов. Каждая запись журнала может включать переменные, представляющие различные параметры запроса и сервера, такие как IP-адрес клиента, метод запроса, статус ответа и другие. По умолчанию записи логов генерируются в простом формате, но использование директивы 'log_format' позволяет настроить формат в соответствии с конкретными потребностями логирования. Эта директива требует как минимум двух аргументов, включая имя формата лога и собственно строку формата, задающую желаемый макет вывода для записей логов. Строка формата может включать различные переменные (например, $remote_addr для IP клиента, $request_time для длительности запроса) и статический текст. Параметры также могут включать условные значения и специальные параметры форматирования для повышения детализации логирования. Кроме того, после определения формата лога он может быть использован в директиве 'access_log', которая управляет тем, куда записываются логи. В одной конфигурации NGINX можно определить несколько форматов логов, что обеспечивает гибкость для различных сценариев логирования.

Пример конфига

log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';

access_log /var/log/nginx/access.log main;

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

Будьте осторожны с влиянием на производительность, если пользовательские форматы включают ресурсоёмкие переменные, такие как $request_body.

Форматы логов должны иметь уникальные имена в одном и том же контексте, чтобы избежать конфликтов. Использование одного и того же имени формата может привести к неожиданным результатам.

access_log Директива access_log в NGINX указывает путь к файлу журнала для запросов, обрабатываемых сервером.
httpserverlocationif in locationlimit_except
Синтаксисaccess_log path [format];
По умолчаниюnone
Контекстhttp, server, location, if in location, limit_except
МодульNGINX HTTP Core

Описание

Директива access_log является важной частью сервера NGINX, позволяя вести логирование всех запросов, поступающих на сервер. Её можно настроить для записи сообщений в файл, а также использовать различные форматы журналов. Основные аргументы этой директивы включают путь к файлу журнала и необязательные параметры, задающие формат журнала и уровень логирования. Например, в типичной конфигурации можно использовать `access_log /var/log/nginx/access.log;`, чтобы указать, куда NGINX должен записывать журналы доступа.

Пример конфига

http {
    access_log /var/log/nginx/access.log;
} 
server {
    access_log /var/log/nginx/server_access.log main;
}

Убедитесь, что каталог, в который будет записан файл журнала, существует; иначе NGINX не сможет регистрировать события доступа.

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

open_log_file_cache Директива `open_log_file_cache` повышает производительность ведения логов за счёт кэширования дескрипторов файлов журналов.
httpserverlocation
Синтаксисopen_log_file_cache zone=name:size timeout=duration max=number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `open_log_file_cache` применяется в контекстах http, server и location для улучшения производительности при доступе к файлам журналов. Путём кэширования дескрипторов файлов журналов она уменьшает накладные расходы при доступе к файлам, особенно при одновременной записи в логи. Эта директива принимает до четырёх параметров, которые могут задавать такие настройки, как размер кэша, timeout и максимально допустимое число записей в кэше. Параметры указываются в следующем формате: `open_log_file_cache zone=name:size timeout=duration max=number;`. Параметр `zone` задаёт имя и размер сегмента разделяемой памяти, используемого кэшем. Параметр `timeout` определяет, как долго кэш считается действительным прежде чем файл повторно проверяется на своё состояние, а параметр `max` ограничивает максимальное количество элементов файлов, которые могут храниться в кэше. При правильной конфигурации использование этой директивы может привести к снижению задержки при записи логов, особенно при высокой нагрузке на сервер или большом количестве одновременных операций записи. Однако необходимо внимательно подойти к выбору размера кэша и параметров времени жизни, чтобы эффективно оптимизировать как производительность, так и использование памяти.

Пример конфига

http {
    open_log_file_cache zone=logs_cache:10m timeout=30s max=1000;
}

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

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

map Директива 'map' создаёт переменную, значение которой устанавливается на основе указанного входного значения, что упрощает условную конфигурацию в NGINX.
http
Синтаксисmap $input_variable $output_variable { block; }
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `map` — мощная функция в NGINX, которая позволяет определить переменную, значение которой может динамически изменяться в зависимости от значения другой переменной. Эта директива упрощает реализацию условной логики внутри блоков конфигурации, сопоставляя входные значения с выходными значениями или настройками. Она особенно полезна, когда нужно настроить такие аспекты, как перенаправления, перезаписи или установка заголовков на основе свойства запроса — например, IP-адреса, User-Agent или любых других атрибутов запроса. Директива `map` принимает два параметра: первый — переменная, которая будет оцениваться, а второй — блок, определяющий возможные входные значения и соответствующие им выходные значения. Каждая запись в блоке может указывать конкретное значение и результирующее значение, которое должно быть присвоено отображаемой переменной; это делается с помощью синтаксиса: `set $variable_name value;`. Также можно задать значение по умолчанию с помощью 'default'. Если ни одно из указанных значений не совпадает, применяется значение по умолчанию. Такая гибкость обеспечивает ясность конфигурации и сокращает избыточность условных директив в других частях конфигурационных файлов NGINX. Например, используя директиву `map`, вы можете упростить процесс установки заголовков на основе кода страны пользователя, определённого по его IP-адресу, устраняя необходимость в многочисленных if-else конструкциях.

Пример конфига

map $http_user_agent $browser_type {
    default unknown;
    ~*MSIE  Internet Explorer;
    ~*Chrome Chrome;
    ~*Firefox Firefox;
};

Убедитесь, что директива 'map' определена в правильном контексте (http), чтобы избежать ошибок конфигурации.

При использовании regex-шаблонов убедитесь, что специальные символы корректно экранированы, чтобы предотвратить непредвиденное поведение.

Учтите, что если совпадение не найдено и значение по умолчанию не задано, mapped variable останется пустым.

map_hash_max_size Задаёт максимальный размер хеш-таблиц, используемых для отображения ключей в значения в HTTP-ядре NGINX.
http
Синтаксисmap_hash_max_size size;
По умолчанию512
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `map_hash_max_size` используется для задания максимального размера хеш-таблицы, в которой хранятся значения маппинга NGINX. Эта директива особенно важна для оптимизации производительности, позволяя тонко настраивать использование памяти, связанное с операциями поиска на основе хеширования. Структуры хеш-таблицы могут расширяться в зависимости от количества добавляемых записей, но если они превышают заданный максимальный размер, это может привести к неопределённому поведению или ухудшению производительности при поисках. Значение, задаваемое в этой директиве, должно быть положительным целым числом и напрямую соответствует максимальной ёмкости хеш-таблицы в байтах. При настройке сервера NGINX важно помнить, что значение по умолчанию для этой директивы может различаться в зависимости от версии NGINX и особенностей системной среды. Внимательный подход к установке этого параметра может улучшить обработку запросов по мере роста размера сервера и увеличения числа одновременных запросов, особенно при значительных нагрузках. Однако чрезмерно большой размер может привести к неэффективному использованию памяти. Для обеспечения стабильности администраторам следует отслеживать использование памяти относительно заданного здесь максимального размера и при необходимости корректировать его при масштабировании сервера.

Пример конфига

http {
    map_hash_max_size 1024;
}

Установка слишком малого максимального размера может вызвать коллизии в хэш-таблице и ухудшить производительность.

Если `map_hash_max_size` задан слишком большим, это может привести к чрезмерному использованию памяти, если сервер не требует столь большого объема.

map_hash_bucket_size Определяет размер hash bucket для хранения ключей в модуле NGINX map.
http
Синтаксисmap_hash_bucket_size size;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `map_hash_bucket_size` задаёт размер hash bucket в структуре NGINX map, что важно для эффективного сопоставления ключ-значение в конфигурации сервера. Эта директива помогает оптимизировать построение хеш-таблиц, влияя на скорость поиска и уменьшая вероятность коллизий хешей. Если размер hash bucket слишком мал по сравнению с количеством ключей, это может привести к увеличению числа коллизий и ухудшению производительности. Напротив, слишком большое значение может привести к избыточному расходу памяти, поскольку каждая корзина потребляет память, даже если она используется не полностью. Для корректной настройки `map_hash_bucket_size` учитывайте ожидаемое количество ключей и средний размер этих ключей. Подходящий размер может улучшить производительность директив, которые полагаются на отображение, таких как `map`, используемая для создания новой переменной, значение которой зависит от значения существующей переменной. Используйте эту директиву в контексте `http`, так как она применяется глобально ко всем конфигурациям сервера. Размер hash bucket задаётся в байтах, что позволяет точно контролировать использование памяти во время работы NGINX.

Пример конфига

http {
    map_hash_bucket_size 64;
}

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

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

Директива действует только если map используется в конфигурации — если директивы map не применяются, эта настройка не будет иметь эффекта.

memcached_pass Директива `memcached_pass` используется для маршрутизации запросов к серверу memcached.
locationif in location
Синтаксисmemcached_pass address;
По умолчаниюnone
Контекстlocation, if in location
МодульNGINX HTTP Core

Описание

Директива `memcached_pass` позволяет серверу NGINX передавать запросы кэшированных данных на указанный сервер memcached. Эта директива полезна в ситуациях, когда вы хотите кэшировать страницы или данные для более быстрого доступа и требуется получать их из memcached backend. Директива принимает один аргумент — адрес сервера memcached, и может располагаться внутри location block или внутри if block в пределах location.

Пример конфига

location /cache {
    memcached_pass 127.0.0.1:11211;
}

Убедитесь, что сервер memcached запущен и доступен по указанному адресу.

Не используйте `memcached_pass` внутри блока `try_files`, так как он может работать не так, как ожидается.

Ошибки конфигурации могут привести к тому, что NGINX не сможет установить соединение с сервером memcached.

memcached_bind Директива 'memcached_bind' задаёт адрес, на котором будет слушать сервер memcached.
httpserverlocation
Синтаксисmemcached_bind address [address ...]
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'memcached_bind' имеет решающее значение для настройки сервера memcached в NGINX и позволяет указать, на каких IP-адресах или интерфейсах он будет слушать. По умолчанию директива привязывается к универсальному адресу (0.0.0.0), что позволяет подключениям с любых адресов. Однако, если вы хотите ограничить доступ в целях безопасности или оптимизации сетевой производительности, эта директива может указывать один или несколько адресов, к которым будет привязан memcached. Директива принимает один или два параметра. Первый параметр — это IP-адрес (или hostname), который будет использоваться для привязки, а второй — необязательная спецификация порта. Если порт не указан, директива по умолчанию использует стандартный порт memcached, 11211. Используя директиву 'memcached_bind', администраторы могут контролировать, какие socket connections принимаются сервером memcached, повышая безопасность и обеспечивая, что запросы исходят от доверенных клиентов. Поведение директивы настраивается на уровнях контекстов http, server или location, что делает её гибкой для различных сценариев использования. Когда указано несколько адресов, NGINX будет слушать на всех них, обеспечивая более широкую доступность для клиентов, желающих подключиться к сервису memcached. Однако важно отметить, что привязка к адресу localhost (127.0.0.1) может помочь предотвратить несанкционированный удалённый доступ, если сервис не должен быть доступен извне.

Пример конфига

memcached_bind 192.168.1.10 127.0.0.1;

Указание 0.0.0.0 может подвергнуть службу нежелательному трафику; предпочтительнее привязывать её к конкретному IP-адресу, если безопасность вызывает опасения.

Неуказание адреса может привести к недоступности службы, если NGINX работает в ограниченной сетевой среде.

memcached_socket_keepalive Эта директива включает или отключает функцию TCP keepalive для сокетного соединения memcached.
httpserverlocation
Синтаксисmemcached_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_socket_keepalive` используется для управления настройками TCP keepalive для соединений с сервером memcached. Включение этой директивы заставляет NGINX периодически отправлять keepalive-пакеты, чтобы поддерживать неактивные соединения с сервером memcached открытыми и предотвращать их закрытие из-за простоя. Это особенно полезно в сценариях, когда NGINX обрабатывает большой объём запросов и должен поддерживать стабильные соединения с сервером memcached для повышения производительности. Использование директивы зависит от контекста: её можно задать на уровнях `http`, `server` или `location`, что позволяет гибко настраивать поведение в зависимости от области применения. Директива принимает флаг в качестве параметра, который может быть установлен в 'on' либо 'off'. При значении 'on' будут отправляться keepalive-пакеты, тогда как 'off' отключает эту функцию. Параметры keepalive могут отличаться в зависимости от опций сокетов операционной системы, поэтому важно убедиться, что keepalive поддерживается и корректно настроен как на стороне клиента (NGINX), так и на стороне сервера (memcached), чтобы эффективно использовать эту функциональность. Если не задано, NGINX не будет отправлять keepalive-пакеты, что может привести к разрывам соединений при ограничениях сети или длительном простое.

Пример конфига

http {
    memcached_socket_keepalive on;
    
    server {
        location /cache {
            memcached_pass 127.0.0.1:11211;
        }
    }
}

Включение keepalive может увеличить число открытых соединений, что при отсутствии мониторинга потенциально приведёт к исчерпанию системных ресурсов.

Не все версии memcached поддерживают TCP keepalive — убедитесь в совместимости перед использованием.

Конфигурации keepalive в операционной системе могут потребовать настройки для достижения оптимальной производительности.

memcached_connect_timeout Устанавливает таймаут подключения к серверу memcached в контексте HTTP-сервера NGINX.
httpserverlocation
Синтаксисmemcached_connect_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_connect_timeout` задаёт максимальное время в миллисекундах, в течение которого NGINX будет ожидать успешного подключения к серверу memcached, прежде чем произойдёт тайм-аут. Это особенно важно в сценариях, где критичны высокая производительность и быстрые отклики, например при кешировании часто запрашиваемых данных для сокращения времени загрузки веб‑приложений. Настраивая этот таймаут, администраторы могут найти баланс между отзывчивостью и обработкой медленных сетевых условий. Директива принимает числовое значение, обозначающее длительность тайм-аута. Необходимо настраивать этот таймаут исходя из ожидаемого времени отклика серверов memcached, чтобы избежать лишних задержек при обработке запросов. Если подключения регулярно превышают этот таймаут, это может указывать на проблемы в сети или перегрузку служб memcached. В таких случаях стоит проверить состояние серверов memcached или рассмотреть необходимость масштабирования. Директива `memcached_connect_timeout` настраивается на уровнях `http`, `server` и `location`, что позволяет гибко подбирать параметры в зависимости от требований конкретного приложения.

Пример конфига

memcached_connect_timeout 30s;

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

Слишком короткий таймаут может привести к частым сбоям соединения и ошибкам в вашем приложении.

Не путайте эту директиву с `memcached_read_timeout`, так как они служат разным целям.

memcached_send_timeout Задает таймаут для отправки запросов на сервер memcached.
httpserverlocation
Синтаксисmemcached_send_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_send_timeout` задаёт таймаут для отправки запросов на сервер memcached в конфигурации NGINX. Она предназначена для управления максимальным временем, в течение которого NGINX может ждать при отправке данных на сервер memcached перед закрытием соединения. Этот таймаут важен для предотвращения бесконечного ожидания в случаях проблем с сетью или недоступности сервера, обеспечивая возможность своевременного повтора запросов или их завершения. Директива принимает один аргумент, задаваемый в секундах или в формате времени, например `m` для минут, `h` для часов и т.д. Когда указанный таймаут истекает, NGINX закроет соединение с сервером memcached. Это особенно полезно в условиях высокой нагрузки, когда время отклика может варьироваться, и соединения не должны удерживаться открытыми без необходимости, что может привести к исчерпанию ресурсов. `memcached_send_timeout` можно использовать в контекстах `http`, `server` или `location`, что позволяет гибко настраивать параметры на разных уровнях архитектуры сервера. Установка соответствующего таймаута помогает поддерживать оптимальную производительность и отзывчивость приложений, использующих memcached для кэширования данных.

Пример конфига

memcached_send_timeout 30s;

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

Учтите, что этот таймаут применяется только к отправке запросов; он не влияет на получение ответов от сервера memcached.

memcached_buffer_size Директива `memcached_buffer_size` задаёт размер буфера, используемого для хранения ответов от сервера memcached.
httpserverlocation
Синтаксисmemcached_buffer_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_buffer_size` в NGINX задаёт размер буфера, предназначенного для хранения ответов, полученных от указанного сервера memcached. Размер этого буфера измеряется в байтах и может быть критически важен для оптимизации производительности, особенно при обработке больших объёмов данных или при высокой нагрузке. Оптимизируя размер буфера, пользователи могут обеспечить, чтобы ответы с комфортом помещались в выделенном объёме, что уменьшает необходимость в частых выделениях памяти и повышает производительность при извлечении данных. Когда выполняется запрос к кэшированным данным, ответ от memcached сохраняется в этом буфере до обработки и отправки клиенту. Если ответ превышает выделенный размер буфера, это может привести к снижению производительности или увеличению задержки из-за дополнительной обработки и накладных расходов на управление памятью. Установка подходящего размера буфера, таким образом, может повысить пропускную способность и сократить время отклика. Директиву можно использовать в разных контекстах, включая `http`, `server` и `location`, что обеспечивает гибкость конфигурации в различных областях иерархии конфигурации NGINX. Правильное управление размером буфера особенно полезно в средах с высокой нагрузкой, где скорость и эффективность имеют первостепенное значение.

Пример конфига

memcached_buffer_size 32k;

Установка слишком маленького размера буфера может привести к проблемам с производительностью при обработке больших ответов от серверов memcached.

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

Убедитесь, что размер буфера соответствует ожидаемым размерам данных, хранящихся в memcached, для оптимальной производительности.

memcached_read_timeout Директива `memcached_read_timeout` задаёт таймаут чтения ответа от сервера memcached.
httpserverlocation
Синтаксисmemcached_read_timeout time;
По умолчанию60s (1 minute)
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_read_timeout` задаёт максимальное время (в секундах), в течение которого NGINX будет ожидать чтения ответа от сервера memcached. Этот таймаут критически важен для того, чтобы ваше приложение не зависало бесконечно в ожидании ответа. Если указанное время ожидания будет превышено, NGINX вернёт ошибку клиенту, что позволит лучше контролировать время отклика и доступность приложения. Директиву можно настроить в контекстах `http`, `server` или `location`, что даёт гибкость в зависимости от требуемой области действия настройки таймаута. Значение директивы должно задаваться в секундах, фактически определяя, как долго сервер будет ждать получения ответа прежде чем отказаться. Правильные настройки помогут предотвратить чрезмерное потребление ресурсов из-за зависших соединений. При настройке этого таймаута важно учитывать ожидаемое время отклика вашего бэкенда memcached. Слишком низкое значение может привести к частым тайм-аутам чтения при нормальной работе, тогда как слишком высокое может ухудшить пользовательский опыт из-за задержек в ответах. Директива позволяет оптимально настраивать производительность в зависимости от конкретных требований приложения.

Пример конфига

location /cache {
    memcached_pass backend;
    memcached_read_timeout 10s;
}

Установка слишком малого таймаута может привести к частым ошибкам чтения, что нарушит работу сервиса.

Отсутствие таймаута или его неверная настройка могут вызвать длительные задержки при обработке клиентских запросов.

memcached_next_upstream Директива `memcached_next_upstream` настраивает поведение NGINX при ошибке соединения с memcached-сервером.
httpserverlocation
Синтаксисmemcached_next_upstream error | timeout | invalid_header;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_next_upstream` — важная часть конфигурации NGINX, которая задаёт условия, при которых запрос будет передан следующему upstream-серверу в модуле memcached. Она используется в сценариях, где NGINX настроен как сервер кэширования и подключается к одному или нескольким memcached-серверам. Определяя эту директиву, администраторы могут указать NGINX повторить попытку или пропустить конкретный запрос при различных условиях отказа, таких как таймауты, отказ в подключении или другие операционные ошибки. Директива принимает один или несколько параметров, описывающих типы ошибок, при которых следует перейти к следующему upstream-серверу. Например, в типичной конфигурации используются параметры, такие как `error`, `timeout` и `invalid_header`, которые указывают NGINX попробовать следующий сервер независимо от характера сбоя. Позволяя тонко настраивать такое поведение, администраторы могут оптимизировать стратегии получения кэша, повысить надёжность сервиса и корректно обрабатывать временные сбои upstream-серверов. Важно настраивать эту директиву в соответствии с желаемым поведением при сбоях сервера, так как чрезмерные повторные попытки могут привести к увеличению задержек и расходу ресурсов. Контекст использования этой директивы включает `http`, `server` и `location`, что делает её гибкой для разных архитектур конфигурации. По сути, правильная настройка `memcached_next_upstream` необходима для балансировки производительности и надёжности в приложениях, которые сильно зависят от механизмов кэширования.

Пример конфига

location /memcached/ {
    memcached_pass 127.0.0.1:11211;
    memcached_next_upstream error timeout;
}

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

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

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

memcached_next_upstream_tries Директива `memcached_next_upstream_tries` задаёт, сколько серверов memcached будет опробовано перед тем, как запрос будет считаться неудачным.
httpserverlocation
Синтаксисmemcached_next_upstream_tries number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `memcached_next_upstream_tries` в NGINX указывает количество серверов memcached, к которым будет предпринята попытка обращения при взаимодействии с бэкенд-кэшем в случае возникновения определённых ошибок. Основная цель директивы — повысить отказоустойчивость при обращении к кэшу, позволяя NGINX повторно отправлять запросы на другой сервер memcached, если текущий недоступен или возвращает ошибку. Это особенно полезно в окружениях с несколькими серверами memcached для балансировки нагрузки и резервирования. Если запрос к серверу memcached завершается неудачей из-за проблемы с соединением или ошибки сервера, NGINX повторит запрос на другом сервере memcached до числа попыток, указанного этой директивой. Если все указанные попытки завершатся неудачей, запрос в конечном итоге вернёт ошибку клиентскому приложению. Важно учитывать, что эффективная работа этой директивы требует наличия нескольких серверов memcached, определённых в ваших настройках memcached; в противном случае директива не окажет никакого эффекта. Параметр директивы — простое целое число, задающее количество попыток повтора. Его можно установить в `0`, чтобы отключить попытки на альтернативных серверах, или в `1` и более для указания конкретного числа повторов. Слишком большое число повторов может привести к увеличению времени ответа, тогда как слишком малое — к более частым отказам, если серверы чувствительны к временным сбоям.

Пример конфига

location /memcached {
    memcached_pass 127.0.0.1:11211;
    memcached_next_upstream_tries 3;
}

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

Если другие серверы memcached не настроены, увеличение retries не даст эффекта, поскольку отсутствуют альтернативные серверы для подключения.

memcached_next_upstream_timeout Директива memcached_next_upstream_timeout задаёт тайм-аут для повторной попытки неудачного запроса к серверу memcached.
httpserverlocation
Синтаксисmemcached_next_upstream_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива memcached_next_upstream_timeout используется в контексте обработки запросов к серверу memcached в NGINX. Она позволяет настроить длительность, в течение которой сервер будет ждать перед повторной попыткой неудачного запроса к upstream memcached server. Это особенно полезно для приложений, использующих memcached для кэширования данных, так как помогает управлять ошибками запросов и предотвращает перегрузку бэкенд‑серверов из‑за слишком частых повторных попыток.

Пример конфига

memcached_next_upstream_timeout 30s;

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

Установка этой директивы без правильной настройки upstream-сервера memcached может не привести к ожидаемым результатам.

memcached_gzip_flag Директива 'memcached_gzip_flag' управляет сжатием ответов от сервера memcached в NGINX.
httpserverlocation
Синтаксисmemcached_gzip_flag on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'memcached_gzip_flag' в NGINX играет важную роль в определении того, должны ли ответы, полученные с сервера memcached, сжиматься перед отправкой клиентам. Эта функция особенно полезна для уменьшения объёма данных, передаваемых по сети, что при больших ответах может улучшить время загрузки и производительность. Директива принимает один аргумент, который может быть либо 'on', либо 'off'. При установке в 'on' это указывает, что NGINX должен применять gzip к ответам, приходящим от memcached, тогда как 'off' отключает это поведение. В сценариях, когда эта директива включена, NGINX будет применять gzip-сжатие в соответствии со своими настройками конфигурации при получении данных с настроенных серверов memcached. Важно отметить, что при сжатии ответы могут требовать иного обращения со стороны клиентов, запрашивающих их, например, необходимо правильно устанавливать соответствующие заголовки Content-Encoding. Размещение директивы внутри блоков конфигурации (http, server или location) определяет область её действия, что даёт администраторам гибкость в настройке gzip-сжатия в зависимости от конкретной маршрутизации или требований фильтрации. Механизм gzip-сжатия значительно сокращает использование пропускной способности; однако он вносит дополнительную нагрузку на CPU из-за процессов сжатия и распаковки. Поэтому следует тщательно оценивать включение этой функции и делать это только в тех случаях, когда она приносит измеримую пользу общей производительности приложения.

Пример конфига

http {
    memcached_gzip_flag on;
    server {
        location / {
            memcached_pass 127.0.0.1:11211;
        }
    }
}

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

Убедитесь, что клиент поддерживает gzip-ответы, чтобы избежать получения некорректно сжатого содержимого.

mirror The `mirror` directive in NGINX is used to create a duplicate request for a specified upstream server, effectively mirroring incoming requests to the backend without affecting the original response.
httpserverlocation
Синтаксисmirror ;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `mirror` directive allows a server to send a duplicate request of the original request to a backend server. This can be useful for various purposes such as logging, performance monitoring, or testing without impacting the original user experience. When this directive is used in an HTTP context (http, server, or location), it specifies the URL of the upstream server that will handle the mirrored request. In practical use, when a request is received, NGINX processes it as usual and then, in parallel, sends an exact copy of this request to the configured upstream server defined in the `mirror` directive. This means the main request's response and the mirrored request's response can operate independently. Specifying the correct upstream server is crucial to ensure that the mirrored request functions as intended. One of the significant aspects to consider with the `mirror` directive is that it does not wait for the response from the mirrored request; therefore, any feedback from the upstream server regarding the mirrored request does not influence the user's original request. This feature can lead to performance considerations since the mirrored requests effectively double the traffic to the backend server specified.

Пример конфига

location /example {
    mirror /backend;
}

location = /backend {
    internal;
    proxy_pass http://backend-server;
}

The target of the mirror request must be specified properly; an incorrect URL will cause issues in the mirroring process.

Remember that mirrored requests do not affect the original response; be cautious if the backend is intended to be stateful.

mirror_request_body Директива 'mirror_request_body' управляет тем, зеркалировать ли тело запроса в NGINX.
httpserverlocation
Синтаксисmirror_request_body on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'mirror_request_body' включает или отключает зеркалирование тел запросов в конфигурации NGINX. Когда установлена в 'on', она позволяет тело, полученное в текущем запросе, отправлять в новом зеркальном запросе на upstream‑сервер, заданный директивой 'mirror'. Эта функциональность особенно полезна для целей отладки или когда важно сохранить исходный запрос при выполнении с ним некоторых ненавязчивых операций. Зеркалирование тела запроса может повлиять на производительность, поскольку требует дополнительной памяти для буферизации и создает сетевую нагрузку при передаче тела на upstream‑сервер.

Пример конфига

location /api {
    mirror_request_body on;
    mirror /mirror_endpoint;
}

Убедитесь, что зеркалирование не приводит к непреднамеренной обработке запросов или ухудшению производительности.

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

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

mp4 Директива 'mp4' включает поддержку потоковой передачи MP4-видео в контексте location NGINX.
location
Синтаксисmp4;
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива 'mp4' — это параметр конфигурации в NGINX HTTP module, который позволяет обслуживать файлы MP4 с поддержкой fast start. Если включена внутри блока location, NGINX подготавливает файлы MP4 для воспроизведения по HTTP, обеспечивая их эффективную потоковую передачу. Это достигается размещением необходимых метаданных в начале файла, что позволяет видео начинать воспроизведение до полной загрузки. Директива не принимает аргументов и особенно полезна для медиаприложений, где приоритетом является плавное воспроизведение. Директива 'mp4' оптимизирует отдачу файлов MP4, изменяя способ обработки соответствующих запросов NGINX. После активации NGINX будет отвечать на запросы к файлам формата MP4 заголовками, поддерживающими тип запроса Range, что позволяет клиентам запрашивать определённые диапазоны байтов файла. Эта функция существенно улучшает удобство для пользователей, минимизируя время буферизации при воспроизведении видео. Дополнительно она позволяет выполнять перемотку внутри видео, предоставляя пользователям возможность переходить к разным меткам времени без загрузки всего файла заранее.

Пример конфига

location /videos/ {
    mp4;
    root /var/www/html;
}

Ensure that the MP4 files are encoded correctly to avoid playback issues.

Using the 'mp4' directive alone does not configure additional parameters for buffering or caching which may be necessary for optimal performance.

Remember to set proper MIME types for MP4 files in your server configuration.

mp4_buffer_size The `mp4_buffer_size` directive sets the size of the buffer used for reading MP4 files during streaming.
httpserverlocation
Синтаксисmp4_buffer_size size;
По умолчанию1m
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `mp4_buffer_size` directive defines the size of the memory buffer allocated for reading MP4 video files when they are streamed via NGINX. This directive is particularly useful for optimizing the performance and responsiveness of serving MP4 content, especially over slower connections. By adjusting the buffer size, users can control how much data NGINX reads into memory at a time before sending it to the client, impacting buffering behavior and potentially improving streaming performance. The parameter for `mp4_buffer_size` is specified in bytes, and its value should be carefully selected based on the specific use-case, as too large a buffer might waste memory while too small a value can lead to increased latency or stuttering during playback. The directive can be applied within the `http`, `server`, or `location` contexts, allowing for flexible configuration based on server architecture and the expected traffic conditions. To ensure efficient buffering, it is advisable to set this value in accordance with the average size of MP4 files hosted, as well as the bandwidth available to clients. This directive is particularly important in scenarios where NGINX acts as a media server streaming MP4 content to end-users, thus necessitating optimal performance tuning.

Пример конфига

location /video {
    mp4_buffer_size 2m;
}

Setting the buffer size too small can lead to interruptions in streaming, especially during high traffic periods.

If set too large, it may result in unnecessary memory consumption, affecting server performance.

mp4_max_buffer_size Sets the maximum buffer size for MP4 file streaming in NGINX.
httpserverlocation
Синтаксисmp4_max_buffer_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `mp4_max_buffer_size` directive specifies the maximum size (in bytes) that NGINX will use for buffering MP4 file downloads when serving video content. This is particularly important when serving large MP4 files to ensure efficient caching and streaming performance. Setting an appropriate buffer size allows NGINX to maintain smooth playback experiences for end-users by controlling the amount of buffered data when streaming files. The directive can be set in the `http`, `server`, or `location` contexts, allowing for flexibility in configuration depending on the application's needs. If the specified buffer size is too small, it may result in frequent buffering during playback, impacting user experience. Conversely, setting it too large can lead to high memory consumption, especially when handling multiple concurrent streams. The value for this directive must be specified in bytes, and it follows the syntax `mp4_max_buffer_size size;` where size can be a simple integer for bytes or suffixed with 'k', 'm' for kilobytes or megabytes respectively. It’s essential to test the impact of different sizes based on your server capacity and expected traffic.

Пример конфига

http {
    mp4_max_buffer_size 1m;
}

server {
    location /videos {
        mp4_max_buffer_size 2m;
    }
}

Using a size too small may cause video playback to buffer frequently.

Setting a size too large can consume more memory, affecting overall server performance.

Remember to test different settings under expected load scenarios to find the optimal size.

mp4_start_key_frame The `mp4_start_key_frame` directive configures the HTTP MP4 streaming module to begin video playback from a designated key-frame.
httpserverlocation
Синтаксисmp4_start_key_frame on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `mp4_start_key_frame` directive is part of the NGINX HTTP MP4 module that allows users to control the starting point of video playback in MP4 files. When this directive is enabled, NGINX will begin streaming from the closest preceding key-frame in the video stream when a user requests a specific timestamp. This behavior is particularly important for streaming applications where seamless playback is necessary, as it prevents playback from starting on a non-key-frame, which would lead to buffering or playback issues. By default, this directive is turned off, meaning playback might start at any given point in the stream that may not necessarily correlate with a key-frame, potentially affecting performance and user experience.

Пример конфига

mp4;  
mp4_start_key_frame on;  

Ensure that the MP4 files being served contain proper key frames for seamless streaming.

Using this directive may increase the initial load time if the key-frame is far from the requested timestamp.

proxy_pass The `proxy_pass` directive forwards client requests to a specified proxied server.
locationif in locationlimit_except
Синтаксисproxy_pass URL;
По умолчаниюnone
Контекстlocation, if in location, limit_except
МодульNGINX HTTP Core

Описание

The `proxy_pass` directive in NGINX is used to pass requests to a proxied server for processing. It allows the server to redirect traffic intended for a particular URI or location to another server, which can be an upstream server defined in the configuration or an external server specified with its address. When configured, if a client makes a request that matches the location block where the `proxy_pass` directive is used, NGINX will initiate a request to the upstream server. It does so by taking the original request and forwarding it to the server URI defined in the directive. The URL provided in the `proxy_pass` directive can be specified as either a protocol and host (e.g., `http://example.com`) or a full URL. Options can be provided further to manage how the request headers and request body are handled during the proxying process. The `proxy_pass` directive can significantly enhance the performance of your web application by distributing the traffic among multiple servers, allowing for load balancing and fault tolerance. However, it's vital to ensure proper configuration of additional directives (such as `proxy_set_header`) to maintain the integrity of request headers and enable features like WebSocket support and HTTP/2 tunneling.

Пример конфига

location /api/ {
    proxy_pass http://backend_server;
}

Ensure the upstream server is reachable, as failed connections will result in 502 Bad Gateway errors.

If the URL does not end with a slash, it may append the requested URI unexpectedly; careful path management is necessary.

Misconfigurations in caching and header forwarding may lead to unexpected client behavior.

proxy_redirect The `proxy_redirect` directive modifies the `Location` and `Refresh` headers in a proxied response to make them suitable for the client.
httpserverlocation
Синтаксисproxy_redirect [default | off | redirect_uri new_uri];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_redirect` directive is used in NGINX to adjust the HTTP headers related to redirects from a proxied server. When requests are proxied, the response might contain `Location` or `Refresh` headers that inform the client where to redirect to. However, these headers may still point to the original upstream server rather than the client-facing NGINX server. This is where the `proxy_redirect` directive comes into play. It accepts one or two arguments: the first one specifies the URL to be modified (the upstream server URL), and the second one, which is optional, specifies the new URL that should be sent back to the client. For example, if a proxied server sends a `Location` header pointing to `http://upstream-server/uri`, and if you set `proxy_redirect http://upstream-server/ http://client-server/;`, NGINX will modify the `Location` header to `http://client-server/uri`. This ensures that the client receives redirects pointing to NGINX instead of the proxied server. Multiple `proxy_redirect` directives can be specified, which allows for complex routing scenarios where different upstream servers may need different rewrites, making it highly flexible for varied environments.

Пример конфига

location /api {
    proxy_pass http://upstream-server;
    proxy_redirect http://upstream-server/ http://localhost:8080/;
}

Be careful with trailing slashes; they can affect the redirect URL construction.

The `proxy_redirect` directive must be used in a proper context (http, server, location); using it in the wrong context will lead to an error.

proxy_cookie_domain The proxy_cookie_domain directive rewrites the Domain attribute of Set-Cookie headers passed from a proxied server.
httpserverlocation
Синтаксисproxy_cookie_domain original_domain new_domain;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cookie_domain` directive is utilized in NGINX when acting as a reverse proxy, specifically for modifying the Domain attribute of cookies set by upstream servers. This directive allows you to specify a new domain that the cookies should be available for when they are sent back to the client. It accepts one or two arguments: the first is the original domain from which the cookie is set, and the second optional argument is the domain to rewrite to. If only one argument is specified, it replaces the domain with the server's domain, which is useful when both upstream and NGINX are on the same domain to ensure that cookies can be accessed as expected.

Пример конфига

location / {
    proxy_pass http://backend;
    proxy_cookie_domain example.com my-website.com;
}

Make sure that the new domain is set correctly; otherwise, cookies may not be sent back to the client properly.

If only the original domain is provided, NGINX will default to the server's domain, so ensure it aligns with your requirements.

proxy_cookie_path The 'proxy_cookie_path' directive modifies the path attribute of Set-Cookie headers in proxied responses.
httpserverlocation
Синтаксисproxy_cookie_path original_path new_path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_cookie_path' directive is used in NGINX configurations where responses are being proxied to a backend server. Its primary function is to adjust the 'Path' attribute of the 'Set-Cookie' headers returned from the proxied server. This is useful for ensuring that cookies are sent only to the desired URLs under specific paths, thus enhancing security and functionality in scenarios where the proxied server's cookie path does not align with the NGINX server's URL structure. This directive can take one or two arguments. The first argument is the original cookie path which would typically be found in the Set-Cookie headers of the response. The second argument is the new path that should replace the original one. If only one argument is provided, it indicates that all cookies with that original path should be replaced with the new default path. When both arguments are specified, only cookies that match the exact original path will be affected. The directive operates at multiple contexts including 'http', 'server', and 'location', making it versatile for various configuration scopes. The behavior of the 'proxy_cookie_path' directive also accommodates multiple directives for different paths, allowing multiple declarations with specific behavior, which provides granular control over how cookies from the backend server are handled in relation to their URL paths in the frontend NGINX server.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cookie_path /myapp /;
}

Ensure the original path matches the Path attribute of the headers you wish to modify.

Using incorrect paths can lead to cookies not being sent to the browser, impacting user sessions.

Overusing this directive can lead to confusion if different paths are modified inappropriately.

proxy_cookie_flags Sets HTTP cookie flags for proxied responses.
httpserverlocation
Синтаксисproxy_cookie_flags flag1 [flag2 ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cookie_flags` directive in NGINX allows users to specify flags for cookies that are set in the HTTP response from a proxied server. This directive can be used in the `http`, `server`, or `location` contexts, and it accepts one to four parameters corresponding to the specific flags that should be applied to cookies. The available flags typically include options like `Secure`, `HttpOnly`, and `SameSite`, which control cookie behavior concerning security and cross-site requests. When including the `proxy_cookie_flags` directive in your configuration, you can enable cookies to be transmitted in a more secure manner. For instance, setting the `Secure` flag ensures cookies are only sent over HTTPS connections, while the `HttpOnly` flag prevents JavaScript from accessing those cookies, enhancing protection against certain types of attacks. The parameters are used as a space-separated list, and NGINX evaluates the flags based on the order they are specified. Users should be cautious to use flags that are compatible with the application and browsers being supported, as improper configuration can lead to usability issues. To implement the `proxy_cookie_flags` directive, one can specify the flags directly in the configuration, which can be adjusted for different locations or servers as required. It is important to note that while this directive remedies some security concerns, it does not enforce the default settings applied by browsers, so developers should always consult both application requirements and browser documentation to ensure effective cookie handling.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cookie_flags HttpOnly;  
}

Flags must be compatible with the application being proxied; otherwise, cookies may not function as intended.

Misconfiguration may lead to cookies being sent insecurely over HTTP if the `Secure` flag is not used properly.

The order of flags matters; ensure that each flag is specified in accordance with the desired cookie behavior.

proxy_store The `proxy_store` directive allows the storage of proxied responses in the local file system.
httpserverlocation
Синтаксисproxy_store on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_store` directive is utilized within the context of `http`, `server`, or `location` blocks to enable storing the responses from proxied servers into the local filesystem. When set to `on`, NGINX will save the response of a proxied request, based on the configured URI, to a specified local file or directory. The directive requires an argument that specifies the directory path where the files will be stored. If the directory does not exist, NGINX will not create it, and a 404 error will occur when a request is made. This makes it essential to have proper permissions to write to the designated directory. Additionally, the directive can be combined with other settings, like `proxy_pass`, to allow routing to a backend service while simultaneously preserving the response in a file for later retrieval. When using `proxy_store`, it's also essential to consider the implications of directory structure management and response caching. Responses will be stored in a flat structure unless an appropriate hashing or custom URI handling configuration is applied. Therefore, care should be taken in how URIs are structured to prevent file overwrites and ensure clear access patterns.

Пример конфига

location /downloads {
    proxy_pass http://backend;
    proxy_store on;
    proxy_store_path /var/www/stored_files;
}

Ensure the specified path for storage exists and has the correct permissions.

If multiple requests map to the same URI, responses will overwrite each other unless handled properly.

Remember that `proxy_store` does not handle dynamic data well since it stores the response based on the URI directly.

proxy_store_access The `proxy_store_access` directive controls access permissions for storing files in a proxied setup in NGINX.
httpserverlocation
Синтаксисproxy_store_access user:group:other;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_store_access` directive is crucial when configuring NGINX's proxying capabilities, especially when caching or storing responses from upstream servers. This directive can specify what access control settings apply to stored files, which can include permissions for the user, group, and other entities. By allowing only specific users to access the cached content, it ensures a refined and controlled environment, essential for security and operation efficiency. You can define the access settings using one to three parameters: the first for the user permission, the second for the group permission, and the third for the other users. Each parameter accepts a string indicative of the permission level, affecting how NGINX enforces access to stored content. This way, if a file is saved via `proxy_store`, its accessibility can be dictated by the `proxy_store_access` settings, preventing unauthorized access to crucial or sensitive files. This directive can be placed in `http`, `server`, or `location` contexts, making it versatile within the configuration file. It's not just about controlling access post-storage, but also about shaping how resources are shared within proxied responses, ultimately influencing the integrity and security of your server's operation.

Пример конфига

location /download {
    proxy_pass http://backend;
    proxy_store on;
    proxy_store_access user:group:r;
}

Ensure the correct permissions are set to avoid inadvertently exposing sensitive data.

Inconsistent behavior may occur if the access controls conflict with filesystem permissions.

Remember to restart NGINX after making changes to the configuration to apply new settings.

proxy_buffering The proxy_buffering directive enables or disables buffering of responses from proxied servers.
httpserverlocation
Синтаксисproxy_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_buffering` directive in NGINX controls whether responses from proxied servers are buffered before being sent to clients. When set to 'on', NGINX buffers the entire response from the proxied server, which can improve performance by allowing NGINX to send the response to the client in a single, optimized network operation. This can be particularly beneficial for large responses where connection overhead can significantly impact performance. Conversely, setting `proxy_buffering` to 'off' allows NGINX to transmit the response to the client as it is being received, which can be useful if you want to stream data directly or have low-latency requirements, such as in real-time applications. The directive can be applied in various contexts such as http, server, and location, giving you flexibility in what parts of your application utilize buffering based on specific performance needs. If you have multiple backends and need different buffering configurations for each, you can adjust the `proxy_buffering` setting to fit those scenarios separately. Note that when buffering is enabled, NGINX will also use the settings defined by other proxy-related directives such as `proxy_buffers` and `proxy_buffer_size` to manage how much data to buffer before sending it to the client.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_buffering off;
}

Disabling buffering can lead to increased memory usage if responses are large and slow to send.

When proxy_buffering is turned off, clients may experience partial responses before the entire response is fully available.

proxy_request_buffering The `proxy_request_buffering` directive controls whether NGINX buffers the request body for proxied requests.
httpserverlocation
Синтаксисproxy_request_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_request_buffering` directive in NGINX determines how the request body of proxied requests is handled, specifically whether it is buffered before sending to the proxied server. By default, when `proxy_request_buffering` is enabled (which is often the case), NGINX will read the entire request body into memory or temporary files, depending on its size, before forwarding it to the upstream server. This allows NGINX to handle certain scenarios more effectively, such as rewriting headers or modifying request data based on configurations applied before proxying. When set to `off`, request body buffering is disabled, meaning that data is passed to the upstream server as it is received from the client. This can be useful for scenarios involving large files or streaming, where buffering would be inefficient or impractical. However, it may increase loading times if not handled properly and can complicate error handling since the upstream server may not have the complete request data until it is fully received from the client. Additionally, disabling buffering can lead to resource constraints under heavy loads, since the request body could be processed as a continual stream instead of an entire chunk, as typically would be the case when buffering is enabled.

Пример конфига

location /upload {
    proxy_pass http://backend;
    proxy_request_buffering off;
}

Ensure that the upstream server can handle streaming requests if buffering is disabled.

Be aware that disabling request buffering can complicate error handling and may impact performance under heavy load.

proxy_ignore_client_abort Configures whether to ignore client aborts while processing proxy requests.
httpserverlocation
Синтаксисproxy_ignore_client_abort on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_ignore_client_abort` directive controls how NGINX handles scenarios where a client disconnects before the server has completed processing the request. When set to 'on', NGINX will continue to process the request as if the client is still connected, potentially allowing server-side processing to complete without interruption. This can be useful in environments where long-running operations on the server should not be prematurely halted by client actions. Conversely, setting it to 'off' instructs NGINX to stop processing the request if the client disconnects, which can save server resources and prevent unnecessary processing when the client will not receive the response. This directive can be applied within the contexts of `http`, `server`, and `location`, providing flexibility in how it influences request handling across different levels of the configuration hierarchy. Its behavior is influenced by its parameter, which can either be a flag - typically 'on' or 'off'. Users should be mindful of how this setting influences resource usage, especially in high-load scenarios where a large amount of processing may be allocated to incomplete requests.

Пример конфига

server {
    listen 80;
    location /long-processing {
        proxy_pass http://backend;
        proxy_ignore_client_abort on;
    }
}

Setting this directive to 'on' can lead to wasted server resources if many clients disconnect.

Make sure to assess the implications of keeping long processes running in high-load environments.

proxy_bind The proxy_bind directive configures the local IP address for outgoing connections to the proxied server.
httpserverlocation
Синтаксисproxy_bind address [ port ];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_bind` directive is used in NGINX to specify which local IP address should be used for outgoing connections to proxied servers. This can be particularly useful in environments where multiple IP addresses are assigned to an interface, and the administrator wishes to control which IP address is utilized when NGINX makes outbound requests. The directive accepts one or two parameters: the first parameter is the local IP address to bind to, and the optional second parameter can specify which port to use. If the second parameter is provided, NGINX binds to that specific port when connecting to the upstream server. When `proxy_bind` is used, the IP address provided will be set in the `SO_BINDTODEVICE` socket option, influencing the routing of outbound packets. This ensures that connections initiated by NGINX to the proxied host will appear to come from the specified IP address rather than the default one. It's essential to ensure that the IP address is assigned to one of the server’s network interfaces, or else connection attempts may fail. Additionally, you should consider that using an incorrect IP address could lead to routing issues, especially in a multi-homed environment where multiple interfaces are present. In summary, `proxy_bind` is an advanced directive aimed at users who need fine-grained control over their server's network behavior, particularly in complex networking setups or when integrating with external services that require traffic originating from a specific IP address.

Пример конфига

location / { 
    proxy_pass http://backend;
    proxy_bind 192.168.1.100; 
}

Ensure the specified IP address is configured on the NGINX server.

If using a port, ensure it is not in use by other services to prevent binding errors.

Using `proxy_bind` without appropriate flow monitoring can lead to mismatched expectations of traffic routing.

proxy_socket_keepalive The `proxy_socket_keepalive` directive enables or disables the use of keepalive for the connections to proxied servers.
httpserverlocation
Синтаксисproxy_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_socket_keepalive` directive controls whether keepalive should be activated for connections to proxied servers within NGINX. When set to `on`, NGINX maintains persistent connections to upstream servers for reuse, which can significantly reduce the latency associated with establishing new connections for subsequent requests from clients. This is particularly beneficial for environments experiencing high traffic to upstream servers, as it can help to decrease resource usage and improve response times. The directive is specified in the context of `http`, `server`, or `location`, allowing for flexible configuration based on the desired scope of keepalive connections. By default, the directive is turned `off`, meaning that NGINX will not utilize keepalive connections unless explicitly enabled. Enabling keepalive can also interoperate with other directives such as `proxy_pass`, providing seamless integration without requiring extensive configuration changes. When using `proxy_socket_keepalive`, it is essential to consider the settings from the upstream server side as well, since if the upstream does not support keepalive connections or has a shorter timeout than NGINX, it may not yield the desired performance improvements.

Пример конфига

http {
    server {
        location / {
            proxy_pass http://backend;
            proxy_socket_keepalive on;
        }
    }
}

Ensure that the upstream server is configured to support keepalive connections.

Excessive setting of keepalive can lead to resource exhaustion on the server side if not handled correctly.

proxy_connect_timeout The proxy_connect_timeout directive sets the timeout for establishing a connection with a proxied server.
httpserverlocation
Синтаксисproxy_connect_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_connect_timeout` directive specifies the time limit for establishing a successful connection from the NGINX server to a proxied server. This is particularly useful in scenarios where the proxied server may be experiencing high load or is unresponsive. If the connection cannot be established within the specified timeout period, NGINX will return an error to the client, effectively preventing it from hanging indefinitely. The directive can be defined within different contexts such as `http`, `server`, and `location`, allowing granular control over timeout settings at varying scopes of configuration. Setting this timeout helps to improve failover handling and can assist in managing resource allocation effectively, ensuring that NGINX does not waste time on unresponsive upstream endpoints. The timeout value is typically specified in the format of time units (e.g., `10s`, `1m`).

Пример конфига

http {
    proxy_connect_timeout 30s;
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

The timeout is only applicable during the connection establishment phase and does not affect how long data transfer takes after a connection is established.

Setting a very low timeout might lead to premature disconnections, especially if the upstream server is slow to respond.

proxy_send_timeout Sets the timeout for transmitting a request to the proxied server in NGINX.
httpserverlocation
Синтаксисproxy_send_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_send_timeout` directive specifies the time period during which NGINX will attempt to send the request to a proxied server. This timeout is critical in controlling how long NGINX will wait for the server to accept the request before timing out. If the timeout is exceeded, NGINX will close the connection and log an error. The value can be specified in a variety of formats, such as seconds or with time suffixes (e.g., '30s' for 30 seconds). This directive must be set in one of three contexts: `http`, `server`, or `location`. It provides granular control over the timeout settings specific to proxied requests based on the application’s requirements. Adjusting this timeout might be necessary for applications that have variable response times or when dealing with high latency networks. If a request takes too long to send to the proxied server and the `proxy_send_timeout` threshold is reached, NGINX will log an error and return a 502 Bad Gateway response to the client. The `proxy_send_timeout` value should match the expected behavior of the proxied application. It should be set considering the application’s performance characteristics and anticipated load. If set too low, it may cause legitimate requests to fail, while a very high value may lead to resource contentions and affect the server's responsiveness.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_send_timeout 30s;
}

Setting the timeout too low could lead to premature connection closures and increased error rates.

Not configuring this directive could result in default timeouts that may not align with the application's needs.

proxy_send_lowat The 'proxy_send_lowat' directive specifies the low water mark for the proxy module's send buffer, affecting data transmission efficiency.
httpserverlocation
Синтаксисproxy_send_lowat size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_send_lowat' directive is used in the NGINX HTTP server to configure the low water mark for the proxy module's send buffer, measured in bytes. When the send buffer falls below this specified threshold, the NGINX worker process will increase the transmission rate of data to the client to avoid underutilization of the network connection. This helps improve network throughput, especially in the context of streaming data and proxying requests to upstream servers. The parameter for this directive must be supplied as an integer and it represents the minimum number of bytes that should remain in the send buffer before the NGINX process resumes sending data from the buffer again. Setting an appropriate value can enhance performance on high-latency links by ensuring that there is always enough data ready to be sent, helping to keep the connection busy. Conversely, setting the value too low may lead to inefficient usage of the available bandwidth as NGINX may constantly pause to check buffer status, negatively impacting performance. The directive can be used within the context of 'http', 'server', or 'location' blocks, giving administrators flexibility in configuring behavior at different levels of the server architecture. Proper tuning of this value can lead to noticeable improvements in response times and can optimize resource usage for applications subjected to varying loads, especially under a proxy setup.

Пример конфига

http {
    proxy_send_lowat 16384;
}

If set too low, it may lead to very frequent send operations, degrading performance.

Misunderstanding the buffer context can lead to underutilization of bandwidth if not configured properly.

proxy_intercept_errors The `proxy_intercept_errors` directive is used to control whether NGINX intercepts errors from proxied servers.
httpserverlocation
Синтаксисproxy_intercept_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_intercept_errors` directive in NGINX allows users to specify whether the server should handle error responses from proxied servers. When this directive is set to `on`, NGINX will intercept HTTP responses that indicate errors (like 404, 500, etc.) and process them according to the configured error handling settings. Conversely, if this directive is set to `off`, any error responses received from a proxied server will be passed directly to the client without any modification or handling by NGINX. This can be useful for implementing custom error pages or redirecting clients based on specific errors. This directive can be set in the `http`, `server`, or `location` contexts, making it versatile for various configuration scenarios. It is important to understand that setting this directive to `on` can lead to different behavior than expected, as the client will not see the original response from the proxied server unless you specifically configure error handling. Depending on your application architecture and how you want to manage errors presented to the user, the proper setting of this directive can be crucial.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_intercept_errors on;
    error_page 404 /custom_404.html;
}

Ensure that you have defined custom error pages if `proxy_intercept_errors` is set to `on` to avoid serving default error pages.

When enabled, ensure your application's error handling strategy aligns with how NGINX will process errors.

proxy_set_header The `proxy_set_header` directive allows you to modify the headers sent to a proxied server.
httpserverlocation
Синтаксисproxy_set_header name value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_set_header` directive is used in NGINX to alter or define the headers that are sent from the NGINX server to the upstream server in a proxy context. This is particularly useful for passing additional information, such as original client information, or modifying existing headers before forwarding requests to a proxied backend. The directive takes two arguments: the header that you want to set or modify and the value to assign to that header. You can use variables provided by NGINX, allowing for dynamic header values that can adapt based on the request context. For instance, you might want to set the `X-Real-IP` header to the client's IP address. You can also override existing header values as necessary. It is important to note that if a header is set more than once for the same name, the last set value will take precedence. This directive can be used in various contexts including `http`, `server`, and `location` blocks, providing flexibility in how headers are handled for different parts of your server configuration. Properly configuring headers is crucial for correct functionality of backend applications, as they often rely on HTTP headers for routing, authentication, and other request management tasks.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Headers set with `proxy_set_header` are cumulative; if a header is defined multiple times, the last defined value is used.

Make sure to define the directive in the correct context (http, server, or location) to avoid configuration errors.

Using simple values instead of variables (e.g., fixed strings) may not yield expected results in dynamic cases.

proxy_headers_hash_max_size Defines the maximum size of the hash table for storing proxy headers.
httpserverlocation
Синтаксисproxy_headers_hash_max_size size;
По умолчанию512
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_headers_hash_max_size` directive is used in the NGINX HTTP server to set the maximum size of the hash table that stores the keys of HTTP headers when using the `proxy_set_header` directive. This is particularly relevant when NGINX operates as a reverse proxy, as it facilitates the mapping of the incoming headers to the corresponding backend server headers. The parameter for this directive is a number that determines how many hash entries can be created. In scenarios where a large number of different headers may be set or modified, increasing this value can help prevent hash table collisions and improve performance. It's essential to strike a balance—setting this value too high can lead to increased memory consumption, while a value set too low may lead to hashing conflicts, resulting in potential issues in header retrieval. The directive can be used in the `http`, `server`, and `location` contexts, allowing for flexible configuration at different levels of the NGINX hierarchy. When properly configured, it enhances the ability of NGINX to manage proxy headers efficiently, especially under high-load conditions with numerous distinct header types.

Пример конфига

proxy_headers_hash_max_size 1024;

Setting the `proxy_headers_hash_max_size` too low may lead to performance degradation due to hash collisions.

Increasing the size may lead to higher memory utilization, so consider the server's available resources before scaling.

proxy_headers_hash_bucket_size Sets the size of hash buckets for storing proxy headers in NGINX.
httpserverlocation
Синтаксисproxy_headers_hash_bucket_size size;
По умолчанию32
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_headers_hash_bucket_size` directive specifies the size of the hash buckets used for distributing proxy headers in the NGINX server. The primary purpose of this directive is to optimize the performance and memory usage of the hash table maintaining these headers, particularly in scenarios involving many proxy headers. A larger bucket size can help prevent collisions, which may enhance lookup speed when accessing these headers.

Пример конфига

http {
    proxy_headers_hash_bucket_size 64;
}

Setting the value too low can lead to performance issues due to hash collisions.

Excessively large values may waste memory, particularly for configurations with a limited number of headers.

proxy_set_body Sets the request body to a specified value for proxying purposes.
httpserverlocation
Синтаксисproxy_set_body value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_set_body` directive is used to alter the request body being passed to a proxied server. Usually, when NGINX proxies a request, it forwards the client's request body as received. However, there are scenarios where you may need to change this body, for example, when implementing a reverse proxy that needs to transform request data before sending it downstream. You can specify the body content as an argument to this directive, which can include arbitrary text or data that will replace the original request body. The directive can be placed in various contexts, including `http`, `server`, and `location`, allowing for flexibility in how requests are modified at different levels. When a new body is set using this directive, it overrides the original request body, and it will be sent to the proxied server as the request payload. Keep in mind that you should ensure the new body content is compatible with the request type. For instance, if the upstream server is expecting a JSON payload, the body set via `proxy_set_body` should be a valid JSON string to avoid errors or unintended behavior.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_set_body '{"key":"value"}';
}

Setting an empty body may lead to the proxied server receiving a blank request body.

Ensure the body format matches what the upstream server expects, or it may reject the request.

proxy_method Sets the HTTP request method used by the proxy server when communicating with the backend.
httpserverlocation
Синтаксисproxy_method method;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_method` directive in NGINX allows administrators to specify the HTTP method that the proxy will use when passing client requests to a proxied server. By default, NGINX uses the same method as the original client request (e.g., GET, POST). However, `proxy_method` allows customization by explicitly setting it to a method of choice, which can often be useful for specific application requirements or behaviors. Usage of this directive can vary based on the context in which it is defined: http, server, or location. For instance, in a location block, it can specify how to handle requests that match that location. The directive accepts a single argument that represents the desired HTTP method. Hence, it is important to ensure the method specified is supported by the proxied server to avoid unexpected behavior. When a request is proxied, this directive will override the default behavior and enforce the specified HTTP method on that request. This can be critical in scenarios where certain operations (like RESTful interactions) require a specific method which the client might not initially use, or when the request must conform to certain routing rules or practices determined by the backend application.

Пример конфига

location /api { 
    proxy_pass http://backend; 
    proxy_method POST; 
}

Specifying an unsupported HTTP method can lead to errors from the proxied server.

If there is no back-end server that responds to the specified method, requests may fail 404 errors.

In some cases, clients may not expect the method to be altered, leading to confusion regarding API interactions.

proxy_pass_request_headers The `proxy_pass_request_headers` directive controls whether or not NGINX will pass the proxy request headers to the proxied server.
httpserverlocation
Синтаксисproxy_pass_request_headers on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_pass_request_headers` directive is used to specify whether the incoming headers of the original request should be forwarded to the proxied server. This directive can be set to a flag value of either `on` or `off`. When enabled, all headers received by NGINX from the client will be included in the request that is sent to the proxied upstream server. This can be particularly useful when you need to preserve client information like authentication tokens or custom headers that the upstream application needs to function properly. In practical scenarios, it ensures that fields like `User-Agent`, `Referer`, and any custom headers are included, which can be critical for maintaining application behaviors depending on these values. If set to `off`, these headers will not be passed, which may lead to unexpected behavior depending on the application logic that relies on these headers. This directive can be applied in several contexts: http, server, and location blocks, allowing flexibility in configuration based on different handling needs or contexts. It's important to note that while this directive allows for fine-tuning how requests are processed, care should be taken to avoid passing sensitive information to external servers, as doing so could expose user data or compromise security in certain configurations.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_pass_request_headers off;
}

Ensure that sensitive headers are not inadvertently sent to proxied servers, especially when configured to `on`.

This directive's behavior is overridden by directives that explicitly clear or modify headers after it is set.

proxy_pass_request_body The `proxy_pass_request_body` directive controls whether the request body is passed to the proxied server in NGINX.
httpserverlocation
Синтаксисproxy_pass_request_body on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_pass_request_body` directive is a boolean flag used in the context of http, server, and location blocks within the NGINX configuration. When this directive is set to "on", NGINX will send the request body to the proxied server when forwarding requests. This is particularly significant when handling POST requests or any request that contains a body, such as data uploads. If the directive is set to "off", the request body will not be sent to the upstream server, which may lead to unexpected behavior if the application relies on receiving the body. The directive allows fine-tuning of request handling in proxy situations, enabling optimizations for different backend applications. The absence of this directive defaults to "on", meaning that by default, the request body will be forwarded unless explicitly configured otherwise. This can be critical for applications expecting data to be processed in a proxied setup. Configuration of this directive is straightforward and does not require additional parameters beyond the flag to enable or disable the behavior. Overall, it aids in controlling the flow of request data, making it essential for proper functioning of web applications that rely on NGINX as a reverse proxy.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_pass_request_body off;
}

For POST requests, ensure that `proxy_pass_request_body` is set to `on` if the backend needs the body.

Setting this directive to `off` may result in incomplete data processing on the proxied server.

Usage in the wrong context (like inside the server block) will lead to configuration errors.

proxy_pass_trailers The `proxy_pass_trailers` directive controls the handling of HTTP trailers in upstream responses.
httpserverlocation
Синтаксисproxy_pass_trailers on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_pass_trailers` directive is used in NGINX configurations to dictate whether or not HTTP trailers (i.e., additional headers sent after the body of the HTTP response) should be passed along from an upstream server to the client. By default, trailers may not be enabled, meaning that they would not be forwarded in the response, impacting scenarios where trailers are necessary for proper client processing. When this directive is set to `on`, it indicates that the NGINX server should allow trailers to be collected from the upstream response and sent back to the client. This is especially relevant in applications where trailer information contains important metadata or response details that need to be processed after the response body has been received. The directive operates within the `http`, `server`, and `location` contexts, providing flexibility in its application across different configuration scopes. In terms of performance, enabling trailer processing may incur slight overhead, hence it's typically recommended only when absolutely necessary. Each trailer is added to the response after the body content and must conform to HTTP standards to ensure compatibility with clients that expect this kind of response structure.

Пример конфига

http {
    server {
        location /api {
            proxy_pass http://backend;
            proxy_pass_trailers on;
        }
    }
}

Ensure that the backend server actually sends trailers; otherwise, enabling this directive has no effect.

Be mindful of clients that do not support trailers, as it may lead to compatibility issues.

proxy_buffer_size Sets the buffer size for the response from the proxied server.
httpserverlocation
Синтаксисproxy_buffer_size size;
По умолчанию4k or 8k, depending on the platform
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_buffer_size` directive in NGINX allows you to define the size of the buffer used to hold the first part of the response received from the proxied server. This directive is particularly relevant when dealing with dynamic responses, such as those generated by scripts (PHP, Python, etc.), as it sets the maximum size of the response header that can be stored in the buffer before processing begins. If the response is larger than the specified size, NGINX will allocate more buffers, which can impact performance depending on the size of these buffers and the server configuration. In terms of parameter specification, `proxy_buffer_size` accepts a single argument that represents the buffer size and can specify values in bytes, kilobytes (k), or megabytes (m). For instance, `proxy_buffer_size 16k;` sets the buffer size to 16 kilobytes. This directive can be placed in the `http`, `server`, or `location` contexts, allowing for flexible configuration depending on the specific needs of your setup. It's important to note that the effective buffer size can be influenced by other directives such as `proxy_buffers`, which determines the total number of buffers allocated for a single response. When configuring `proxy_buffer_size`, consider the characteristics of your upstream server responses. If your upstream server frequently sends large headers, it may be prudent to increase this buffer size to prevent NGINX from reallocating buffers unnecessarily, which can lead to performance degradation. Therefore, strategic use of this directive can improve server efficiency and user experience by reducing response times.

Пример конфига

location /api/ {
    proxy_pass http://backend;
    proxy_buffer_size 16k;
}

Setting the buffer size too low may cause response headers to be truncated, leading to unpredictable application behavior.

Be mindful of server memory limits; very large buffer sizes can lead to excessive memory usage if many concurrent connections occur.

proxy_read_timeout The `proxy_read_timeout` directive specifies the time to wait for a response from the proxied server.
httpserverlocation
Синтаксисproxy_read_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_read_timeout` directive defines the timeout period for reading data from the proxied server (i.e., the server that NGINX is forwarding requests to). If the proxied server does not send any data within this time frame, then NGINX will terminate the connection and return an error to the client. This timeout is essential when dealing with slow backends where prolonged delays can occur during the read phase. The directive accepts a single parameter which indicates the timeout value. This value can be specified in seconds or using a time suffix (e.g., `m` for minutes, `h` for hours). The timeout settings are crucial for optimizing application performance and should be set based on the expected response times of the backend services. If a connection is idle for longer than the specified duration, it is closed by the NGINX server to prevent resources from being tied up. This directive can be configured in various contexts including `http`, `server`, and `location`. The scope of where the directive is applied can influence how timeouts work in relation to other proxy directives, such as `proxy_connect_timeout` and `proxy_send_timeout`. Making optimal configurations will ensure better resource management and user experience in handling requests through NGINX.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_read_timeout 30s;
}

Setting a timeout too low may lead to premature termination of valid connections, negatively impacting user experience.

This directive only affects the reading of a response, and not the time it takes to establish a connection or send requests.

Be sure to coordinate this directive with other timeout directives for coherent timeout handling across NGINX configurations.

proxy_buffers The `proxy_buffers` directive sets the number and size of buffers used for reading the response from a proxied server.
httpserverlocation
Синтаксисproxy_buffers number size;
По умолчанию4 8k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_buffers` directive is essential in controlling how NGINX interacts with upstream servers during reverse proxying. It specifies the number and size of buffers allocated to hold the received data from the proxied server before sending it to the client. Each buffer is used to store segments of the response, allowing NGINX to aggregate data efficiently before delivery. The directive accepts two parameters: the number of buffers and the size of each buffer, specified in bytes. For example, a configuration of `proxy_buffers 8 16k;` means that NGINX will allocate eight buffers, each capable of holding 16 kilobytes of data. When a request is made to NGINX that involves upstream communication (such as with a backend web server), the response is handled in these buffers. If the upstream response exceeds the total size of the allocated buffers, NGINX will write the excess data directly to the client, bypassing the buffers. This is crucial for maintaining performance under load, as it helps to avoid memory overload by controlling the amount of data buffered at once. Additionally, if the buffers are not large enough, it may lead to excessive writes to the client, affecting throughput.

Пример конфига

location / {
    proxy_pass http://backend;
    proxy_buffers 8 16k;
}

Ensure that the total buffer size is sufficient to handle the expected response size; otherwise, large responses may cause performance degradation.

Overly large buffers can lead to increased memory usage, which may not be ideal for low-resource environments.

proxy_busy_buffers_size The proxy_busy_buffers_size directive sets the size of the buffer used for storing the response from a proxied server when NGINX is busy.
httpserverlocation
Синтаксисproxy_busy_buffers_size size;
По умолчанию8k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_busy_buffers_size` directive is crucial in managing how NGINX handles responses from upstream servers during periods of high load. When NGINX processes requests to a proxied server, it uses buffers to hold the data received before sending it to the client. The `proxy_busy_buffers_size` specifically determines how much memory is allocated for these buffers when NGINX is busy serving concurrent requests. A key aspect of its functionality is to reduce the risk of server overload by limiting the amount of memory consumed by these busy buffers. Setting this directive helps manage memory usage more effectively, especially under high traffic scenarios. By providing a specific size for `proxy_busy_buffers_size`, administrators can balance between performance and resource consumption. If the size is set too small, it may lead to more frequent buffer flushing and increased response times due to higher resource contention. Conversely, setting it too high could lead to excessive memory usage, potentially resulting in server instability when under heavy load. Hence, it’s important to find an optimal value based on server capabilities and expected traffic patterns.

Пример конфига

http {
    proxy_busy_buffers_size 16k;
}

Setting the value too low may increase the number of flush operations, degrading performance.

Setting it too high can lead to excessive memory usage, especially under heavy load.

proxy_force_ranges The proxy_force_ranges directive allows NGINX to serve partial content requests through a proxy by forcing the proxy to handle range requests.
httpserverlocation
Синтаксисproxy_force_ranges on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_force_ranges` directive, when set to `on`, instructs NGINX to enable range requests with proxied content. This directive is particularly important when the upstream server does not support range requests, as it ensures that partial content can still be served correctly by allowing NGINX to manipulate the range headers as needed. This effectively allows clients to request specific portions of a resource, reducing bandwidth usage and improving responsiveness for large files, such as videos or archives. When the directive is enabled, NGINX takes full control over the Range requests from clients, forwarding the required ranges to the upstream server. If the upstream server does not support range requests, NGINX will perform the necessary segmentation of the data received and deliver it to the client as if it had support for ranges, thus ensuring seamless operation even when the upstream service is limited in its capabilities. This enhances client experience, especially in scenarios involving large data sets or media files. It should be noted that the use of this directive can slightly affect performance since additional processing is needed to handle the range requests, particularly when the full content is being proxied and the upstream does not handle range requests directly. Furthermore, enabling this directive can increase complexity in response handling as NGINX has to carefully manage the byte ranges specified by clients and the responses received from upstream servers.

Пример конфига

location /files {
    proxy_pass http://backend;
    proxy_force_ranges on;
}

Ensure that the upstream server cannot handle range requests, otherwise it may lead to unintended behavior.

When enabled, this directive requires appropriate testing to ensure that performance does not degrade unexpectedly due to NGINX's overhead in managing the ranges.

proxy_limit_rate Controls the rate at which responses are sent to clients when using the proxy module.
httpserverlocation
Синтаксисproxy_limit_rate rate;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_limit_rate` directive sets a limit on the response rate for proxied connections, allowing you to control the bandwidth usage for certain requests. This directive is particularly useful for restricting how much data is sent to a client from a proxied server on the back end, thereby preventing a client from overwhelming the server or consuming too much bandwidth. The rate can be defined with the syntax that supports size units similar to other NGINX directives, such as 'k' or 'm' for kilobytes or megabytes respectively. The limit is imposed on a per-connection basis, meaning that the directive controls the maximum bandwidth per individual connection instead of the overall bandwidth. By using this directive within the context of `http`, `server`, or `location`, you can ensure that clients receive responses at a steady and controlled pace, which can improve overall response times and user experience on your applications, especially those dealing with large file downloads or heavy data processing. Note that setting this directive does not limit the total bandwidth consumed by all clients; each connection will still be limited as specified, but collectively they may consume significant bandwidth if many clients are connected.

Пример конфига

location /download {
    proxy_pass http://backend;
    proxy_limit_rate 100k;  # Limits the response rate to 100 kilobytes per second
}

Setting a strict limit may lead to clients experiencing slow download speeds, especially over high-latency connections.

This directive only applies to proxied connections; it does not affect direct connections to the NGINX server.

Make sure to test your configurations, as combining this with other rate control directives can lead to unexpected results.

proxy_cache The 'proxy_cache' directive in NGINX enables caching of proxied content to improve response times and reduce server load.
httpserverlocation
Синтаксисproxy_cache zone;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_cache' directive specifies the cache zone for storing cached responses from proxied servers. By defining a cache, NGINX can store the responses to avoid making frequent requests to the backend server, effectively speeding up response times for end-users and reducing load on the backend system. The directive can be used in the context of HTTP, server, and location blocks, allowing flexibility in implementing caching strategies across various parts of the configuration. The syntax for the 'proxy_cache' directive is as follows: 'proxy_cache zone;', where 'zone' is the name of a defined cache zone, which must be previously created using the 'proxy_cache_path' directive. This directive controls how long responses will be stored and can influence how subsequent requests are served—either from cache or forwarded to the backend. Additionally, other directives can be set to fine-tune cache behavior, such as 'proxy_cache_valid', which defines time periods for caching responses depending on their status codes, and 'proxy_cache_key', which customizes how cache keys are generated based on request parameters. It's also important to note that this directive alone does not configure caching behavior. It must be complemented by additional configurations pertaining to the cache zone, specific cache behaviors, and shared memory allocation, which determine how caching is managed and optimized within the NGINX server.

Пример конфига

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
        }
    }
}

Ensure that the cache zone is defined using 'proxy_cache_path' before referencing it in 'proxy_cache'.

Using 'proxy_cache' without proper cache controls can lead to stale data being served to users.

Be cautious with cache keys as they can lead to unexpected behavior if not set properly with 'proxy_cache_key'.

Make sure the filesystem permissions allow NGINX to write to the directory specified in 'proxy_cache_path'.

proxy_cache_key The `proxy_cache_key` directive sets the key used for caching proxied responses.
httpserverlocation
Синтаксисproxy_cache_key key_string;
По умолчанию$scheme$request_method$host$request_uri
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cache_key` directive defines how NGINX constructs the cache key for responses stored in the proxy cache. By default, it combines the protocol, host, URI, and query string to create a unique cache identifier for each request. By customizing the cache key, you can modify caching behavior and allow for finer control over what gets cached. The key can use variables, which enables dynamic key generation based on request parameters, headers, or other contextual data. The syntax for `proxy_cache_key` allows you to define a custom key string which can consist of static text and variables. For example, you can include the `$request_uri`, `$remote_addr`, and other variables to differentiate cached content. This flexibility allows multiple versions of a response to be cached based on user sessions or other criteria, enhancing your web cache's capability. Note that changing the cache key requires a good understanding of the cached content and how users interact with it to avoid unnecessary cache misses or overwriting.

Пример конфига

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_key "$scheme$request_method$host$request_uri";
        }
    }
}

Ensure that the custom cache key generated does not lead to excessive cache fragmentation, as overly granular keys can reduce cache hit rates.

If using variables in your cache key, be cautious of performance implications, as unnecessary complexity can add overhead to cache lookups.

proxy_cache_path The `proxy_cache_path` directive sets the path for storing cached responses when using the NGINX proxy caching functionality.
http
Синтаксисproxy_cache_path path [levels=levels] [keys_zone=name:size] [inactive=time] [max_size=size] [use_temp_path=on|off];
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

The `proxy_cache_path` directive in NGINX defines a specific path on the filesystem where cached data will be stored. This directive must be specified in the http context and can take several parameters that determine how the caching system manages and stores the cached data. The parameters for `proxy_cache_path` include the path to the cache directory, the levels of subdirectories for the cache, the key zone for managing the cache, and optional parameters such as `inactive` that define how long cached items should be retained before being considered stale. By specifying the levels for subdirectories, NGINX can efficiently manage the storage space used for caching, which is crucial for performance in high-traffic environments. When a cached response is requested, NGINX checks in the specified cache path to see if the response is already cached; if so, it serves the cached content directly, bypassing the need for an upstream request. This can significantly reduce latency and load on backend servers while improving the overall response time to clients.

Пример конфига

http {
    proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
        }
    }
}

Ensure that the specified cache path exists and is writable by the NGINX worker process.

Be cautious with cache size limits, as exceeding `max_size` can lead to unexpected cache evictions.

Using insufficient levels in the cache path can lead to performance degradation due to excessive file I/O.

proxy_cache_bypass The `proxy_cache_bypass` directive controls whether specific requests bypass the proxy cache in NGINX.
httpserverlocation
Синтаксисproxy_cache_bypass variable[, ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cache_bypass` directive is used within the HTTP, server, or location contexts to define conditions under which a request should bypass the proxy cache. It accepts one or more arguments, which can be variables, nginx built-in variables, or any other valid identifiers that evaluate to a truthy value when determining if a request should skip the cache. When a matching condition is satisfied, NGINX will serve the request directly from the origin server instead of returning the cached version, effectively allowing dynamic responses for specific requests while still utilizing caching for others. This directive is particularly useful when certain requests should not be cached, such as requests containing sensitive user-specific data or dynamic content that changes frequently. For example, you could set it to bypass caching when certain cookies or request headers are present. This allows fine-grained control over cache behavior and optimizes the performance by ensuring that only appropriate content is served from the cache, while still allowing the rest of the data to be cached and served efficiently.

Пример конфига

location / {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_bypass $cookie_nocache;
}

Ensure that the specified variable or expression evaluates correctly to avoid unintended caching behavior.

Overly broad conditions can lead to excessive cache misses, impacting performance and server load.

proxy_no_cache The `proxy_no_cache` directive inhibits caching for specified requests in NGINX's proxy module.
httpserverlocation
Синтаксисproxy_no_cache condition | = | 0 | 1;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_no_cache` directive is utilized within the proxy module of NGINX to control caching behavior on upstream responses. By using this directive, you can specify conditions that will determine whether a response is eligible for caching or not. The directives allow for boolean expressions that evaluate to true or false, enabling flexibility in managing cache storage based on various request parameters such as headers, cookies, and variables. When the specified condition evaluates as true, NGINX will not cache the response, effectively bypassing cache storage. This directive supports one or more arguments, allowing administrators to tailor caching logic precisely according to their application’s needs. In practice, you might want to prevent caching for authenticated users or specific request types; for instance, if the request contains a certain cookie value or if a header is present. The result is an effective mechanism to ensure that sensitive or user-specific data is served fresh from the backend server without being cached.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_no_cache $http_cache_control;
}

Ensure that the conditions passed to `proxy_no_cache` are correctly configured; otherwise, caching behavior may not work as intended.

Using complex boolean expressions may make debugging cache issues challenging.

This directive does not apply when the response already has caching headers set; ensure proper response header management.

proxy_cache_valid The `proxy_cache_valid` directive defines the duration for which a cached response is considered valid based on the response status code.
httpserverlocation
Синтаксисproxy_cache_valid status code time period;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cache_valid` directive configures the caching mechanism in NGINX by specifying how long a cached response should be retained for certain HTTP status codes. This directive is particularly beneficial when you want to control the cache duration based on different types of responses returned by a proxied server. For example, you might want to cache successful responses (HTTP 200) for a longer period compared to error responses (like HTTP 500). By default, cached responses are based on the `proxy_cache_use_stale` and `proxy_cache_revalidate` settings unless a specific time-to-live (TTL) is provided with this directive. The directive accepts one or more pairs of arguments: the HTTP status code(s) and the time period (which can be specified in seconds, minutes, hours, or days). For instance, you could write `proxy_cache_valid 200 1h;` to cache HTTP 200 responses for one hour. By using multiple lines, you can specify different time periods for various status codes, allowing for fine-tuned caching behavior appropriate to your application's needs. It is important to note that the caching behavior can also be influenced by additional directives like `proxy_cache`, which must be enabled for `proxy_cache_valid` to take effect.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_valid 200 1h;
    proxy_cache_valid 404 10m;
}

Not having `proxy_cache` enabled will cause this directive to have no effect.

If no cache is being served when a response is requested, the response will not be cached even if this directive is defined.

Be careful with status codes; incorrectly specified codes may lead to unintended caching behavior.

proxy_cache_min_uses The `proxy_cache_min_uses` directive sets the minimum number of times a cached response must be used before it is considered valid for serving.
httpserverlocation
Синтаксисproxy_cache_min_uses number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`proxy_cache_min_uses` defines how many times a cached response must be served from the cache before it is deemed valid and can be effectively reused for subsequent client requests. This is particularly useful in scenarios where responses are pre-cached from upstream servers but may require a certain threshold for usability based on characteristics like cache hit rates or load balancing designs. If the cached response has been served fewer times than the specified minimum uses, requests for that content will bypass the cached version, potentially fetching a fresh copy from the upstream server instead. This directive is applicable in various contexts, including `http`, `server`, and `location`, allowing flexible application in different parts of the NGINX configuration. The directive accepts a single integer argument that represents the minimum use threshold. By optimizing the usage threshold, administrators can control cache efficiency and manage server load better, mitigating scenarios that could lead to stale or less reliable content being served from cache.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_min_uses 5;
}

Setting this value too high might lead to unnecessary cache misses, increasing the load on the upstream servers.

Conversely, setting it too low may cause stale data to be served frequently if the backend responses don't change often.

proxy_cache_max_range_offset The 'proxy_cache_max_range_offset' directive sets the maximum allowed range offset for proxied cached responses in NGINX.
httpserverlocation
Синтаксисproxy_cache_max_range_offset size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_cache_max_range_offset' directive is utilized within the contexts of http, server, and location blocks of an NGINX configuration. It is designed to specify the maximum range offset that can be accepted for a response that is served from the proxy cache. By default, NGINX will allow any range request that does not exceed this specified offset value, which effectively helps optimize the caching mechanism when dealing with byte ranges in large media files or other content.

Пример конфига

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;
    server {
        location /media {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_max_range_offset 1048576;  # 1 MB
        }
    }
}

Ensure the value specified is appropriate for the content being served; too high a value may lead to excessive memory usage for large media files.

This directive only applies if the content is served from the proxy cache; enabling proxy caching is a prerequisite.

proxy_cache_use_stale The proxy_cache_use_stale directive controls when to serve stale cached responses to clients.
httpserverlocation
Синтаксисproxy_cache_use_stale error | timeout | invalid_header | updating | http_500;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The proxy_cache_use_stale directive allows NGINX to serve cached responses that may be stale based on specific conditions, instead of fetching fresh content from the backend server. This is particularly useful to improve response times and reduce load on the backend during high latency or downtime scenarios. The directive can be set to multiple parameters, which dictate under what conditions stale cached data should be used. For example, if set to 'error', NGINX will serve stale content if the backend server returns any error status. Similarly, 'timeout', 'updating', and 'http_500' can also be specified as conditions for serving stale data. Multiple conditions can be used in a single directive, separated by spaces. When the directive is enabled with specific parameters, if NGINX encounters a situation that meets one of the criteria while trying to obtain fresh content (e.g., a timeout or server error), it will automatically serve the last cached response that corresponds to that request instead of returning an error to the client. This ensures better resilience and user experience, particularly for frequently accessed resources where the cached data may still be relevant even if it's slightly out of date.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_use_stale error timeout;
}

Using this directive may lead to serving outdated content inadvertently if not configured properly accordingly to the application requirements.

Overusing this directive can mask backend issues without resolving underlying problems, leading to a poor user experience.

proxy_cache_methods The proxy_cache_methods directive specifies which HTTP methods are eligible for caching in the proxy cache.
httpserverlocation
Синтаксисproxy_cache_methods method1 [method2 ...];
По умолчаниюGET HEAD
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The proxy_cache_methods directive in NGINX is used to define which HTTP methods should be cached when handling requests through a proxied server. By default, only GET and HEAD methods are cached due to the typical usage patterns where these methods are safe for repeated requests without changing the resource state. However, applications may require specific caching behaviors for other methods such as POST or PUT, for example when implementing aggressive caching strategies or optimizing performance. This directive accepts one or more HTTP method names as arguments, including 'GET', 'HEAD', 'POST', 'PUT', etc. To enable caching for a non-default method, it must be explicitly listed as an argument to this directive. NGINX will filter the incoming requests based on the methods defined in proxy_cache_methods and cache the responses appropriately. Notably, it is essential to consider the implications of caching non-idempotent methods, as this can lead to unexpected behavior if not managed correctly. An important aspect of using this directive is its context flexibility, allowing it to be set in http, server, or location contexts. The settings can be fine-tuned at different levels depending on application requirements. Care should be taken when changing caching behavior for HTTP methods, as this might affect the application logic and resource interactions significantly.

Пример конфига

location /api { 
    proxy_pass http://backend;
    proxy_cache_methods GET POST;
}

Caching non-idempotent methods (like POST) can lead to unexpected application behavior.

Ensure that the backend server supports caching for the specified methods, or the configuration might not have the desired effect.

Misconfigured caching for sensitive operations could unintentionally serve stale data.

proxy_cache_lock The `proxy_cache_lock` directive enables serialization of requests for the same resource when a cache miss occurs to reduce load on the upstream server.
httpserverlocation
Синтаксисproxy_cache_lock on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

When `proxy_cache_lock` is set to on, NGINX will use a locking mechanism to prevent multiple concurrent requests from going upstream for the same resource that is not available in the cache. Instead, the first request that arrives will fetch the resource, and subsequent requests will wait until the first request completes to serve the cached content from the cache once it becomes available. This directive is particularly useful to improve the performance and efficiency of web applications that rely on backend services, especially in scenarios where cache misses may lead to a sudden spike in upstream requests. By enabling `proxy_cache_lock`, NGINX minimizes the load on backend servers and reduces the chances of overwhelming them with requests for the same item. You can use this directive at the `http`, `server`, or `location` context. Setting this option to on is crucial in high-traffic environments where caching is critical for performance and resource management.

Пример конфига

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_lock on;
        }
    }
}

Enabling `proxy_cache_lock` may introduce latency on subsequent requests while waiting for the first request to complete.

This directive should be used cautiously with low TTLs (Time-To-Live) cache settings, as it may lead to longer waiting times in high traffic situations.

proxy_cache_lock_timeout Sets a timeout for acquiring a lock on a cached proxy response.
httpserverlocation
Синтаксисproxy_cache_lock_timeout timeout;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cache_lock_timeout` directive is used to specify the maximum time that NGINX will wait to acquire a lock on a response stored in the cache. This directive is useful in scenarios where multiple requests are attempting to retrieve the same content simultaneously. By utilizing a lock, NGINX can serialize these requests, allowing it to only perform the backend request once, while the other requests wait for the response to be cached. This behavior helps to reduce load on the upstream servers and improves overall performance. The value for `proxy_cache_lock_timeout` is specified in time format, such as `10s` for 10 seconds, and it can be set to zero to disable locking. When a request hits a cache miss, if a lock is available, the request will proceed to obtain the contents from the upstream server. If the lock is held by another request and the wait time exceeds the specified value, the new request will proceed to return a 502 error instead of waiting indefinitely. The directive can be declared within the `http`, `server`, and `location` contexts, providing flexibility in configurations where caching is required on a granular basis. It is essential to carefully choose the timeout value based on the application's response times and expected traffic patterns to avoid unnecessary request failures.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 10s;
}

Setting the timeout too low may lead to increased 502 Bad Gateway errors if the upstream server is slow to respond.

Make sure to enable `proxy_cache_lock` in conjunction for the locking mechanism to work properly.

proxy_cache_lock_age The `proxy_cache_lock_age` directive sets the time limit that a request must wait for a cache lock to be released before a 504 response is returned.
httpserverlocation
Синтаксисproxy_cache_lock_age time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_cache_lock_age` directive configures the duration in which a request will wait for a cached response from another request that is currently being processed. This helps reduce the number of simultaneous requests for the same resource, allowing only one request to populate the cache while other requests either wait for the response or receive the cached response as soon as it is available. When a request hits a cache miss, and another request for the same content is already being processed, the second request will wait until the first request completes, up to the duration defined by `proxy_cache_lock_age`. If the first request completes within this time, the waiting request retrieves the cached response. If the lock is not released within the specified time, the waiting request will return a 504 Gateway Timeout error. By tune this directive appropriately, you can avoid unnecessary server load for high-frequency requests that hit the cache simultaneously while optimizing response times for users. To configure `proxy_cache_lock_age`, simply define this directive within the http, server, or location context, followed by the desired time duration. It is crucial to balance the value against the expected load and response times to avoid potential performance issues.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_cache my_cache;
    proxy_cache_lock on;
    proxy_cache_lock_age 5s;
}

Setting the age too low may result in frequent timeouts, as concurrent requests might not complete quickly enough.

Not enabling `proxy_cache_lock` will cause this directive to have no effect, as the cache locking mechanism is not activated.

proxy_cache_revalidate The `proxy_cache_revalidate` directive controls whether NGINX revalidates cached entries with the origin server before serving them to clients.
httpserverlocation
Синтаксисproxy_cache_revalidate on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

When enabled, `proxy_cache_revalidate` causes NGINX to send a conditional request to the upstream server for revalidating cached entries when there is an expired cache. It performs this validation by sending an If-Modified-Since or If-None-Match header with requests, which informs the origin server to check if the cached resource has been modified since it was last fetched. This behavior is particularly useful for ensuring that clients receive the most up-to-date versions of resources when serving cached content. If the upstream server responds that the resource has not changed (HTTP 304 Not Modified), NGINX serves the stale cached version to the client. If the resource has changed, NGINX fetches the new version and updates its cache accordingly. It's important to use this directive with a proper caching strategy to prevent unnecessary requests to the upstream server, particularly if the cache is frequently accessed and resources are less likely to be modified. However, if real-time accuracy is crucial for your application, enabling this directive may help maintain up-to-date content delivery.

Пример конфига

location /example {
    proxy_pass http://example_upstream;
    proxy_cache my_cache;
    proxy_cache_revalidate on;
}

Using this directive without a valid caching strategy may lead to high loads on upstream servers due to constant revalidation requests.

Ensure that the upstream server supports conditional requests, or clients may not benefit from this directive.

Remember that enabling this directive may increase response times for the first requests after cache expiration.

proxy_cache_convert_head The 'proxy_cache_convert_head' directive controls whether a HEAD request can return cached data for a GET request.
httpserverlocation
Синтаксисproxy_cache_convert_head on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_cache_convert_head' directive is used in NGINX configurations to determine if a HEAD HTTP request should serve a cached response based on a corresponding GET request. This directive enables the caching system to convert the HEAD request into a GET request internally if a valid cached version is available, thus enhancing performance by avoiding re-fetching the data from the upstream server every time a HEAD request is made. This behavior is particularly useful for applications that heavily utilize HEAD requests, allowing them to benefit from caching without requiring the upstream server to form a new response each time. When set to 'on', this feature alters the request handling, which may lead to quicker responses for HEAD requests. Conversely, if set to 'off', the server will not retrieve cached responses generated for GET requests for HEAD requests, potentially resulting in longer response times for HEAD requests, as they will need to hit the upstream server directly. The directive can be applied in various contexts including http, server, and location, providing flexibility in its use across different HTTP configurations within NGINX.

Пример конфига

http {
    proxy_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;
    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_convert_head on;
        }
    }
}

Ensure that the upstream server correctly handles GET and HEAD requests for the same resource.

Be aware that relying too much on cached HEAD responses may lead to stale data in certain cases.

proxy_cache_background_update The 'proxy_cache_background_update' directive allows updating the cache while serving stale responses.
httpserverlocation
Синтаксисproxy_cache_background_update on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_cache_background_update' directive is a flag within the NGINX HTTP module that determines whether or not NGINX should attempt to fetch a fresh version of a cached resource in the background when a stale resource is served to a client. By default, when a request is made for a cached item that has gone stale (i.e., it has passed its expiration time), NGINX would typically return the stale version of the resource. If the 'proxy_cache_background_update' directive is set to 'on', NGINX will not only serve the stale response but also initiate a request to fetch the updated version of the resource in the background. This ensures that the next client request for that resource will receive the fresh version with minimal performance overhead. This behavior is particularly useful in scenarios where you want to maintain high availability and fast response times while ensuring that cached resources are kept up-to-date. For example, in environments where data changes frequently, this directive can reduce the perceived latency for users while still managing server load effectively. Setting the directive to 'off' will revert to the default behavior of serving stale responses without attempting to update the cache in the background.

Пример конфига

http {
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=my_cache:10m max_size=1g;

    server {
        location / {
            proxy_pass http://backend;
            proxy_cache my_cache;
            proxy_cache_background_update on;
        }
    }
}

If used with 'proxy_cache_use_stale', ensure proper configuration to handle background updates without serving outdated content unintentionally.

Setting this directive to 'on' can lead to increased load on the backend if many requests for stale content occur simultaneously.

Be mindful that enabling this feature could potentially lead to more concurrent connections to the backend server during cache refreshes.

proxy_temp_path Sets the path for temporary files used by the proxy module in NGINX.
httpserverlocation
Синтаксисproxy_temp_path path [path2] [path3] [path4];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `proxy_temp_path` directive specifies the directory in which temporary files are stored when NGINX is processing a proxy request. This directive is crucial for managing files that are created during the proxying of large responses or when the upstream server is slow. By default, the files are written to a path defined by this directive, helping to ensure that NGINX can efficiently handle the responses even if they exceed normal memory limits. The directive can take up to four arguments that define the directory path for storing temporary files, and additional options can specify how NGINX should manage these files. This is particularly important in high-traffic environments where memory usage may be a concern, as it allows NGINX to write large HTML responses or binary data without consuming undue amounts of memory. By setting `proxy_temp_path`, administrators can also closely control where temporary files are located, which can be relevant for managing disk space or complying with security policies. An important aspect of `proxy_temp_path` is that it must point to a writable directory; otherwise, NGINX may fail to process requests properly and return error messages. If NGINX is unable to create or write to the specified temporary directory, it may lead to issues with request handling and could affect overall performance.

Пример конфига

http {
    proxy_temp_path /var/tmp/nginx/proxy;
}

Ensure the directory is writable by the NGINX worker processes.

If the directory does not exist, NGINX will not create it automatically and may encounter errors.

Using a temporary path on a filesystem with poor performance can degrade proxy response times.

proxy_max_temp_file_size The 'proxy_max_temp_file_size' directive sets the maximum size of temporary files used to store proxied responses.
httpserverlocation
Синтаксисproxy_max_temp_file_size size;
По умолчанию1m
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'proxy_max_temp_file_size' directive is used to control the maximum size of temporary files that are created while handling responses from proxied servers. If a response exceeds this specified size, NGINX will not store the response in a temporary file and will instead return an error. This is particularly useful to avoid exhausting disk space when handling large responses. The directive can be configured in the http, server, and location contexts for finer control depending on the structure of your server configuration. When configuring 'proxy_max_temp_file_size', you can specify the value in bytes or use suffixes for more readability: 'k' for kilobytes, 'm' for megabytes, and 'g' for gigabytes. It is important to note that setting this value too low might lead to increased errors if certain proxied responses are larger than allowed; conversely, setting it too high may cause storage issues on disk if many large responses are cached temporarily. Hence, it is advisable to evaluate the expected response sizes when defining this limit.

Пример конфига

location /api {
    proxy_pass http://backend_server;
    proxy_max_temp_file_size 5m;
}

Setting the size too small may lead to frequent errors for large responses.

Not considering the disk space when setting a high limit can fill up available storage.

proxy_temp_file_write_size Директива `proxy_temp_file_write_size` задаёт ограничение размера для записи временных файлов при обработке проксированных ответов.
httpserverlocation
Синтаксисproxy_temp_file_write_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_temp_file_write_size` в NGINX задаёт максимальный объём данных, который может быть записан во временные файлы для проксированных ответов. Когда ответ от проксируемого сервера больше этого объёма, NGINX будет буферизировать его во временных файлах вместо памяти, что может быть критично для управления использованием памяти в сценариях высокой нагрузки. Директива помогает избежать ситуаций нехватки памяти, контролируя, сколько данных ответа может находиться в памяти до их сброса на диск. Эта директива принимает один аргумент, который определяет ограничение размера и может принимать значения, например '1m' для одного мегабайта, '512k' для полумегабайта и т.д. Контекстами для этой директивы являются `http`, `server` и `location`, что даёт пользователям гибкость в её настройке в зависимости от желаемой области действия прокси-настроек. При настройке этого параметра важно учитывать влияние на ввод/вывод на диск, особенно на серверах с ограниченными ресурсами или при частой отдаче больших файлов. На практике, если размер ответа превышает заданный лимит, прокси-сервер начнёт запись данных во временные файлы, расположенные в указанной директории, позволяя дальнейшей обработке продолжаться без перегрузки памяти сервера. Администраторы должны внимательно отслеживать размеры ответов и при необходимости корректировать этот параметр для оптимизации производительности и управления ресурсами.

Пример конфига

http {
    proxy_temp_file_write_size 1m;
    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

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

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

Изменение этой директивы в работающей конфигурации может не повлиять на текущие запросы; может потребоваться перегрузка или перезапуск.

proxy_next_upstream Директива `proxy_next_upstream` определяет, должен ли запрос быть передан следующему upstream-серверу при сбое.
httpserverlocation
Синтаксисproxy_next_upstream parameter1 [parameter2 ...];
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_next_upstream` в NGINX имеет решающее значение для управления сбоями и обеспечения высокой доступности при использовании proxy-модуля. Она задаёт условия, при которых текущий проксированный запрос будет повторно отправлен на следующий сервер в группе upstream. Это особенно полезно для балансировки нагрузки и отказоустойчивости в микросервисной архитектуре, где единая точка отказа может быть смягчена перенаправлением трафика на другой сервер. Эта директива принимает один или несколько аргументов, которые указывают условия ошибок, при которых запрос будет передан следующему upstream-серверу. К распространённым параметрам относятся 'error', 'timeout', 'invalid_header' и 'failed' и др. Комбинируя разные параметры, администраторы могут тонко настраивать условия повторной попытки запроса, улучшая пользовательский опыт за счёт снижения вероятности отказа запроса из‑за кратковременных проблем на одном upstream-сервере. Если upstream-сервер выходит из строя по одной из указанных причин, NGINX попытается связаться со следующим сервером в настроенном блоке upstream. Это помогает предотвратить простои и обеспечивает прозрачное переключение при отказе. Данная возможность важна для поддержания непрерывности сервиса, так как клиенты остаются неосведомлёнными о внутренних сбоях серверов, предполагая, что система надёжнее, чем есть на самом деле. Тем не менее важно настроить адекватный мониторинг и систему оповещений для выявления проблем по мере их появления, несмотря на автоматические повторы, включённые этой директивой.

Пример конфига

upstream myapp {
    server backend1.example.com;
    server backend2.example.com;
}

location / {
    proxy_pass http://myapp;
    proxy_next_upstream error timeout invalid_header;
}

Чрезмерное использование этой директивы может привести к увеличению задержки, поскольку NGINX ожидает повторных попыток перед ответом клиентам.

Убедитесь, что upstream-серверы совместимы, поскольку повторные попытки особенно могут привести к непредвиденному поведению, если используются разные версии или конфигурации.

proxy_next_upstream_tries Директива `proxy_next_upstream_tries` управляет количеством попыток связи с upstream-серверами, если предыдущий запрос завершился неудачей.
httpserverlocation
Синтаксисproxy_next_upstream_tries number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_next_upstream_tries` задаёт максимальное количество попыток, которые NGINX предпримет для связи с upstream-серверами до возврата ошибки. По сути она помогает балансировке нагрузки, устанавливая лимит повторных попыток, применяемый, когда запрос к upstream-серверу не удаётся из‑за указанных условий отказа. К таким условиям могут относиться недоступность сервера, таймауты или другие ошибки. Когда директива установлена, NGINX попытается повторно отправить запрос на другой сервер в определённой группе upstream до указанного числа попыток. Если будет достигнут максимальный предел попыток, NGINX вернёт клиенту сообщение об ошибке. Эта функция может повысить доступность и устойчивость сервисов, особенно в развертываниях в кластере, где некоторые серверы могут временно перестать отвечать. Поведение этой директивы определяется директивой `proxy_next_upstream`, которая определяет, какие сценарии отказа должны запускать повторную попытку. Важно сбалансировать число попыток в условиях ограниченных ресурсов, поскольку чрезмерные повторы могут привести к снижению производительности из‑за ненужной нагрузки на upstream-серверы.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_next_upstream_tries 3;
}

Установка значения на очень большое число может привести к увеличению задержки и потребления ресурсов.

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

proxy_next_upstream_timeout Директива 'proxy_next_upstream_timeout' задаёт таймаут для попыток подключения к следующему upstream-серверу в прокси-сценарии.
httpserverlocation
Синтаксисproxy_next_upstream_timeout time;
По умолчанию1s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_next_upstream_timeout` в NGINX используется для указания максимального времени ожидания следующего upstream-сервера после того, как предыдущая попытка подключения завершилась неудачей. Это особенно полезно при балансировке нагрузки между несколькими бэкенд-серверами, так как она определяет, сколько времени NGINX будет ждать, прежде чем повторно попробовать подключиться к другому серверу в upstream-блоке при возникновении указанных условий ошибки или таймаута. Когда запрос завершается неудачей из-за таймаута или других заданных критериев, NGINX может автоматически попытаться подключиться к альтернативному upstream-серверу. Директива `proxy_next_upstream_timeout` позволяет администраторам контролировать, как долго будет выполняться такая повторная попытка. Подбирая значение этого таймаута, вы можете оптимизировать отзывчивость вашего приложения, находя баланс между ожиданием потенциально медленного сервера и быстрым переключением на здоровый сервер. Значение таймаута задаётся в формате времени, совместимом с NGINX, например в секундах, минутах или часах (например, '30s' для 30 секунд). Установка этой директивы в разных контекстах, таких как `http`, `server` или `location`, даёт возможность тонкой настройки в соответствии с требованиями приложения.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_next_upstream_timeout 5s;
}

Убедитесь, что значение таймаута достаточно для ответа ваших upstream-серверов, иначе могут происходить частые таймауты.

Учтите взаимодействие между `proxy_next_upstream_timeout` и другими связанными директивами, такими как `proxy_connect_timeout`.

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

proxy_pass_header Директива `proxy_pass_header` указывает, какие заголовки должны быть переданы от проксируемого сервера клиенту.
httpserverlocation
Синтаксисproxy_pass_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_pass_header` используется в контексте блоков `http`, `server` или `location` в конфигурационных файлах NGINX. Эта директива позволяет пользователю указать конкретные HTTP-заголовки, которые должны быть включены в HTTP-ответ от сервера NGINX к клиенту, когда ответ формируется проксируемым сервером. По умолчанию NGINX будет передавать определённые заголовки от upstream server клиенту, но директива `proxy_pass_header` даёт пользователям гибкость добавлять или ограничивать конкретные заголовки в зависимости от их потребностей. Это может быть особенно полезно при управлении безопасностью, поведением кэширования или при кастомизации ответов в зависимости от окружения. При использовании `proxy_pass_header` можно указать несколько заголовков, что позволяет тонко настроить, какие заголовки нужно пропускать. Например, если проксируемый сервер устанавливает пользовательский заголовок, который клиентам необходимо получить, эта директива может гарантировать пересылку заголовка вместе с ответом обратно исходному клиенту. И наоборот, если существуют заголовки, которыми не следует делиться по соображениям безопасности или конфиденциальности, эта директива позволяет контролировать такое поведение. Важно понимать последствия изменения заголовков, особенно в контексте безопасности, кэширования и совместимости с клиентами.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_pass_header X-Custom-Header;
}

Убедитесь, что указанные заголовки присутствуют в ответе от вышестоящего сервера; в противном случае они не будут переданы клиенту.

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

proxy_hide_header Директива 'proxy_hide_header' удаляет указанные заголовки из ответа, получаемого клиентом при использовании proxy_pass.
httpserverlocation
Синтаксисproxy_hide_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_hide_header` инструктирует NGINX удалять определённые HTTP-заголовки ответа от upstream server перед отправкой ответа клиенту. Это может быть полезно в целях безопасности или конфиденциальности, позволяя предотвратить раскрытие чувствительной информации в заголовках ответов. Директива может быть определена в контекстах `http`, `server` или `location`, что обеспечивает гибкость конфигурации в зависимости от области применения на вашем сервере NGINX. Параметры директивы состоят из имени заголовка, который необходимо исключить из ответа. При использовании директивы `proxy_hide_header` важно передавать в качестве аргументов корректные имена заголовков. Если указанный заголовок отсутствует в ответе от upstream server, это не приведёт к ошибке: NGINX просто пропустит его. Директиву можно включать несколько раз, чтобы скрыть несколько заголовков, что обеспечивает полный контроль над информацией, возвращаемой клиентам. Пользователям следует быть внимательными при настройке директивы, чтобы не удалить случайно критические заголовки, необходимые для работы приложения, так как это может привести к непредвиденному поведению.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_hide_header X-Powered-By;
}

Убедитесь, что имя заголовка указано правильно и совпадает по регистру с заголовком в ответе, поскольку заголовки в HTTP нечувствительны к регистру, но в конфигурационных файлах могут обрабатываться с учётом регистра.

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

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

proxy_ignore_headers Директива `proxy_ignore_headers` настраивает NGINX так, чтобы игнорировать определённые заголовки в проксируемых ответах.
httpserverlocation
Синтаксисproxy_ignore_headers header_name ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ignore_headers` инструктирует NGINX опускать указанные заголовки в ответах, проксируемых клиентам. Это может быть полезно для контроля информации, возвращаемой пользователям, особенно при работе с конфиденциальными заголовками или если нужно принудительно задать определённые правила кэширования. Вы можете указать один или несколько заголовков в качестве аргументов, и NGINX будет игнорировать эти заголовки в ответах, которые он пропускает через прокси. Эту директиву можно установить в различных контекстах, включая `http`, `server` и `location`, что позволяет гибко настраивать поведение в зависимости от конкретных потребностей вашей серверной конфигурации. При указании заголовков для игнорирования можно использовать имена заголовков, такие как "Cache-Control", "Expires" и т. п. Если указано несколько заголовков, они должны быть разделены пробелами. Директива не изменяет конфигурацию проксируемого сервера и только влияет на то, что NGINX отправляет обратно запросившему, гарантируя, что потенциально нежелательная информация будет отфильтрована до того, как она достигнет клиента.

Пример конфига

location /example {
    proxy_pass http://backend;
    proxy_ignore_headers Cache-Control Expires;
}

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

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

proxy_http_version Директива 'proxy_http_version' указывает версию протокола HTTP, используемую при общении с проксируемым сервером.
httpserverlocation
Синтаксисproxy_http_version 1.0 | 1.1;
По умолчанию1.1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'proxy_http_version' позволяет задать желаемую версию протокола HTTP (например, HTTP/1.0 или HTTP/1.1), которую NGINX должен использовать при подключении к бэкенд-серверу при проксировании запросов. Выбор версии протокола может влиять на поведение соединения и на доступные дополнительные возможности, такие как keep-alive-соединения, в зависимости от возможностей проксируемого сервера. В контексте конфигурации NGINX эта директива может быть указана в контекстах 'http', 'server' или 'location', что позволяет тонко контролировать отдельные участки конфигурации в части того, как NGINX взаимодействует с upstream-серверами. Например, при использовании HTTP/1.0 без keep-alive по одному соединению можно отправить только один запрос, что может повлиять на производительность вашего приложения в зависимости от того, как обрабатываются запросы. Синтаксис директивы: 'proxy_http_version ;' где — желаемая версия HTTP (например, '1.0' или '1.1'). Важно убедиться, что сервер, на который вы делаете проксирование, поддерживает указанную версию HTTP, иначе вы можете столкнуться с непредвиденными ошибками или ухудшением производительности.

Пример конфига

location /api {
    proxy_pass http://backend;
    proxy_http_version 1.1;
}

Установка 'proxy_http_version' в '1.0' по умолчанию отключает keep-alive соединения.

Убедитесь, что upstream server поддерживает выбранную версию HTTP, чтобы избежать ошибок. Изменение версии может изменить ожидаемое поведение соединения.

proxy_ssl_session_reuse Директива `proxy_ssl_session_reuse` управляет повторным использованием SSL-сеансов между проксируемыми соединениями.
httpserverlocation
Синтаксисproxy_ssl_session_reuse on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_session_reuse` указывает, должен ли NGINX пытаться повторно использовать SSL-сеансы при проксировании SSL-соединений. По умолчанию повторное использование SSL-сеансов позволяет быстрее восстанавливать соединения за счёт уменьшения накладных расходов, связанных с установкой новых SSL-соединений. Если эта директива установлена в 'on', NGINX будет использовать кэшированные SSL-сеансы при установлении SSL-соединения с проксируемым сервером, что может привести к улучшению времени отклика и снижению загрузки CPU как со стороны клиента, так и со стороны сервера. Напротив, если значение 'off', SSL-сеансы не будут повторно использоваться, и для каждого проксируемого соединения потребуется полное рукопожатие, что может негативно сказаться на производительности, особенно при высокой нагрузке. Эта директива может быть особенно полезна в сценариях, где соединения с backend servers устанавливаются часто и должны быть защищены при помощи SSL. Её можно настраивать на уровнях контекстов `http`, `server` или `location`, что обеспечивает гибкость управления оптимизациями производительности SSL в зависимости от разных потребностей маршрутизации. Для применения этой директивы убедитесь, что ваши upstream servers поддерживают SSL session IDs для максимальной эффективности, так как это требование для эффективной работы функции повторного использования сеансов.

Пример конфига

location /api {
    proxy_pass https://backend;
    proxy_ssl on;
    proxy_ssl_session_reuse on;
}

Повторное использование SSL-сессий эффективно только если upstream servers поддерживают его.

Установка этой директивы в 'off' может привести к увеличению нагрузки на SSL handshake, что повлияет на производительность.

Эта директива взаимодействует с настройками кэша SSL; если кэширование настроено неправильно, повторное использование сессий может не происходить так, как ожидается.

proxy_ssl_protocols Директива proxy_ssl_protocols определяет SSL/TLS протоколы, которые принимаются при установлении защищённого соединения с проксируемым сервером.
httpserverlocation
Синтаксисproxy_ssl_protocols protocol1 [protocol2 ...];
По умолчаниюTLSv1 TLSv1.1 TLSv1.2
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива proxy_ssl_protocols используется для определения версий протоколов SSL и TLS, которые NGINX будет принимать при подключении к проксируемому бэкенд‑серверу по защищённому каналу. Поддержка различных протоколов, таких как TLSv1, TLSv1.1 и TLSv1.2 (или более поздних версий), обеспечивает работу прокси в соответствии с требуемыми стандартами безопасности. Указав эти протоколы, администраторы могут повысить соответствие безопасности конфигурации NGINX, разрешая для связи с upstream servers только безопасные версии. Эта директива может располагаться в контекстах http, server и location, что даёт гибкость в конфигурировании. Например, сервер NGINX, обслуживающий несколько приложений на разных серверах, может применять разные версии протоколов SSL в зависимости от требований приложений. Администраторам следует учитывать, что по мере появления новых версий SSL/TLS хорошей практикой считается устаревание старых, менее безопасных версий для защиты конфиденциальных данных. Аргументы этой директивы представляют собой список версий протоколов SSL/TLS, который должен быть указан хотя бы один раз; его отсутствие приведёт к недопустимой конфигурации.

Пример конфига

location /secure {
    proxy_pass https://backend.example.com;
    proxy_ssl_protocols TLSv1.2;  # Only allow TLSv1.2 for backend connections
}

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

Принятые протоколы должны поддерживаться как NGINX, так и upstream server; в противном случае защищённые соединения могут не установиться.

Эта директива действует только при настройке SSL/TLS для проксирования.]

Убедитесь, что вы перезапустили или перезагрузили NGINX после внесения изменений, чтобы они вступили в силу.

proxy_ssl_ciphers Директива `proxy_ssl_ciphers` задаёт список допустимых SSL-шифров для проксируемых SSL-соединений в NGINX.
httpserverlocation
Синтаксисproxy_ssl_ciphers STRING;
По умолчаниюHIGH:!aNULL:!MD5
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_ciphers` имеет решающее значение для установления безопасных соединений, когда NGINX выступает в роли обратного прокси для SSL/TLS-соединений. Указывая эту директиву, администраторы могут контролировать, какие шифры используются во время SSL-рукопожатия с вышестоящими серверами. Эта возможность не только повышает безопасность за счёт использования сильных шифров, но и обеспечивает совместимость с конкретными требованиями клиентов или нормативными требованиями. Значением, принимаемым директивой `proxy_ssl_ciphers`, является список шифров, который может соответствовать формату строки шифров OpenSSL. Он может включать отдельные шифры и группы шифров и должен определяться в соответствии с требуемым уровнем безопасности и производительности. При настройке этой директивы важно следить за актуальностью списка и минимизировать количество небезопасных шифров, чтобы защититься от уязвимостей в устаревших алгоритмах. Эта директива может быть размещена в различных контекстах, включая `http`, `server` и `location`, что позволяет осуществлять как глобальное, так и детализированное управление SSL-настройками в зависимости от уровня иерархии конфигурации NGINX. Изменения этой директивы обычно требуют перезапуска или перезагрузки службы NGINX для вступления в силу.

Пример конфига

server {
    location / {
        proxy_pass https://backend;
        proxy_ssl_ciphers 'HIGH:!aNULL';
    }
}

Убедитесь, что указанные ciphers поддерживаются версией OpenSSL, используемой сервером NGINX.

Использование слабых ciphers может подвергнуть приложение уязвимостям.

Тестирование влияния изменений на установление SSL/TLS соединений критически важно, чтобы избежать сбоев в работе сервиса.

proxy_ssl_name Директива proxy_ssl_name задаёт SSL-имя хоста для проксируемого запроса.
httpserverlocation
Синтаксисproxy_ssl_name string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива proxy_ssl_name используется в модуле NGINX HTTP для установки значения заголовка 'Host' в проксированных SSL-запросах. Это значение хоста критично, когда бэкенд-сервер использует расширение SNI (Server Name Indication) для SSL, которое позволяет обслуживать несколько SSL-сертификатов с одного и того же IP-адреса. Настроив proxy_ssl_name, вы можете гарантировать отправку правильного имени хоста на бэкенд при выполнении запроса. Директива принимает один аргумент — имя хоста, которое NGINX будет использовать при пересылке SSL-запросов. Она может быть задана в контекстах http, server или location, что позволяет тонко управлять поведением SSL в разных областях конфигурации. Например, если у вас несколько upstream-серверов, которым требуются разные настройки SSL или разные имена хостов для успешного TLS-рукопожатия, вы можете указать proxy_ssl_name отдельно для каждого контекста. Если директива не задана, NGINX отправит исходный заголовок 'Host' из запроса клиента, что не всегда может соответствовать настройкам upstream и привести к ошибкам при установлении защищённого соединения.

Пример конфига

location /api {
    proxy_pass https://backend.example.com;
    proxy_ssl_name backend.example.com;
}

Убедитесь, что указанный hostname совпадает с одним из SSL certificates на backend server, чтобы избежать SSL handshake failures.

Неправильная конфигурация может привести к уязвимостям безопасности, если в SSL communication используются неверные hostnames.

proxy_ssl_server_name Директива `proxy_ssl_server_name` включает SNI для проксируемых запросов, позволяя NGINX отправлять имя сервера в SSL handshake.
httpserverlocation
Синтаксисproxy_ssl_server_name on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_server_name` управляет тем, включается ли поле Server Name Indication (SNI) в SSL/TLS requests, которые NGINX проксирует на другой сервер. Когда установлено в `on`, NGINX включает имя хоста из заголовка `Host` в SSL handshake, что важно для серверов, использующих несколько SSL-сертификатов для разных имён хостов на одном и том же IP-адресе. Это особенно актуально в сценариях, когда несколько доменов размещены на одном сервере с общими IP-адресами; правильный сертификат может быть выбран на основе информации SNI, предоставленной клиентом. Директиву можно использовать в нескольких контекстах: блоках `http`, `server` и `location`, и она ожидает один аргумент — флаг. Установка директивы в `on` включает SNI, установка в `off` отключает его. По умолчанию директива установлена в `off`, то есть SNI не будет использоваться, если явно не включён. Важно отметить, что если сервер бэкенда не поддерживает SNI, правильный сертификат может не быть подан, что потенциально приведёт к ошибкам SSL-подключения. Эта директива особенно полезна при работе с несколькими SSL-сертификатами на сервере бэкенда, поскольку она позволяет NGINX динамически выбирать соответствующий сертификат на основе запрошенного имени хоста, тем самым обеспечивая правильную SSL termination и повышая общую безопасность проксируемых соединений.

Пример конфига

location /api {
    proxy_pass https://backend.example.com;
    proxy_ssl_server_name on;
}

Убедитесь, что сервер бэкенда поддерживает SNI; в противном случае установка этой директивы в 'on' может привести к ошибкам SSL.

Проксирование на устаревший сервер, который некорректно обрабатывает SNI, может вызвать проблемы, если эта директива включена.

proxy_ssl_verify Директива `proxy_ssl_verify` управляет проверкой SSL-сертификата для проксируемых соединений.
httpserverlocation
Синтаксисproxy_ssl_verify on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_verify` используется в NGINX для указания того, должна ли выполняться проверка SSL-сертификата при установлении соединения с проксируемым сервером. Эта директива принимает аргумент-флаг, где 'on' включает проверку, а 'off' отключает её. По умолчанию, если директива не указана, проверка SSL отключена ('off'). Когда проверка включена, NGINX использует системные SSL-библиотеки для проверки действительности SSL-сертификата целевого сервера относительно доверенных центров сертификации (CAs). Этот шаг критически важен для приложений, которые полагаются на защищённые соединения, поскольку он гарантирует, что сертификат действителен и не был подделан или отозван, что защищает пользователей от атак типа 'man-in-the-middle'. При настройке этой директивы также важно учитывать цепочку доверия — путь от сертификата сервера к доверенному корневому центру сертификации. Если для проверки требуются промежуточные сертификаты CA, их следует предоставить в соответствующей конфигурации. Если проверка SSL не проходит, NGINX отклонит соединение с проксируемым сервером и запишет сообщение об ошибке в журнал, что позволит администраторам принять соответствующие меры. Поэтому при использовании `proxy_ssl_verify` в рабочей среде рекомендуется тщательно управлять SSL-сертификатами и их цепочками доверия.

Пример конфига

location /api {
    proxy_pass https://backend-server;
    proxy_ssl_verify on;
    proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
}

Убедитесь, что соответствующие CA certificates установлены и правильно настроены, чтобы SSL verification прошла успешно.

Если SSL verification не пройдёт, NGINX откажет в подключении, что может привести к сбоям в работе сервиса, если это не будет должным образом обработано.

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

proxy_ssl_verify_depth Директива `proxy_ssl_verify_depth` задаёт глубину проверки цепочек SSL-сертификатов при проксировании.
httpserverlocation
Синтаксисproxy_ssl_verify_depth depth;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_verify_depth` используется совместно с SSL/TLS‑соединениями, когда NGINX выступает в роли обратного прокси для бэкенд‑серверов, имеющих SSL‑сертификаты. Эта директива конкретно контролирует, сколько промежуточных сертификатов может быть в цепочке, ведущей к действительному, доверенному корневому сертификату в процессе валидации. Когда клиент подключается к серверу по HTTPS, проверка SSL‑сертификата может включать несколько уровней сертификатов, таких как корневые и промежуточные сертификаты и т.д. Директива `proxy_ssl_verify_depth` позволяет администратору задать максимальное количество таких промежуточных сертификатов, через которые может пройти проверка, прежде чем она завершится ошибкой. Если установлено значение `0`, это означает, что будет проверяться только конечный сертификат, а промежуточные — нет. Эта директива имеет решающее значение для установления безопасного соединения, так как помогает подтвердить подлинность SSL‑сертификатов, представляемых upstream‑серверами, и может способствовать предотвращению атак типа «человек посередине». Правильная настройка глубины гарантирует, что принимаются только действительные цепочки сертификатов, что поддерживает целостность и безопасность проксируемых соединений.

Пример конфига

location /api {
    proxy_pass https://backend;
    proxy_ssl_verify on;
    proxy_ssl_verify_depth 2;
}

Установка слишком малого значения verify depth может позволить недоверенным сертификатам пройти проверку, если они находятся всего в нескольких уровнях от root.

Директива сама по себе не настраивает проверку сертификатов; убедитесь, что вы также используете `proxy_ssl_verify on;` для вступления её в силу.

proxy_ssl_trusted_certificate Директива `proxy_ssl_trusted_certificate` указывает файл, содержащий доверенные сертификаты CA для проверки SSL-соединений с проксируемыми серверами.
httpserverlocation
Синтаксисproxy_ssl_trusted_certificate file;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_trusted_certificate` используется в NGINX для указания пути к файлу, содержащему доверенные сертификаты CA. Это особенно важно при установлении защищённого соединения с вышестоящими (upstream) серверами по SSL/TLS, поскольку директива позволяет клиенту проверять подлинность сертификата сервера. Указание этой директивы повышает безопасность проксируемых соединений, гарантируя, что они взаимодействуют только с доверенными серверами, что снижает риск атак man-in-the-middle. При настройке этой директивы NGINX будет загружать сертификаты из указанного файла при инициировании SSL-соединений с upstream-серверами. Важно, чтобы файл содержал только PEM-кодированные сертификаты CA. Если файл имеет неверный формат или не содержит необходимых сертификатов, NGINX может не установить SSL-соединение, что приведёт к ошибкам в вашем приложении. Директиву можно определить в блоках `http`, `server` или `location`, что делает её универсальной для разных областей конфигурации. Учтите, что после изменения списка доверенных сертификатов потребуется перезагрузить конфигурацию NGINX, чтобы применить изменения. У директивы нет значения по умолчанию, поэтому её необходимо явно задать для включения проверки SSL для проксируемых соединений.

Пример конфига

http {
    proxy_ssl_trusted_certificate /etc/nginx/certs/ca.crt;
}

Убедитесь, что файл сертификата существует и имеет правильный формат (PEM-encoded).

Будьте осторожны при использовании этой директивы в средах с высоким трафиком, поскольку она добавляет накладные расходы на проверки SSL.

Перезагрузите или перезапустите NGINX после обновления файла сертификата.

proxy_ssl_crl Директива `proxy_ssl_crl` указывает файл списка отозванных сертификатов (CRL) для проверки сертификатов в SSL-прокси-соединениях.
httpserverlocation
Синтаксисproxy_ssl_crl path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_crl` используется в конфигурации NGINX для указания файла, содержащего список отозванных сертификатов (CRL). Этот CRL критически важен для установления защищённых прокси-соединений, особенно при работе с SSL/TLS сертификатами. Он позволяет NGINX проверять действительность SSL-сертификата сервера по отношению к списку отозванных сертификатов, повышая безопасность за счёт предотвращения использования скомпрометированных сертификатов. Директива принимает один аргумент, которым должен быть путь к файлу CRL в формате PEM. Эту директиву можно задать в любом из контекстов `http`, `server` или `location`, что делает её достаточно гибкой для разных уровней архитектуры приложения. Процесс проверки SSL-сертификата происходит каждый раз, когда NGINX устанавливает SSL-соединение с проксируемым сервером. Если сертификат сервера найден в CRL, соединение будет прервано с ошибкой, тем самым нейтрализуя потенциальные риски безопасности, связанные с использованием отозванного сертификата.

Пример конфига

location /api {
    proxy_pass https://backend;
    proxy_ssl_crl /etc/nginx/crl.pem;
}

Убедитесь, что файл CRL регулярно обновляется, чтобы избежать использования устаревших данных об отзыве.

Путь к файлу должен быть абсолютным; относительные пути могут вызывать ошибки.

Убедитесь, что файл CRL соответствует формату PEM.

proxy_ssl_certificate Директива `proxy_ssl_certificate` задаёт файл клиентского SSL-сертификата для SSL/TLS-соединений с проксируемым сервером.
httpserverlocation
Синтаксисproxy_ssl_certificate path-to-certificate;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_certificate` используется в конфигурации NGINX для указания пути к файлу SSL-сертификата, который должен быть отправлен upstream-серверу при установлении SSL/TLS-соединения. Эта директива особенно важна в сценариях, когда NGINX выступает в роли обратного прокси для HTTPS-соединений, обеспечивая защищённую связь между клиентом и сервером. Указывая клиентский сертификат, NGINX может аутентифицировать себя перед backend-сервером, что позволяет реализовать взаимную аутентификацию SSL/TLS. Эта директива может использоваться в разных контекстах: `http`, `server` и `location`, что делает её гибкой и применимой в разных областях конфигурации NGINX. Указанный сертификат должен быть в формате PEM — стандартном формате для SSL‑сертификатов, обеспечивающем совместимость с протоколами SSL/TLS. Клиентский сертификат часто сопровождается приватным ключом, который задаётся директивой `proxy_ssl_certificate_key` для установления защищённого соединения с backend-сервером. Крайне важно обеспечить корректный доступ к файлу сертификата для пользователя, под которым запускается процесс NGINX. Если NGINX не сможет получить доступ к файлу сертификата из‑за проблем с правами, он не запустится или не сможет перезагрузиться, что приведёт к сбоям в работе сервиса. Кроме того, для оптимальной производительности и безопасности может потребоваться настройка параметров SSL-сессии вместе с этой директивой — например, указание поддерживаемых SSL‑протоколов и наборов шифров для полного обеспечения защищённости канала связи.

Пример конфига

location /api {
    proxy_pass https://backend.example.com;
    proxy_ssl_certificate /etc/ssl/certs/client-cert.pem;
    proxy_ssl_certificate_key /etc/ssl/private/client-key.pem;
}

Убедитесь, что файл сертификата в формате PEM; в противном случае NGINX не сможет его использовать.

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

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

proxy_ssl_certificate_key Указывает файл приватного ключа SSL-сертификата для проксирования HTTPS-соединений.
httpserverlocation
Синтаксисproxy_ssl_certificate_key file;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`proxy_ssl_certificate_key` директива задаёт путь к файлу приватного ключа, связанного с SSL-сертификатом, используемым для установления защищённых прокси-соединений с upstream-серверами. Это особенно важно в сценариях, когда NGINX выступает в роли обратного прокси, завершая SSL и перенаправляя запросы к бэкенд-службам. Указав правильный путь к приватному ключу, NGINX может аутентифицировать себя перед upstream-сервером с помощью сертификата, обеспечивая защищённую передачу данных по SSL/TLS. Директиву можно использовать в различных контекстах, таких как `http`, `server` и `location`. Она принимает один аргумент: путь к файлу приватного ключа. Если в вашей конфигурации используются upstream, защищённые с помощью SSL/TLS, включение этой директивы необходимо для обеспечения защищённости прокси-соединений. Файл приватного ключа должен быть доступен для чтения процессу NGINX и корректно защищён во избежание несанкционированного доступа. Когда эта директива задана, она обычно применяется совместно с директивой `proxy_ssl_certificate`, которая указывает соответствующий файл SSL-сертификата. Обе директивы являются важными компонентами для включения SSL-коммуникации в прокси-конфигурациях. Правильная настройка этих директив критична для сохранения конфиденциальности и целостности данных при передаче, особенно при работе с чувствительной информацией или защищёнными API.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/example.crt;
    proxy_ssl_certificate_key /etc/nginx/ssl/example.key;

    location / {
        proxy_pass https://backend-server;
    }
}

Убедитесь, что файл private key доступен для чтения пользователем NGINX.

Убедитесь, что указан правильный путь к private key, соответствующему SSL-сертификату.

Если private key зашифрован, могут потребоваться дополнительные настройки для управления passphrase.

proxy_ssl_certificate_cache Директива `proxy_ssl_certificate_cache` настраивает поведение кэширования клиентских SSL-сертификатов при проксировании в NGINX.
httpserverlocation
Синтаксисproxy_ssl_certificate_cache size [timeout];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_certificate_cache` используется в конфигурации NGINX для задания того, как кэшируются клиентские SSL-сертификаты при установлении проксированных SSL‑соединений. Эта директива может значительно повысить производительность, поскольку позволяет избежать накладных расходов на повторную загрузку сертификатов при новых соединениях. Директива принимает до трёх аргументов, которые определяют размер кэша и установленный таймаут для механизма кэширования. Первый аргумент задаёт размер кэша (в байтах), тогда как второй и третий, опциональные, аргументы определяют параметры таймаута, то есть как долго сертификаты должны храниться в кэше. При применении NGINX будет сохранять клиентские сертификаты, использованные для проксирования на бэкенд-серверы. Корректное понимание как размера кэша, так и настроек таймаута имеет решающее значение, поскольку неверные конфигурации могут привести либо к чрезмерному использованию памяти, либо к частым промахам кэша, ухудшающим производительность. Также важно отметить, что поведение зависит от контекста: эту директиву можно размещать в контекстах `http`, `server` или `location`, чтобы обеспечить детальный контроль над кэшированием в зависимости от разных правил маршрутизации или обработки. Для базового кэширования администратор может задать размер кэша 10 MB или больше и установить соответствующий период таймаута в зависимости от ожидаемого характера использования. Необходимо мониторить эффективность кэширования в рабочих сценариях, так как высокая изменчивость клиентских подключений может потребовать корректировок указанных параметров.

Пример конфига

http {
    proxy_ssl_certificate_cache 10m 30s;
}

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

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

Размещение директивы в правильном контексте (http, server, location) имеет решающее значение для получения ожидаемого поведения.

proxy_ssl_password_file Директива `proxy_ssl_password_file` указывает путь к файлу, содержащему пароли для аутентификации по клиентскому сертификату SSL.
httpserverlocation
Синтаксисproxy_ssl_password_file PATH;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_password_file` используется для определения файла, содержащего пароли для приватных ключей, применяемых при SSL-аутентификации клиента, когда NGINX действует как обратный прокси. В частности, эта директива полезна в конфигурациях, где NGINX должен аутентифицировать себя перед backend server с помощью клиентского SSL‑сертификата, защищённого паролем. Когда эта директива указана, NGINX будет считывать пароль из предоставленного файла при установлении SSL‑соединений с upstream servers. Это важно для безопасных и автоматизированных процессов при работе с чувствительными операциями, где ручной ввод учётных данных непрактичен. Директива помогает оптимизировать более высокоуровневые протоколы безопасности в общей архитектуре, интегрируя безопасную обработку и автоматическое получение паролей, необходимых для SSL‑коммуникаций. Важно отметить, что файл с паролем должен храниться в безопасности и иметь ограниченные права доступа, чтобы предотвратить доступ неавторизованных пользователей к потенциально конфиденциальной информации. Кроме того, директива `proxy_ssl_password_file` может использоваться в нескольких контекстах, таких как `http`, `server` и `location`, что позволяет обеспечить детальный контроль управления паролями SSL на разных уровнях конфигурации.

Пример конфига

http {
    server {
        location /example {
            proxy_pass https://backend;
            proxy_ssl_certificate /path/to/client_certificate.crt;
            proxy_ssl_certificate_key /path/to/client_key.key;
            proxy_ssl_password_file /path/to/password_file.txt;
        }
    }
}

Убедитесь, что права доступа к файлу паролей настроены безопасно, чтобы предотвратить несанкционированный доступ.

Путь должен указывать на действительный файл; в противном случае NGINX выдаст ошибку при запуске.

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

proxy_ssl_conf_command Директива `proxy_ssl_conf_command` задаёт команды конфигурации, связанные с SSL, для прокси‑соединений в NGINX.
httpserverlocation
Синтаксисproxy_ssl_conf_command command value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `proxy_ssl_conf_command` позволяет задавать параметры конфигурации специально для SSL, когда NGINX выступает в роли обратного прокси. Она принимает два аргумента: имя команды и значение команды. Эта функциональность позволяет настраивать параметры SSL на уровне отдельного прокси, позволяя применять изменения в поведении SSL, такие как настройки проверки, к конкретным upstream‑серверам вместо глобального применения ко всем соединениям. Имя команды должно соответствовать команде конфигурации SSL, допустимой для библиотеки OpenSSL, а значение команды — соответствующему аргументу этой команды. Эта директива может использоваться в контекстах `http`, `server` и `location`, что делает её гибкой для различных конфигураций в зависимости от структуры блоков server и специфики маршрутизации запросов. Это может повысить безопасность и производительность SSL‑рукопожатий с upstream‑серверами, обеспечивая более тонкий контроль над тем, как NGINX взаимодействует с бэкенд‑сервисами с использованием SSL/TLS.

Пример конфига

location /example {
    proxy_pass https://backend;
    proxy_ssl_conf_command 'SomeSSLCommand' 'SomeValue';
}

Убедитесь, что команда SSL поддерживается версией OpenSSL, используемой в NGINX.

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

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

Чрезмерные конфигурации команд SSL могут привести к снижению производительности при ненадлежащем управлении.

random_index Директива 'random_index' позволяет NGINX выдавать файлы в случайном порядке из указанного каталога.
location
Синтаксисrandom_index on | off;
По умолчаниюoff
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива 'random_index' используется внутри location block для изменения поведения отображения списка файлов в каталоге. Когда директива установлена в 'on', NGINX будет случайным образом выбирать один из файлов в указанном каталоге для отдачи, вместо вывода всех доступных файлов в фиксированном порядке. Это особенно полезно в сценариях, когда в каталоге содержится большое количество файлов, позволяя пользователям видеть разные файлы при повторных посещениях и улучшая опыт просмотра в определённых случаях. Синтаксис директивы 'random_index' прост и принимает только флаг в качестве аргумента. Директива фактически влияет на вывод внутреннего обработчика при запросе каталога и оценивается в контексте location block. Она помогает снизить предсказуемость отдачи файлов, что может быть полезно в стратегиях доставки контента, где предпочтительны динамические результаты вместо статических списков файлов. На практике интеграция директивы 'random_index' сводится к добавлению её в соответствующий location block в конфигурации сервера. Важно отметить, что эта директива будет работать только если индексирование каталогов включено, обычно через директиву 'autoindex'. Поэтому она действует в сочетании с другими директивами, и правильная настройка сопутствующей конфигурации необходима для достижения ожидаемого поведения.

Пример конфига

location /files {
    autoindex on;
    random_index on;
}

Убедитесь, что 'autoindex' включён; иначе 'random_index' не будет работать.

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

set_real_ip_from Директива 'set_real_ip_from' указывает доверенные адреса, от которых NGINX будет принимать реальный IP клиента.
httpserverlocation
Синтаксисset_real_ip_from address;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `set_real_ip_from` используется в NGINX для определения списка доверенных адресов. Эти адреса применяются для определения реальных IP-адресов клиентов, когда серверы находятся за обратным прокси или балансировщиком нагрузки. Эта директива необходима для точного ведения логов, аналитики и управления доступом на основе реальных IP клиентов, а не IP-адреса обратного прокси или балансировщика нагрузки. Директива работает, позволяя указать один или несколько IP-адресов или диапазонов CIDR (Classless Inter-Domain Routing), которые считаются доверенными источниками. При получении запроса NGINX проверяет исходный адрес на соответствие этому списку. Если запрос приходит с одного из указанных адресов, NGINX будет доверять заголовкам `X-Forwarded-For` или `X-Real-IP`, содержащим реальный IP клиента. В противном случае NGINX будет использовать исходный IP-адрес соединения. Директиву можно размещать в контекстах `http`, `server` или `location`, что даёт гибкость в конфигурации. Это особенно полезно в средах, где NGINX используется как шлюз или обратный прокси, а также когда вышестоящие прокси настроены на пересылку реального IP клиента.

Пример конфига

http {
    set_real_ip_from 192.168.1.0/24;
    set_real_ip_from 10.0.0.1;
    real_ip_header X-Forwarded-For;
}

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

Убедитесь, что указаны только доверенные диапазоны IP; в противном случае вы можете подвергнуть своё приложение атакам подмены IP-адресов.

Использование нескольких директив `set_real_ip_from` может привести к путанице; обязательно задокументируйте их назначение.

real_ip_header Директива real_ip_header задаёт имя HTTP-заголовка, используемого для получения реального IP-адреса клиента.
httpserverlocation
Синтаксисreal_ip_header string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `real_ip_header` используется для определения того, какой HTTP-заголовок должен содержать реальный IP-адрес клиента, когда сервер NGINX находится за обратным прокси или балансировщиком нагрузки. Эта директива необходима для корректного логирования и обработки запросов клиентов, поскольку позволяет NGINX извлекать оригинальный IP клиента, а не IP прокси, пересланного запросом. При её настройке NGINX проверяет указанный заголовок во входящих запросах и использует его значение для замены значения, полученного из сокета. Это особенно полезно в сценариях с несколькими прокси, когда нужно гарантировать, что приложение правильно определяет исходный IP клиента. Директива принимает один аргумент, которым обычно является заголовок вроде `X-Forwarded-For`, `X-Real-IP` или пользовательский заголовок, используемый в вашей инфраструктуре. Директиву можно размещать в контекстах `http`, `server` или `location`, что даёт гибкость в зависимости от вашей архитектуры.

Пример конфига

http {
    real_ip_header X-Forwarded-For;
}

Убедитесь, что прокси или балансировщик нагрузки настроен на отправку корректного заголовка с реальным IP клиента.

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

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

real_ip_recursive Директива `real_ip_recursive` включает рекурсивную замену IP-адреса клиента, полученного от доверенных прокси, в NGINX.
httpserverlocation
Синтаксисreal_ip_recursive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `real_ip_recursive` заставляет NGINX рекурсивно просматривать список доверенных адресов в поисках реального IP клиента, когда присутствуют заголовки `X-Forwarded-For` или `X-Real-IP`. Это особенно полезно, когда используются несколько прокси, поскольку позволяет NGINX получить исходный IP-адрес клиента. Когда директива включена, если в заголовке содержится несколько IP-адресов, NGINX разберет их и определит фактический IP клиента на основе конфигурации доверенных прокси. При установке директивы `real_ip_recursive` в 'on' NGINX будет сверять значения заголовков с указанными доверенными адресами и заменять реальный IP клиента только если он совпадает с одним из этих адресов. Напротив, если директива установлена в 'off', NGINX будет использовать только непосредственный IP клиента, игнорируя дальнейшую обработку через дополнительные прокси. Такое поведение важно для обеспечения корректности механизмов управления доступом и логирования, чтобы они точно отражали истинное происхождение клиента в распределённых архитектурах, например в средах с балансировкой нагрузки.

Пример конфига

http {
    set_real_ip_from 192.168.1.0/24;
    real_ip_recursive on;
}

Убедитесь, что доверенные IP-адреса правильно настроены с помощью `set_real_ip_from`. Неправильная конфигурация может привести к тому, что IP-адрес клиента будет определён неверно.

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

valid_referers Директива `valid_referers` определяет список разрешённых URL-адресов referer для входящих запросов.
serverlocation
Синтаксисvalid_referers string | blocked | none;
По умолчаниюnone
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива `valid_referers` используется для указания набора допустимых URL-адресов referer, которые могут получить доступ к ресурсу или локации, определённой в вашей конфигурации NGINX. Когда к ресурсу поступает запрос, NGINX проверяет заголовок HTTP `Referer` по отношению к указанному списку допустимых referer. Если referer не находится в указанном списке, запрос может быть отклонён в зависимости от настроенного поведения (обычно с помощью директивы `deny`). Директива принимает несколько аргументов, позволяя указать столько шаблонов referer, сколько необходимо. referer можно указать как полностью квалифицированное доменное имя, как шаблон с подстановочными символами (например, `*.example.com`), или по IP-адресам. Если referer не указан в списке или не соответствует ни одному из заданных шаблонов, NGINX можно настроить так, чтобы либо разрешать, либо запрещать запрос в зависимости от наличия или отсутствия referer. Обычно используемая в сочетании с директивами `deny` и `allow`, `valid_referers` является важным инструментом для управления доступом на основе источника входящего запроса, помогая предотвращать хотлинкинг или несанкционированный доступ к ресурсам.

Пример конфига

location /protected {
    valid_referers none blocked;
    valid_referers https://www.example.com https://example.com;
    # Optionally deny requests without a valid referer
    if ($invalid_referer) {
        return 403;
    }
}

Будьте осторожны при использовании wildcards: они могут непреднамеренно соответствовать большему числу URLs, чем ожидалось.

Убедитесь, что вы настроили обработку запросов без referer, особенно если используете 'blocked' в качестве аргумента.

Не забудьте включить 'none', чтобы при желании разрешить доступ без referers.

referer_hash_max_size Задает максимальный размер хеш-таблицы, используемой для хранения данных referer в NGINX.
serverlocation
Синтаксисreferer_hash_max_size size;
По умолчанию32;
Контекстserver, location
МодульNGINX HTTP Core

Описание

`referer_hash_max_size` директива в NGINX используется для определения максимального размера хеш-таблицы, которая хранит информацию о referer из входящих запросов. Эта директива играет важную роль в управлении памятью и настройке производительности в части обработки referer. Когда клиент отправляет запрос, NGINX может проверять его referer в рамках контроля доступа или для целей логирования. Эта хеш-таблица по сути представляет собой коллекцию сохранённых referer, которую NGINX поддерживает во время работы. Значение, задаваемое для `referer_hash_max_size`, определяет, сколько записей может вмещать хеш-таблица. Если максимальный размер превышён, NGINX может начать удалять наименее используемые записи или не добавлять новые записи, что может повлиять на приложение, использующее информацию о referer. Установка адекватного размера таблицы помогает предотвратить снижение производительности, особенно если в приложении много различных значений referer, поскольку это обеспечивает эффективность операций поиска. Эта директива может быть задана в контекстах `server` и `location`, что позволяет детально управлять обработкой referer в зависимости от разных виртуальных хостов или конкретных URL-путей. Рекомендуемая практика — анализировать ваши журналы доступа и подбирать значение исходя из разнообразия наблюдаемых данных referer, чтобы оптимизировать использование памяти и поддерживать производительность.

Пример конфига

http {
    referer_hash_max_size 64;
}

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

Чрезмерное увеличение этого значения может привести к ненужному расходу памяти.

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

referer_hash_bucket_size Директива `referer_hash_bucket_size` задаёт размер корзин хеш-таблицы, используемых для хранения HTTP заголовков Referer в NGINX.
serverlocation
Синтаксисreferer_hash_bucket_size size;
По умолчанию64
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива `referer_hash_bucket_size` является важным параметром конфигурации для управления хранением заголовков Referer в NGINX. Она определяет размер корзин для хеш-таблицы, в которой сохраняются Referer, что особенно полезно в условиях высокой нагрузки, когда размер заголовков запросов может существенно влиять на производительность. Оптимизируя размер корзин, вы можете улучшить эффективность операций хеширования, минимизировать коллизии и обеспечить более быструю обработку записей Referer. Эту директиву можно задавать в контекстах `http`, `server` или `location`, что даёт гибкость настройки в зависимости от потребностей приложения. Указываемое значение должно быть степенью двойки или близким к оптимальному размеру, соответствующему ожидаемому числу Referer. Для достижения оптимальной производительности значение должно быть внимательно подобрано с учётом архитектуры системы и ожидаемых объёмов трафика, поскольку неверно выбранное значение может привести к увеличенному расходу памяти или неэффективной работе хеш-таблицы, что повлияет на общую производительность. Настройка этой директивы может быть критична после анализа производительности сервера, особенно при наличии большого числа уникальных значений заголовков Referer. По сути, `referer_hash_bucket_size` играет ключевую роль как в управлении памятью, так и в скорости отклика при обработке Referer, повышая устойчивость NGINX как веб-сервера.

Пример конфига

http {
    referer_hash_bucket_size 128;
}

Установка слишком маленького размера корзины может вызвать коллизии хэшей и ухудшить производительность.

Желательно, чтобы значения были степенями двойки для оптимальной эффективности.

Изменение этого значения после установления высокой нагрузки без надлежащего тестирования может негативно повлиять на работу сервисов.

rewrite Директива `rewrite` изменяет URI запроса на основе заданных шаблонов и строк замены.
serverlocationif in serverif in location
Синтаксисrewrite regex replacement [flag];
По умолчаниюnone
Контекстserver, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива `rewrite` в NGINX используется для изменения URI входящих запросов на основе конкретных шаблонов регулярных выражений. Эта директива особенно полезна для перенаправления URL или для преобразования URL-адресов с целью более чистого и удобного доступа. Директива принимает два или три аргумента: первый — шаблон регулярного выражения, который будет сопоставляться с URI входящего запроса, второй — строка замены, на которую будет изменён URI, а необязательный третий аргумент задаёт флаг, определяющий, выполняется ли перезапись в текущем контексте запроса или приводит к новому запросу, также называемому redirect. Когда директива `rewrite` выполняется, NGINX сравнивает URI входящего запроса с указанным регулярным выражением. Если совпадение найдено, она заменяет совпавшую часть строкой замены, фактически переписывая URI. Если используется флаг, такой как `last`, `break` или `redirect`, NGINX будет далее обрабатывать запрос в соответствии с поведением этого флага. Например, `last` остановит обработку перезаписи и продолжит работу с новым URI, тогда как `break` прекратит обработку текущего набора директив, а `redirect` отправит ответ 302, заставив клиента перейти на новый URI. Неправильно настроенные регулярные выражения или некорректное использование флагов могут привести к непредвиденному поведению или зацикливанию перезаписей, поэтому при использовании этой директивы необходимо тщательно следить за синтаксисом и логикой.

Пример конфига

rewrite ^/oldpath/(.*)$ /newpath/$1 permanent;

Убедитесь, что regular expression точно соответствует назначенному URI, поскольку производительность может ухудшаться при чрезмерно сложных шаблонах.

Использование флага `redirect` инициирует полный client redirect, что может быть неуместно для внутренних rewrites.

Необходимо принимать меры, чтобы избежать infinite rewrite loops, убедившись, что rewritten URI снова не совпадает с rewrite rule.

return Директива `return` немедленно возвращает клиенту указанный HTTP-код состояния или ответ с перенаправлением.
serverlocationif in serverif in location
Синтаксисreturn code | code url;
По умолчаниюnone
Контекстserver, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива `return` — универсальная функция NGINX, которая позволяет отправлять HTTP-ответы из разных контекстов внутри server or location block. Она может принимать один или два аргумента: первый аргумент задаёт HTTP-код состояния (например, 200, 404, 301), а необязательный второй аргумент может содержать URL для перенаправления. При выполнении директива немедленно завершает обработку запроса, отбрасывая любые последующие шаги конфигурации или обработки. Это полезно для упрощения ответов без необходимости сложных конфигураций или логики. В случае, когда указан только код состояния без URL, клиенту возвращается простой ответ с указанным кодом. Если требуется перенаправление, можно указать код состояния, например `301` (Перемещено навсегда), вместе с новым URL. Эта инструкция обрабатывается в заданном контексте, но также может объединяться с другими директивами при использовании в условных конструкциях (т.е. внутри `if`-блоков). Комбинирование `return` внутри условного блока позволяет получить более динамичное поведение ответов в зависимости от параметров запроса или заголовков.

Пример конфига

location /old-path {
    return 301 https://example.com/new-path;
}

location /not-found {
    return 404;
}

Если использовать `return` внутри директивы `if`, это может привести к непредвиденному поведению, если конструкция не продумана. Будьте осторожны с обработкой `if`-блоков в NGINX.

При использовании перенаправления с относительным путём убедитесь, что URL начинается с `http://` или `https://`, чтобы избежать нежелательного поведения, поскольку относительные пути могут приводить к локальным перенаправлениям, сбивающим клиентов с толку.

break Директива 'break' останавливает обработку текущего location и предотвращает дальнейшую обработку блоков rewrite или location.
serverlocationif in serverif in location
Синтаксисbreak;
По умолчаниюnone
Контекстserver, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива 'break' используется внутри блоков location или if в конфигурации NGINX, чтобы прекратить оценку всех последующих правил rewrite или вложенных блоков location. При срабатывании она фактически изменяет поток обработки запроса, позволяя администраторам контролировать, должен ли запрос продолжать обработку другими правилами или обработчиками. Эта директива полезна для реализации условной логики на основе определённых критериев, таких как состояние URI или параметры запроса. Когда директива 'break' встречается во время обработки запроса, сервер NGINX перестаёт оценивать любые последующие директивы rewrite, которые следуют за ней в том же контексте. После вызова 'break' NGINX продолжает обработку текущего блока конфигурации, возможно пропуская другие определённые поведения или обработчики, которые могут повлиять на текущий запрос. Она действует как резкое завершение обработки в контролируемой форме, что позволяет упростить и прояснить сложные настройки NGINX. Важно отметить, что директива 'break' не возвращает значений и не принимает параметров. Это строго команда, которая изменяет поток управления. Для её корректного использования в файле конфигурации не требуются прямые аргументы или выражения, что делает её реализацию простой. Однако она в основном применима там, где могут существовать несколько вложенных директив, например в сложных сценариях сопоставления location.

Пример конфига

location /example {
    if ($arg_param = 'stop') {
        break;
    }
    # Further processing can go here
}

Использование 'break' внутри вложенных блоков if может привести к сложному потоку управления, который трудно отлаживать.

Директива 'break' не прекращает обработку всей конфигурации сервера, а только текущий цикл запроса.

Размещение 'break' в неожиданном месте или контексте может привести к непреднамеренному поведению при обработке запросов.

if Директива 'if' позволяет выполнять условную обработку запросов на основе указанных критериев.
serverlocation
Синтаксисif (condition) { ... }
По умолчаниюnone
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива 'if' в NGINX — это мощная управляющая конструкция, которая позволяет выполнять условную настройку, выполняя блок директив конфигурации на основании оценки заданных условий. Она может использоваться в контекстах server и location, что делает её универсальной для управления доступом или поведением для конкретных ресурсов или путей. Синтаксис использует логическое выражение для проверки условий, и если выражение оценивается как true, директивы внутри блока будут выполнены. Условия могут включать различные параметры запроса, такие как заголовки, методы запросов и IP-адреса клиентов. При использовании директивы 'if' важно убедиться, что условие корректно сформировано, так как неправильная конфигурация может привести к непредвиденному поведению. Директива может включать последовательность вложенных или последовательных блоков 'if', что дополнительно усложняет логический поток. Каждый блок 'if' может содержать несколько директив, которые будут выполнены, когда условие истинно. Тем не менее, с директивой 'if' следует обращаться осторожно, особенно в части её взаимодействия с другими директивами, поскольку неправильное использование может привести к проблемам конфигурации или неэффективности. Распространённый вариант использования — отказ в доступе для определённых диапазонов IP или перенаправление запросов на основании заголовков или других критериев.

Пример конфига

if ($http_user_agent ~ MSIE) {
    return 403;
}

if ($remote_addr = 192.168.1.1) {
    access deny;
}

Вложенные операторы 'if' могут привести к непредвиденному поведению и их следует использовать с осторожностью.

Использование 'if' в контексте location может иметь непредвиденные побочные эффекты при обработке запросов.

Условия, основанные на variables, следует тщательно оценивать, чтобы избежать случаев, когда они всегда принимают значения true/ false.

set Директива 'set' присваивает значение переменной в контексте конфигурации NGINX.
serverlocationif in serverif in location
Синтаксисset $variable value;
По умолчаниюnone
Контекстserver, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива 'set' в NGINX позволяет создавать или изменять переменные. Эту директиву можно использовать в различных контекстах, таких как 'server', 'location' и внутри операторов 'if' в этих контекстах. Синтаксис состоит из двух параметров: первый — имя переменной (с префиксом $), второй — значение, которое вы хотите присвоить этой переменной. Например, использование 'set $my_var 'some_value';' создаст переменную с именем 'my_var' и значением 'some_value'. Значение может быть строкой, конкатенацией других переменных или значением, полученным из переменных и настроек NGINX. Поведение директивы 'set' гарантирует, что определённая переменная будет доступна в любом месте указанного контекста, включая вложенные конфигурации. Важно отметить, что после установки переменной последующие директивы 'set' могут изменить её значение, но эти изменения вступают в силу только в том контексте, где они объявлены. Глобальные переменные можно определять в контексте http, тогда как локальные переменные ограничены областью 'location' или 'server'. Кроме того, из-за отсутствия постоянного хранения любые изменения переменных, сделанные в одном запросе, не повлияют на другой запрос, что обеспечивает изоляцию запросов.

Пример конфига

set $my_var 'hello world';

server {
    listen 80;
    location / {
        set $my_var 'example';
        return 200 "$my_var";
    }
}

Переменные, заданные в контексте 'if', могут иметь ограниченную область видимости и не работать так, как ожидается за пределами этого контекста.

Важно использовать правильный синтаксис с символом '$' при указании имён переменных; его отсутствие приведёт к сбою конфигурации.

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

rewrite_log Директива rewrite_log включает логирование деталей обработки правил перезаписи для запросов.
httpserverlocationif in serverif in location
Синтаксисrewrite_log on | off;
По умолчаниюoff
Контекстhttp, server, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива rewrite_log является частью NGINX HTTP Core module и используется для логирования подробной информации о процессе обработки перезаписи запросов. Когда она включена, это помогает разработчикам и системным администраторам отлаживать сложные правила перезаписи, предоставляя сведения о работе механизма перезаписи. Это особенно полезно для выявления проблем в правилах перезаписи, таких как неверные перенаправления или непредвиденное поведение при обработке URL. Директива принимает параметр-флаг: значение 'on' включает логирование, значение 'off' — отключает. Сгенерированные логи содержат записи для каждого цикла перезаписи, а также условия и выполняемые замены. Эта функция обычно используется на этапах разработки и тестирования конфигурации, поскольку повышенная подробность логов может привести к ухудшению производительности в рабочей среде, если оставить её включённой. При размещении в соответствующем контексте (http, server, location или if statements внутри этих контекстов) она управляет выводом логов именно для этих блоков. Однако важно использовать её осмотрительно: логирование каждого процесса перезаписи может быстро заполнить файлы логов и потенциально привести к дополнительной нагрузке на ввод/вывод.

Пример конфига

server {
    listen 80;
    server_name example.com;

    rewrite_log on;

    location /old-page {
        rewrite ^/old-page/(.*) /new-page/$1 last;
    }
}

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

Убедитесь, что настроена ротация логов, если rewrite_log включён, чтобы предотвратить чрезмерное использование дискового пространства.

uninitialized_variable_warn Директива 'uninitialized_variable_warn' управляет предупреждениями о неинициализированных переменных в конфигурациях NGINX.
httpserverlocationif in serverif in location
Синтаксисuninitialized_variable_warn on | off;
По умолчаниюoff
Контекстhttp, server, location, if in server, if in location
МодульNGINX HTTP Core

Описание

Директива 'uninitialized_variable_warn' в NGINX используется для включения или отключения предупреждений, которые генерируются при обращении к переменной без её инициализации. Когда эта директива установлена в 'on', NGINX будет записывать предупреждающее сообщение в журнал ошибок для каждой неинициализированной переменной, которая используется в пределах блока конфигурации, где указана директива. Это особенно полезно при разработке и отладке файлов конфигурации, поскольку гарантирует, что потенциальные проблемы, связанные с использованием переменных, привлекаются к вниманию администратора. Директива может принимать два состояния: 'on' и 'off'. При 'on' NGINX будет логировать предупреждения; при 'off' он не будет логировать предупреждения о неинициализированных переменных. Область действия этой директивы позволяет задавать её на различных уровнях, включая 'http', 'server', 'location', и даже внутри условий 'if' в этих контекстах. Таким образом пользователь может контролировать подробность ведения журнала ошибок, связанного с неинициализированными переменными, для разных разделов своей конфигурации NGINX. Важно учитывать, что установка этой директивы в 'on' может привести к увеличению объёма записей в журнале, что способно засорить журнал ошибок при генерации большого числа предупреждений. При принятии решения о включении или отключении директивы следует учитывать политику ведения логов и полезность таких предупреждений для повседневной работы.

Пример конфига

http {
    uninitialized_variable_warn on;
    server {
        location / {
            # Other configurations
        }
    }
}

Установка в 'on' может привести к большому количеству записей в журнале, если многие переменные не инициализированы, что потенциально может переполнить журнал ошибок.

Использование внутри операторов 'if' может привести к непредвиденному поведению, если область действия директивы неверно понята.

scgi_pass Директива `scgi_pass` пересылает запросы на SCGI-сервер.
locationif in location
Синтаксисscgi_pass URL;
По умолчаниюnone
Контекстlocation, if in location
МодульNGINX HTTP Core

Описание

Директива `scgi_pass` в NGINX используется для передачи запросов на SCGI (Simple Common Gateway Interface) бэкенд. Обычно она применяется для маршрутизации HTTP-запросов к веб‑приложениям, которые обмениваются данными по протоколу SCGI. Когда запрос совпадает с блоком `location`, где определена `scgi_pass`, NGINX формирует SCGI-запрос и пересылает входящие HTTP-данные на указанный SCGI-сервер. С помощью `scgi_pass` возможны разные варианты конфигурации. Аргумент этой директивы — адрес SCGI-сервера, который можно задавать либо как IP-адрес и порт (например, `127.0.0.1:4000`), либо как адрес Unix-сокета (например, `unix:/var/run/scgi.sock`). NGINX затем формирует SCGI-запрос в соответствии с требованиями указанного сервера, отправляя необходимые заголовки и поддерживая соединение до получения ответа или истечения времени ожидания запроса. `scgi_pass` можно помещать внутри блоков `location` или даже внутри условных блоков `if` в этих `location`, что даёт гибкость в том, как маршрутизируются запросы на основе URI или других условий. Также часто его используют совместно с другими директивами для дополнительной функциональности, например для буферизации или установки таймаутов запроса.

Пример конфига

location /app {
    scgi_pass 127.0.0.1:4000;
    include scgi_params;
}

Убедитесь, что SCGI-сервер запущен и доступен из NGINX.

Использование неправильного протокола (например, HTTP вместо SCGI) может привести к ошибкам в связи.

Если используются Unix sockets, убедитесь, что права доступа к сокету позволяют пользователю NGINX получить к нему доступ.

scgi_store Директива `scgi_store` определяет, куда сохранять тело ответа на SCGI-запрос.
httpserverlocation
Синтаксисscgi_store path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_store` используется для указания пути к файлу, в котором может быть сохранено тело ответа от SCGI-сервера. Это особенно полезно для целей кеширования или отладки, когда данные ответа нужны для анализа или последующего доступа. Когда эта директива задана, NGINX сохранит тело ответа в указанный файл перед отправкой ответа клиенту. Имя файла можно задавать динамически с помощью переменных, что добавляет гибкости процессу сохранения. Директива `scgi_store` принимает один аргумент — путь к выходному файлу, в котором будет храниться тело ответа. Если указанный файл уже существует, он будет усечён перед записью нового тела ответа. Директива поддерживается в различных контекстах, включая `http`, `server` и `location`, что обеспечивает гибкость её использования в разных областях конфигурации NGINX. Также необходимо установить корректные права доступа для указанного пути хранения, чтобы рабочий процесс NGINX имел права на запись в это место. При использовании этой директивы рассмотрите возможность её применения совместно с директивой `scgi_pass` для установления соединения с SCGI-бэкендом. Поскольку это может включать операции с файловой системой, необходимо учитывать влияние на производительность, особенно если ответы большие или частые, так как операции ввода-вывода файлов могут стать узким местом при высокой нагрузке.

Пример конфига

location /scgi {
    scgi_pass 127.0.0.1:4000;
    scgi_store /var/www/html/scgi_response.txt;
}

Убедитесь, что рабочий процесс NGINX имеет разрешение на запись в указанный путь хранения.

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

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

scgi_store_access Директива scgi_store_access позволяет задавать правила контроля доступа для сохранения файлов в ответах SCGI.
httpserverlocation
Синтаксисscgi_store_access allow|deny ip_address;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`scgi_store_access` директива используется в NGINX для управления разрешениями доступа к файлам, создаваемым из ответов SCGI. Эта директива позволяет тонко настраивать, каким адресам клиентов разрешён или запрещён доступ к сохранённым файлам. Можно задать от одного до трёх правил контроля доступа, состоящих из директив 'allow' и 'deny', которые позволяют разрешать или ограничивать доступ на основе IP-адреса клиента или маски подсети. Директива работает так: сначала оценивается адрес клиента в входящем запросе, затем применяются определённые правила в том порядке, в котором они указаны. Если правило 'allow' совпадает с адресом клиента, доступ предоставляется; если совпадает правило 'deny' — доступ блокируется. Если соответствующего правила не найдено, применяется политика контроля доступа по умолчанию. Такое поведение важно для поддержания безопасности и для того, чтобы конфиденциальные файлы были доступны только авторизованным пользователям. Правила обрабатываются последовательно, что позволяет реализовывать тонкое управление доступом в соответствии с требованиями организации.

Пример конфига

location /some/location {
    scgi_pass 127.0.0.1:9000;
    scgi_store on;
    scgi_store_access allow 192.168.1.0/24;
    scgi_store_access deny all;
}

Убедитесь, что вы определили как правила allow, так и правила deny в соответствии со своей стратегией контроля доступа; иначе клиенты могут быть случайно заблокированы.

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

Убедитесь, что директива scgi_store включена, чтобы правила доступа вступили в силу, поскольку они применяются только при активном хранении ответов.

scgi_buffering Директива 'scgi_buffering' включает или отключает буферизацию ответов от SCGI-серверов в NGINX.
httpserverlocation
Синтаксисscgi_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_buffering' управляет тем, буферизует ли NGINX ответы от SCGI (Simple Common Gateway Interface) серверов перед отправкой клиенту. По умолчанию NGINX буферизует эти ответы, что может повысить производительность за счёт отправки полного объёма ответа за одну передачу. Если буферизация включена и ответ превышает настроенный размер буфера, NGINX запишет данные во временный файл, если они превышают этот предел. Напротив, если буферизация отключена, NGINX будет немедленно передавать данные ответа клиенту по мере их получения от SCGI-сервера, что может быть полезно для длинных ответов или потоковых приложений, где низкая задержка имеет приоритет. Директива принимает аргумент-флаг, который может быть 'on' или 'off'.

Пример конфига

server {
    location /app {
        scgi_pass 127.0.0.1:9000;
        scgi_buffering off;
    }
}

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

Убедитесь, что сервер SCGI способен обрабатывать немедленные ответы, отправляемые NGINX, когда буферизация отключена.

scgi_request_buffering Директива `scgi_request_buffering` управляет буферизацией SCGI-запросов в NGINX.
httpserverlocation
Синтаксисscgi_request_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_request_buffering` определяет, включать или отключать буферизацию тел SCGI-запросов. Когда буферизация включена (установлено `on`), NGINX считывает всё тело запроса в память прежде, чем передать его SCGI-серверу. Это может повысить производительность, так как NGINX сможет обработать тело запроса за одну операцию. Однако это также увеличивает потребление оперативной памяти, поскольку большие тела запросов могут превысить доступные лимиты памяти или потреблять чрезмерные ресурсы при большом количестве одновременных запросов. Когда буферизация отключена (установлено `off`), NGINX передаёт тело запроса SCGI-серверу по частям по мере их поступления. Это минимизирует использование памяти и подходит для сценариев, где клиенты отправляют большие объёмы данных, например при загрузке файлов, поскольку сервер может начать обработку данных сразу по мере их получения. Выбор подходящего значения этой директивы зависит от характеристик приложения и типов обрабатываемых запросов. Директива может применяться в различных контекстах, включая `http`, `server` и `location`, что позволяет гибко настраивать поведение в зависимости от правил маршрутизации или обработки. Правильное использование `scgi_request_buffering` важно для оптимизации управления ресурсами и обеспечения отзывчивости приложения.

Пример конфига

location /scgi {
    scgi_pass 127.0.0.1:4000;
    scgi_request_buffering off;
}

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

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

scgi_ignore_client_abort Директива `scgi_ignore_client_abort` управляет тем, будет ли NGINX игнорировать события разрыва соединения клиента при обработке SCGI-запросов.
httpserverlocation
Синтаксисscgi_ignore_client_abort on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_ignore_client_abort` используется в конфигурации NGINX для задания поведения сервера в случае, когда соединение клиента разрывается во время обработки запроса, направленного к SCGI-бэкенду. При установке в 'on' NGINX продолжит обработку запроса и отправку ответа бэкенду, даже если клиент отключился. Это может быть полезно в сценариях, когда обработка на бэкенде не должна зависеть от незаинтересованного клиента, что позволяет более эффективно использовать ресурсы бэкенд-сервера. При установке в 'off' NGINX прекратит обработку запроса при обнаружении разрыва соединения клиентом, что может снизить потребление ресурсов, но привести к неполной обработке на бэкенде в случаях преждевременного отключения клиента. Директива принимает один аргумент, либо 'on', либо 'off', что позволяет пользователям легко переключать это поведение. Ее можно разместить в контексте 'http', 'server' или 'location', обеспечивая гибкость в зависимости от требуемой области конфигурации. Важно оценить взаимодействие этой директивы с другими настройками в вашей конфигурации NGINX, особенно с теми, которые касаются обработки запросов и управления ответами бэкенда.

Пример конфига

server {
    listen 80;
    location /scgi {
        scgi_pass backend;
        scgi_ignore_client_abort on;
    }
}

Установка этой директивы в 'on' может привести к лишней нагрузке на ваш бэкенд, если многие клиенты прерывают соединения.

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

scgi_bind Директива `scgi_bind` задаёт адрес и порт, на которых SCGI-сервер будет прослушивать подключения.
httpserverlocation
Синтаксисscgi_bind address [port];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_bind` определяет сетевой адрес и порт, которые NGINX будет использовать для связи с сервером приложения SCGI. Эта директива важна для настройки того, как входящие SCGI-запросы направляются на соответствующий бэкенд-сервер. Она может принимать либо IP-адрес, либо путь до Unix socket, что обеспечивает гибкость в топологии сервера. Важно понимать, что эту директиву можно указывать в контекстах `http`, `server` или `location`, и она может принимать один или два аргумента. Первый аргумент обязательный и задаёт адрес для привязки, тогда как необязательный второй аргумент указывает номер порта. Если указан только один аргумент и он представляет собой Unix socket, номер порта не требуется. Кроме того, явное указание номера порта может быть важно для TCP/IP коммуникаций, чтобы обеспечить доступность SCGI-сервера по нужной конечной точке. При использовании `scgi_bind` убедитесь, что адрес не занят, и что для файлов Unix socket установлены корректные права доступа, поскольку эти файлы подчиняются правам файловой системы. Неправильная настройка может привести к сбоям соединения или недоступности сервисов.

Пример конфига

server {
    listen 80;
    location / {
        scgi_pass 127.0.0.1:4000;
        scgi_bind 127.0.0.1 4000;
    }
}

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

При использовании Unix-сокетов убедитесь, что файл сокета имеет правильные права доступа для пользователя, под которым запущен NGINX.

scgi_socket_keepalive Директива 'scgi_socket_keepalive' включает или отключает поддержку keep-alive для SCGI-соединений.
httpserverlocation
Синтаксисscgi_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_socket_keepalive' используется в основном HTTP‑модуле NGINX для управления keep-alive соединениями для SCGI (Simple Common Gateway Interface). При установке этой директивы в 'on' SCGI‑сокет может поддерживать открытое соединение с клиентом, позволяя повторно использовать тот же сокет для нескольких запросов. Это может повысить производительность за счёт уменьшения накладных расходов на установление соединений, особенно для приложений, которые часто взаимодействуют с бэкенд‑серверами SCGI. Напротив, при установке в 'off' каждый запрос будет устанавливать новое соединение, что может увеличить задержку из‑за затрат на установление и разрыв соединения. Директиву можно помещать в контексты 'http', 'server' или 'location', что даёт гибкие возможности конфигурации в зависимости от потребностей приложения. Частый сценарий использования — это блоки 'location', которые обслуживают динамический контент, генерируемый SCGI‑приложениями, где поддержание соединения может улучшить пропускную способность и снизить потребление ресурсов в условиях высокого трафика. Важно, что директива совместима со всеми SCGI‑командами. Параметры keep-alive могут существенно влиять на поведение взаимодействия с бэкендом. Поэтому рекомендуется отслеживать шаблоны трафика приложения и метрики производительности при включении этой функции, поскольку при большом числе одновременно поддерживаемых соединений это может привести к увеличению использования ресурсов.

Пример конфига

location /app {
    scgi_pass 127.0.0.1:4000;
    scgi_socket_keepalive on;
}

Убедитесь, что бэкенд-сервер SCGI поддерживает keep-alive соединения.

Использование keep-alive без соответствующих стратегий балансировки нагрузки может привести к истощению ресурсов.

Остерегайтесь увеличения использования памяти, если слишком много keep-alive соединений остаются открытыми в течение длительного времени.

scgi_connect_timeout Директива `scgi_connect_timeout` задаёт максимальное время для установления соединения с сервером SCGI в NGINX.
httpserverlocation
Синтаксисscgi_connect_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_connect_timeout` задаёт время ожидания при установлении соединения с сервером SCGI. Это критически важная настройка, определяющая, как долго NGINX будет ожидать установления соединения, прежде чем считать попытку неудачной. Если указанный таймаут истечёт без установления соединения, NGINX вернёт клиенту ошибку. Время задаётся в секундах и может быть указано как числом или в более удобочитаемом формате с единицами времени (например, '1s', '100ms'). Эта директива применяется в нескольких контекстах, включая блоки `http`, `server` и `location`. Правильный выбор значения `scgi_connect_timeout` важен для обеспечения отзывчивости вашего приложения. Слишком низкое значение может привести к частым таймаутам соединений в периоды высокой нагрузки или при перегрузке SCGI-сервера. Напротив, слишком большое значение может увеличить задержки, особенно если SCGI-сервер недоступен или не отвечает. Администраторам следует отслеживать производительность сервера и показатели успешности соединений, чтобы определить оптимальные значения таймаута. Корректировки можно вносить с учётом характеристик используемого SCGI-приложения и сетевых условий.

Пример конфига

http {
    server {
        location / {
            scgi_pass 127.0.0.1:9000;
            scgi_connect_timeout 5s;
        }
    }
}

Установка слишком малого таймаута может привести к ненужным ошибкам в периоды высокого трафика или при большой нагрузке на сервер.

Больший таймаут может привести к медленным ответам для клиентов, если сервер SCGI не отвечает или медленно устанавливает соединение.

scgi_send_timeout Директива 'scgi_send_timeout' задаёт максимальное время, которое NGINX будет ждать при отправке запроса серверу SCGI.
httpserverlocation
Синтаксисscgi_send_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_send_timeout' устанавливает ограничение по времени на отправку запроса серверу SCGI (Simple Common Gateway Interface). Этот тайм-аут имеет решающее значение в сценариях, когда NGINX выступает в роли обратного прокси для бэкендов SCGI. Если указанное ограничение времени превышено, NGINX закроет соединение с сервером SCGI, фактически прерывая запрос. Тайм-аут измеряется с момента, когда NGINX начинает отправлять данные, до момента успешной отправки всех запрошенных данных, поэтому он важен для обработки долгих запросов или ответов, которые могут зависать. Эту директиву можно задавать в контекстах 'http', 'server' или 'location', что обеспечивает гибкость в конфигурировании политик тайм-аутов на разных уровнях детализации в конфигурации сервера. Параметр, принимаемый этой директивой, — это значение времени, которое может быть выражено в различных форматах, включая секунды, минуты или их комбинации, с использованием суффиксов, таких как 's', 'm' и т.д. Администраторы могут настраивать эту директиву для защиты от неотзывчивых серверов SCGI, оптимизируя использование ресурсов и предотвращая бесконечное ожидание NGINX ответа, который может не прийти. Пользователям следует проявлять осторожность при установке слишком малого значения тайм-аута, так как это может привести к преждевременным разрывам для допустимых долгих запросов. Наоборот, слишком большое значение может привести к излишнему потреблению ресурсов. Рекомендуется учитывать характер нагрузки приложения и производительность сервера SCGI при выборе подходящего значения тайм-аута.

Пример конфига

location /api {
    scgi_pass backend;
    scgi_send_timeout 30s;
}

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

Убедитесь, что параметр timeout соответствует ожидаемому времени ответа сервера SCGI.

scgi_buffer_size Определяет размер буфера, используемого для чтения первой части ответа от SCGI-сервера.
httpserverlocation
Синтаксисscgi_buffer_size size;
По умолчанию4k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_buffer_size` в NGINX имеет ключевое значение для управления тем, какой объём данных можно буферизовать из ответа SCGI-сервера до дальнейшей обработки. Когда NGINX взаимодействует с SCGI-бэкендом, он ожидает, что ответ придёт удобными для обработки фрагментами. Указывая `scgi_buffer_size`, вы контролируете буфер, выделяемый для начальной части этого ответа, включая заголовки SCGI. Эффективное управление размером этого буфера может существенно повлиять на производительность вашего приложения, особенно если размеры ответов варьируются. Директива принимает один аргумент, задающий размер буфера. Если сервер отправляет ответ, превышающий этот размер, NGINX при необходимости выделит дополнительные буферы, чтобы разместить весь ответ. Важно задавать это значение, исходя из понимания типичного размера SCGI-ответов, которые генерирует ваше приложение. Слишком маленький буфер может привести к лишним операциям выделения памяти, тогда как чрезмерно большой буфер будет тратить ресурсы и снижать производительность. Поэтому настройка этого параметра в соответствии с реальными шаблонами использования может привести к улучшению использования ресурсов и стабильности производительности.

Пример конфига

location /app {
    scgi_pass 127.0.0.1:9000;
    scgi_buffer_size 8k;
}

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

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

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

scgi_pass_request_headers Директива 'scgi_pass_request_headers' контролирует, пересылает ли NGINX заголовки SCGI-запроса на бэкенд.
httpserverlocation
Синтаксисscgi_pass_request_headers on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_pass_request_headers' используется в модуле SCGI NGINX, чтобы определить, следует ли передавать информацию о заголовках запроса от клиента на SCGI-бэкенд. Когда эта директива включена (установлена в 'on'), NGINX будет пересылать заголовки на бэкенд, что может быть необходимо для фреймворков или приложений, которые полагаются на эти заголовки при обработке. В свою очередь, если она установлена в 'off', NGINX не будет отправлять заголовки запроса на бэкенд, что может быть полезно для оптимизации производительности в тех случаях, когда заголовки не нужны. Директиву можно использовать в нескольких контекстах, включая 'http', 'server' и 'location'. По умолчанию директива установлена в 'off'. Поэтому, если администратор явно не указал иначе, заголовки не будут передаваться на SCGI-бэкенд, что может привести к неожиданному поведению, если эти заголовки необходимы для обслуживаемого приложения. Следовательно, при настройке этой директивы требуется тщательное обдумывание, чтобы обеспечить, что необходимые заголовки действительно пересылаются, особенно для приложений, которые зависят от аутентификации или конкретных данных клиента.

Пример конфига

location /scgi {
    scgi_pass your_backend;
    scgi_pass_request_headers on;
}

Забыть включить эту директиву, когда ваше backend application требует определённых заголовков.

Использование этой директивы в неправильном контексте, например внутри условий 'if', может привести к непредвиденным результатам. Убедитесь, что вы размещаете её внутри блоков 'http', 'server' или 'location'. Перед использованием убедитесь, что SCGI backend правильно настроен для обработки передаваемых заголовков.

scgi_pass_request_body Директива scgi_pass_request_body контролирует, отправляется ли тело запроса на SCGI-сервер при использовании проксирования SCGI.
httpserverlocation
Синтаксисscgi_pass_request_body on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_pass_request_body` является флагом, используемым в конфигурациях SCGI-сервера. Когда она включена, директива указывает, что всё тело запроса должно быть переслано на SCGI-сервер, указанный в директиве `scgi_pass`. Если директива установлена в 'off', тело запроса не будет переслано, что может быть полезно в случаях, когда тело запроса не нужно бэкенду SCGI, что позволяет экономить ресурсы и пропускную способность. Эту директиву можно использовать в контексте блоков http, server или location. Она принимает параметр, представляющий собой флаг, то есть её можно установить в `on` (чтобы пересылать тело запроса) или `off` (чтобы не пересылать). Поведение по умолчанию, когда директива не задана, — пересылать тело запроса в зависимости от контекста запроса и конфигурации других связанных директив. При использовании директивы следует тщательно учитывать требования SCGI-приложения. Некоторым SCGI-приложениям может понадобиться тело запроса для обработки, тогда как другим — нет. Неправильная настройка может привести к некорректной обработке запроса на стороне бэкенда SCGI, что вызовет проблемы с обработкой данных или генерацией ответа.

Пример конфига

location /scgi {
    scgi_pass http://backend;
    scgi_pass_request_body on;
}

Установка `scgi_pass_request_body` в `off` может привести к непредвиденному поведению, если SCGI-приложение ожидает тело запроса.

Проверьте совместимость SCGI-приложений с обработкой тела запроса перед переключением этой директивы.

scgi_intercept_errors Директива `scgi_intercept_errors` позволяет NGINX перехватывать ошибки, генерируемые SCGI-серверами, что даёт возможность реализовать пользовательскую обработку ошибок.
httpserverlocation
Синтаксисscgi_intercept_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_intercept_errors` определяет, должен ли NGINX перехватывать ответные сообщения об ошибках, возвращаемые SCGI-серверами при обработке клиентских запросов. При установке в 'on' это позволяет NGINX обрабатывать ошибки внутри и отвечать соответствующей страницей ошибки или собственной логикой обработки ошибок, как это задаётся другими связанными директивами, например `error_page`. С точки зрения поведения, установка этой директивы в 'off' позволит NGINX передавать ответы об ошибках напрямую клиенту без изменений. Это особенно полезно в сценариях, где требуется возвращать сырые сообщения об ошибках из SCGI-приложения, например в отладочных средах. Напротив, включение перехвата может улучшить взаимодействие с пользователем, предоставляя более удобные сообщения об ошибках и обеспечивая, что определённые коды ошибок вызовут назначенные ответы об ошибках, как настроено в блоках сервера NGINX. Эта директива работает в сочетании с конфигурацией обработки SCGI и важна для контроля потока информации об ошибках от бэкенд-приложений к клиентам.

Пример конфига

location /scgi {
    include scgi_params;
    scgi_pass 127.0.0.1:9000;
    scgi_intercept_errors on;
    error_page 404 /404.html;
}

Убедитесь, что вы определили директивы `error_page` для обработки ошибок, когда эта директива установлена в 'on'.

Неправильная конфигурация связанных директив `error_page` может привести к непредвиденным результатам при перехвате ошибок.

scgi_read_timeout Устанавливает таймаут чтения ответа от SCGI-сервера.
httpserverlocation
Синтаксисscgi_read_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`scgi_read_timeout` директива задаёт таймаут для чтения ответа от SCGI (Simplified Common Gateway Interface) сервера. Эта директива помогает избежать зависания соединений, когда бэкенд SCGI-сервер медленно отвечает или становится неотзывчивым, обеспечивая освобождение ресурсов, если сервер не отправляет данные в пределах указанного временного интервала. Период таймаута можно задать в секундах или с суффиксом `m` или `h`, обозначающим минуты или часы соответственно. Когда этот таймаут превышен, NGINX завершит соединение с SCGI-сервером и вернёт ошибку клиенту. Это особенно полезно в высокопроизводительных веб-приложениях, где критически важно поддерживать отзывчивость и ограничивать использование ресурсов. Правильная настройка этой директивы позволяет найти баланс между предоставлением достаточного времени на обработку для SCGI-сервера и минимизацией задержки запросов для конечных пользователей.

Пример конфига

location /scgi {
    include fastcgi_params;
    scgi_pass 127.0.0.1:9000;
    scgi_read_timeout 30s;
}

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

Убедитесь, что таймаут не превышает общие настройки таймаутов запросов, чтобы избежать непредсказуемого поведения.

Формат времени должен быть указан правильно, например, '30s' для 30 секунд.

scgi_buffers Директива `scgi_buffers` задаёт количество и размер буферов, используемых для ответов SCGI.
httpserverlocation
Синтаксисscgi_buffers number size;
По умолчаниюscgi_buffers 16 8k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_buffers` разработана для оптимизации обработки ответов SCGI (Simple Common Gateway Interface) в NGINX. Она задаёт количество буферов и их размер, которые сервер будет использовать для хранения ответа от SCGI-сервера перед его передачей клиенту. Правильная настройка буферов позволяет сбалансировать использование памяти и производительность; большие буферы могут уменьшать количество чтений из SCGI-сервера и, возможно, ускорять доставку ответа, особенно для больших ответов. Директива принимает два параметра: первый обозначает количество буферов, второй — размер каждого буфера. Буферы выделяются на каждый запрос, что означает, что при большем количестве сервер сможет эффективнее обслуживать несколько параллельных соединений. Нужно быть осторожным, чтобы не выделять слишком много памяти, так как это может привести к росту потребления памяти и потенциальному ухудшению производительности. Директиву `scgi_buffers` можно задавать в контекстах `http`, `server` или `location`, что даёт гибкость конфигурации в зависимости от потребностей масштабирования вашего приложения и его конкретных конечных точек. Эта директива дополняет другие настройки, связанные с буферами, в NGINX и может настраиваться совместно с ними для достижения оптимальной производительности.

Пример конфига

server {
    listen 80;
    location /app {
        scgi_pass localhost:4000;
        scgi_buffers 8 16k;
    }
}

Установка слишком малого размера буфера может привести к неполным ответам, если объём данных превышает размер буфера.

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

scgi_busy_buffers_size Директива `scgi_busy_buffers_size` задаёт размер буфера для хранения занятых SCGI-ответов в NGINX.
httpserverlocation
Синтаксисscgi_busy_buffers_size size;
По умолчанию16k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_busy_buffers_size` — это важный параметр конфигурации, определяющий размер буфера, выделяемого для занятых SCGI-ответов, которые ещё не отправлены клиенту. В контексте обработки SCGI-запросов буферы имеют критическое значение, так как позволяют серверу эффективно управлять данными, ожидая ответов от upstream-серверов FastCGI или SCGI. Размер буфера может влиять на производительность сервера под нагрузкой, особенно при обработке больших объёмов данных или при высоком количестве запросов. Когда запрос обрабатывается и ответ от upstream не отправлен немедленно клиенту, ответ временно сохраняется в занятых буферах. `scgi_busy_buffers_size` устанавливает общий размер всех занятых буферов, выделяемых для обработки запросов в указанном контексте (http, server, location). Если указанный размер превышается, вступают в действие дополнительные механизмы, такие как ограничения буферизации и возможное ограничение скорости. Эту директиву следует настраивать с учётом ожидаемой нагрузки и размера ответов, с которыми сервер обычно работает, чтобы обеспечить оптимальную производительность. Параметр для этой директивы измеряется в байтах и может принимать значение, необходимое для учёта ожидаемой нагрузки. Стоит отметить, что эта директива работает в сочетании с другими настройками, связанными с SCGI, и её эффективность зависит от общей конфигурации обработки запросов, тайм-аутов и поведения upstream-серверов.

Пример конфига

http {
    scgi_busy_buffers_size 32k;
}

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

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

scgi_force_ranges Директива `scgi_force_ranges` принуждает использовать запросы диапазонов для ответов SCGI, влияя на то, как данные отправляются клиентам.
httpserverlocation
Синтаксисscgi_force_ranges on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_force_ranges` в NGINX используется в модуле SCGI для указания того, как следует обрабатывать запросы частичного содержимого. При включении этой директивы (когда она установлена в 'on') NGINX будет отвечать на клиентские запросы конкретных байтовых диапазонов в ответах SCGI, соблюдая спецификацию HTTP/1.1 для запросов диапазонов. Это особенно полезно в сценариях потоковой передачи, когда клиентам может понадобиться получить только часть файла, не загружая его полностью. Когда `scgi_force_ranges` установлена в 'on', сервер проверит клиентский запрос на наличие заголовка `Range` и попытается разобрать указанные байтовые диапазоны. Такое поведение может быть полезно для медиафайлов, больших документов или любых ситуаций, когда отправка всего содержимого нецелесообразна или неэффективна. Если директива установлена в 'off', NGINX не будет учитывать запросы `Range` от клиентов и вместо этого будет отправлять им весь контент. Директива может располагаться в различных контекстах, таких как `http`, `server` или `location`, что позволяет гибко настраивать область действия для доставки частичного содержимого. Однако важно убедиться, что вышестоящее SCGI-приложение также поддерживает запросы диапазонов, иначе клиенты могут столкнуться с неожиданным поведением, если диапазоны запрошены, но не обработаны корректно вышестоящим сервером.

Пример конфига

location /example {
    scgi_pass 127.0.0.1:9000;
    scgi_force_ranges on;
}

Убедитесь, что ваше SCGI-приложение поддерживает range requests; в противном случае эта директива не будет иметь эффекта.

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

scgi_limit_rate Директива scgi_limit_rate ограничивает скорость исходящих SCGI-ответов.
httpserverlocation
Синтаксисscgi_limit_rate size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`scgi_limit_rate` используется для управления скоростью передачи данных ответов, отправляемых клиенту при использовании протокола SCGI. Это особенно полезно для управления ресурсами и предотвращения того, чтобы один клиент потреблял чрезмерную полосу пропускания, что могло бы отрицательно сказаться на других пользователях. Указав скорость, вы можете гарантировать, что сервер будет доставлять ответы клиентам с контролируемой скоростью, повышая общую производительность и надежность. Директива принимает один аргумент, который указывает максимальный объём данных для отправки клиенту за единицу времени. Указанное значение может включать суффикс единицы измерения, такой как "k" для килобайт, "m" для мегабайт, или

Пример конфига

location /api {
    scgi_pass backend;
    scgi_limit_rate 200k;
}

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

Если директива установлена в более низком контексте (например, location), она переопределит настройки более высокого контекста.

scgi_cache Директива 'scgi_cache' включает кэширование ответов SCGI-серверов в NGINX.
httpserverlocation
Синтаксисscgi_cache path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache` используется в контексте HTTP-сервера или блока location в NGINX, позволяя кэшировать ответы SCGI (Simple Common Gateway Interface). Когда эта директива задана с путём к зоне кэша, все ответы от upstream SCGI-сервера сохраняются в этом кэше, что позволяет снизить задержки и уменьшить нагрузку на бэкенд-сервер при последующих запросах. Поведение кэширования далее контролируется дополнительными параметрами и директивами, такими как `scgi_cache_key`, которая определяет, как индексируются элементы кэша, и `scgi_cache_path`, которая задаёт расположение хранилища кэша и его конфигурацию. Директива работает совместно с другими конфигурациями, связанными с SCGI. Например, указание `scgi_pass` направит трафик к upstream SCGI-серверу, в то время как `scgi_cache_valid` может определять, как долго ответ может храниться в кэше в зависимости от кода состояния HTTP. Важно эффективно управлять размером кэша и сроками хранения, чтобы избежать устаревших данных или чрезмерного использования памяти. Кэширование может значительно улучшить производительность, но требует тщательной настройки для поддержания эффективности.

Пример конфига

http {
    scgi_cache /var/cache/scgi;
    server {
        location /app {
            scgi_pass backend;
            scgi_cache my_cache;
            scgi_cache_valid 200 1h;
        }
    }
}

Убедитесь, что путь к кэшу доступен для записи рабочими процессами NGINX.

Учтите стратегии инвалидации кэша; устаревшие данные могут быть выданы, если они не будут обработаны должным образом.

Не путайте 'scgi_cache' с 'proxy_cache', так как они предназначены для разных протоколов.

scgi_cache_key Директива `scgi_cache_key` устанавливает ключ кэша для SCGI-ответов в NGINX.
httpserverlocation
Синтаксисscgi_cache_key string | variable;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_key` используется для указания пользовательского ключа кэша для SCGI (произносится 'sggi') ответов в NGINX. По умолчанию NGINX использует сгенерированный ключ, основанный на URI запроса и других параметрах, чтобы хранить данные ответа в SCGI-кэше. Возможность настраивать ключ кэша позволяет оптимизировать производительность кэша, обеспечивая использование в генерации ключа определённых аспектов запроса или переменных, что потенциально снижает число промахов кэша и улучшает время отклика. Эта директива принимает один аргумент, который может быть строкой или переменной, определяющей способ формирования ключа. Например, вы можете включить в ключ определённые параметры запроса или опустить некоторые части URI, которые не требуются для различения кэша. Тщательно продуманный ключ кэша позволяет оптимизировать, какие ответы сохраняются в кэше на основе разных критериев, что приводит к более эффективному использованию кэшированного контента. Важно отметить, что поскольку кэширование напрямую влияет на производительность и эффективность вашего сервера, ключ следует составлять обдуманно, чтобы избежать непреднамеренных коллизий в кэше. Директива `scgi_cache_key` действительна в контекстах `http`, `server` и `location`, что позволяет применять её на разных уровнях конфигурации. Если не указана, NGINX вернётся к своему внутреннему механизму генерации ключей кэша по умолчанию, который может быть не столь эффективным для некоторых сценариев использования.

Пример конфига

location /api {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_key "$request_uri$request_method";
}

Убедитесь, что сформированный ключ достаточно уникален, чтобы предотвратить коллизии в кэше.

Остерегайтесь подстановки переменных; в некоторых случаях переменные могут быть недоступны в момент генерации ключа.

Изменение шаблона ключа кэша приведёт к недействительности существующих элементов в кэше.

scgi_cache_path Директива `scgi_cache_path` задаёт место для хранения ответов SCGI, позволяя использовать кэширование для повышения производительности.
http
Синтаксисscgi_cache_path path zone=name:size [levels=levels] [max_size=size] [inactive=time];
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_path` в NGINX используется для указания расположения кэша для ответов SCGI, что позволяет серверу эффективно сохранять и выдавать ответы SCGI из этого кэша. Эта директива принимает два или более аргумента: путь к директории кэша, ключевую зону (key zone) и, опционально, параметры кэша, такие как максимальный размер и время неактивности. Первый аргумент определяет путь в файловой системе, где будут храниться кэшированные ответы SCGI, а второй аргумент задаёт зону, которую NGINX должен использовать для определения ключа кэша и других связанных настроек. Когда запрашивается ответ SCGI, NGINX сначала проверяет указанный путь к кэшу, чтобы выяснить, существует ли ответ. Если он есть, ответ выдаётся из кэша, что значительно сокращает время отклика и снижает нагрузку на upstream SCGI servers. Если ответа нет в кэше, NGINX перенаправляет запрос на upstream SCGI server, сохраняет ответ в кэше после получения и отправляет его клиенту, а также сохраняет для будущих запросов. Дополнительно кэш можно настроить с помощью параметров, задающих ограничения по размеру и времени жизни элементов кэша, что позволяет эффективно использовать память со временем.

Пример конфига

scgi_cache_path /var/cache/scgi_cache scgi_cache_zone 10m max_size=1g inactive=60m;

Убедитесь, что каталог кэша доступен для записи процессом NGINX.

Правильно укажите зону кэша, чтобы избежать ошибок в конфигурации.

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

scgi_cache_bypass The `scgi_cache_bypass` directive controls when to bypass the SCGI cache based on specified conditions.
httpserverlocation
Синтаксисscgi_cache_bypass condition;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The `scgi_cache_bypass` directive is used to define conditions under which the SCGI cache should be bypassed for specific requests. It accepts one or more arguments that can utilize variables, such as headers or server variables, to determine whether the cache should be ignored. When the condition evaluates to a non-empty value, the response will not be served from the cache, and a new request will be sent to the upstream server instead. This can be particularly useful for dynamic content that should not be cached, ensuring that users receive the latest data. This directive works within the `http`, `server`, or `location` contexts, allowing for fine-grained control over caching behavior based on the application's needs. For instance, if you want to bypass the cache for requests that include a specific cookie or header, you can use this directive effectively to specify that condition. Bypassing the cache can also improve performance in scenarios where data changes frequently or is user-specific, preventing serving stale content. Users should be careful with overusing this directive, as excessive bypassing of the cache can lead to increased load on the upstream servers and potential performance degradation. This necessitates a careful balance between caching and real-time access requirements.

Пример конфига

location /api {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_bypass $http_cache_bypass;
}

Using this directive without proper conditions can lead to unintended caching behavior.

If the bypass condition is always true, it negates the benefits of caching altogether.

Make sure to test the conditions in a production-like environment to avoid performance issues.

scgi_no_cache Директива `scgi_no_cache` управляет поведением серверного кеша для ответов SCGI.
httpserverlocation
Синтаксисscgi_no_cache condition;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_no_cache` используется в контекстах `http`, `server` и `location` для задания условий, при которых ответы SCGI (Simple Common Gateway Interface) не должны кешироваться. С помощью этой директивы можно задать конкретные условия запроса, при которых необходимо обходить механизм кеширования, что позволяет обеспечить более динамичное поведение, адаптированное к отдельным запросам. Директива принимает один или несколько аргументов, которые могут быть переменными или условиями, определяющими, когда кеширование должно быть отключено. Каждое условие, переданное в виде аргумента, оценивается, и если выполняется хотя бы одно из условий, ответ SCGI не сохраняется в кеше. Это особенно полезно в ситуациях, когда ответы могут быть нестабильными или специфичными для пользователя, например когда данные часто обновляются или содержат конфиденциальную информацию. Расположение директивы `scgi_no_cache` может влиять на её работу. Если она указана внутри блока `location`, она будет применяться только к запросам, обрабатываемым этим location. Если определить её в блоке `server`, она затронет все location в рамках этого server, а при определении в блоке `http` — будет действовать глобально для сервера. Таким образом, директива обеспечивает гибкий контроль над поведением кеширования в зависимости от потребностей приложения.

Пример конфига

server {
    location /example {
        scgi_pass 127.0.0.1:9000;
        scgi_no_cache $arg_nocache;
    }
}

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

Неправильная настройка директивы `scgi_no_cache` может привести к проблемам с производительностью, если ожидается использование кэширования.

Будьте внимательны к синтаксису; неверные условия могут привести к непредвиденному поведению или ошибкам.

scgi_cache_valid Директива 'scgi_cache_valid' определяет период времени, в течение которого кэшированные ответы на SCGI-запросы считаются действительными.
httpserverlocation
Синтаксисscgi_cache_valid code time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_cache_valid' используется для настройки поведения кэширования ответов SCGI (Simple Common Gateway Interface) в зависимости от их кодов состояния. Директива позволяет администратору задавать разные продолжительности кэширования для разных HTTP-кодов ответов, что увеличивает контроль над механизмом кэширования. Когда ответ кэшируется, указанное время (в секундах) показывает, как долго ответ должен храниться в кэше, прежде чем он будет помечен как устаревший и потребуется отправка нового запроса к upstream service. Директива может принимать один или несколько аргументов, где каждый аргумент сопоставляет HTTP-код состояния с длительностью кэширования. Например, период кэширования для успешных ответов (например, 200) может отличаться от периода для ответов об ошибке (например, 404). Такая гибкость помогает оптимизировать использование кэша и обеспечить пользователям получение свежего контента при сохранении преимуществ производительности за счёт кэширования. Кроме того, 'scgi_cache_valid' используется внутри блоков 'http', 'server' или 'location', что позволяет применять её к конкретным маршрутам или виртуальным хостам. Она работает совместно с директивой 'scgi_cache', которая должна быть включена, чтобы кэширование вступило в силу. Если ответ на запрос соответствует определённому коду состояния и не превысил установленный срок, NGINX отдаст кэшированную версию вместо отправки нового запроса на backend, что повышает производительность и снижает нагрузку.

Пример конфига

http {
    scgi_cache path/to/cache;
    scgi_cache_valid 200 1h;
    scgi_cache_valid 404 30m;
}

Убедитесь, что 'scgi_cache' включён, чтобы кеширование работало корректно.

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

Директива не работает изолированно; она полагается на дополнительные директивы для полной функциональности.

scgi_cache_min_uses Устанавливает минимальное количество обращений к запросу SCGI, после которых он будет кэшироваться.
httpserverlocation
Синтаксисscgi_cache_min_uses number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_min_uses` задаёт минимальное число запросов к указанному URL, после которых ответ будет кэшироваться. Эта директива особенно полезна в средах с высоким трафиком, где механизм кэширования может стать узким местом, если часто запрашиваемые ответы не сохраняются. Устанавливая порог, вы избегаете кэширования ответов, которые вряд ли будут повторно использованы, что повышает эффективность сервера и уменьшает ненужное использование кэша. Директива принимает один аргумент — положительное целое число. Когда число обращений к запросу достигает или превышает указанное значение, ответ кэшируется в соответствии с установленными правилами кэширования. В противном случае ответ не сохраняется в кэше, что позволяет получать данные в реальном времени. Кроме того, корректная настройка этого числа в соответствии с шаблонами использования приложения помогает оптимизировать расход ресурсов, учитывая как объём памяти, так и операции ввода-вывода на диске, связанные с кэшированием. Важно отметить, что директива работает в рамках более общих настроек `scgi_cache`. Поэтому, чтобы воспользоваться преимуществами `scgi_cache_min_uses`, необходимо также определить директиву `scgi_cache` для включения функциональности кэширования ответов SCGI. При эффективном сочетании эти директивы повышают производительность приложений, использующих SCGI, уменьшая время отклика при повторных запросах.

Пример конфига

scgi_cache_path /etc/nginx/scgi_cache;
scgi_cache_min_uses 3;

location /api {
    scgi_pass backend;
    scgi_cache scgi_cache;
}

Если `scgi_cache` не включён, `scgi_cache_min_uses` не будет иметь эффекта.

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

Убедитесь, что вместе с `scgi_cache_min_uses` установлены соответствующие правила для обеспечения эффективного кэширования.

scgi_cache_max_range_offset Настраивает максимальное смещение при получении диапазона из кэша SCGI.
httpserverlocation
Синтаксисscgi_cache_max_range_offset size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_max_range_offset` указывает максимальное смещение диапазона при получении кэшированных ответов на SCGI-запросы. Эта директива позволяет пользователям задавать конкретный диапазон в байтах, который может быть запрошен из кэша, контролируя, сколько данных может быть отправлено в ответ на запрос с частичным содержимым. Настраивая этот предел, вы можете эффективно управлять использованием пропускной способности и оптимизировать поведение кэширования в зависимости от типов контента и ожидаемого использования клиентами. Когда клиент запрашивает диапазон байтов из кэшированного ответа SCGI, NGINX проверяет, превышает ли запрошенный диапазон предел, заданный директивой `scgi_cache_max_range_offset`. Если запрос превышает этот предел, NGINX может вернуть ошибку или прибегнуть к получению всего ресурса, в зависимости от конфигурации отказа. Эта директива может быть критически важна в ситуациях, когда чрезвычайно большие кэшированные объекты могут привести к чрезмерному использованию ресурсов или когда требуется точный контроль над доставляемым содержимым. Директива принимает один аргумент, задающий максимальное смещение диапазона в байтах. Она может быть установлена на различных уровнях контекста, таких как `http`, `server` и `location`, что позволяет гибко реализовать настройку в зависимости от структуры вашей конфигурации NGINX.

Пример конфига

location /api {
    scgi_pass unix:/var/run/scgi.sock;
    scgi_cache on;
    scgi_cache_path /tmp/scgi_cache levels=1:2 keys_zone=scgi_cache:10m;
    scgi_cache_max_range_offset 100000; 
}

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

Если не задано, клиенты могут получить весь контент при запросе диапазона, превышающего поведение по умолчанию, если обработка неэффективна.

scgi_cache_use_stale Директива scgi_cache_use_stale указывает, когда использовать устаревшие данные SCGI-кэша для обслуживания клиентских запросов в определённых ситуациях.
httpserverlocation
Синтаксисscgi_cache_use_stale error timeout invalid_header updating;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_cache_use_stale' управляет поведением NGINX при обслуживании запросов с устаревшими кэшированными данными из SCGI-кэша. Она позволяет задать конкретные сценарии, при которых устаревшие кэшированные ответы будут отправляться клиенту вместо полного запроса свежих данных с бэкенд-сервера. Синтаксис принимает один или несколько параметров, задающих эти условия, например 'error', 'timeout', 'invalid_header' и 'updating'. Включив эту опцию, вы можете улучшить пользовательский опыт, обеспечив возможность выполнения запросов даже если основной источник данных временно недоступен или медленно отвечает. При установке, если происходит одно из указанных условий, NGINX будет отдавать устаревший кэшированный ответ, вместо того чтобы ждать неопределённо долго свежий ответ. Это особенно полезно в приложениях с высокой нагрузкой, где критична доступность, так как помогает смягчить проблемы с задержками, предоставляя клиентам последний известный корректный ответ вместо мгновенной ошибки. Гибкость директивы позволяет выбирать, в каких ситуациях допускается использование устаревших данных, в зависимости от потребностей вашего приложения и допустимого уровня устаревшей информации.

Пример конфига

location /app {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_use_stale error timeout;    
}

Использование этой директивы без правильной настройки cache может привести к непредвиденным результатам или ошибкам.

Если backend server часто возвращает ошибки, полагаться на stale cache может привести к тому, что пользователям будет выдана устаревшая информация.

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

scgi_cache_methods Директива `scgi_cache_methods` указывает HTTP-методы, которые следует кешировать при использовании протокола SCGI с NGINX.
httpserverlocation
Синтаксисscgi_cache_methods method1 method2 ...;
По умолчаниюGET HEAD
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_methods` является частью конфигурации кеширования в настройке NGINX, использующей протокол SCGI, часто применяемый для взаимодействия с веб‑приложениями на языках программирования. Указывая, какие HTTP‑методы (такие как GET и POST) должны кешироваться, эта директива помогает оптимизировать использование кеша, повысить производительность приложений и сократить время отклика за счёт выдачи кешированных ответов для указанных методов. Эта директива принимает один или несколько HTTP‑методов в качестве аргументов. По умолчанию кешируются ответы только для методов GET и HEAD, что обеспечивает корректную обработку динамического контента. Расширяя это до включения таких методов, как POST, администраторы могут улучшить стратегии кеширования для API или приложений, использующих эти методы, хотя следует быть осторожными, поскольку кеширование ответов на POST может привести к проблемам с состоянием взаимодействия. При настройке кеширования важно балансировать между кешированием эфемерных данных и преимуществами производительности для более плавного пользовательского опыта. В контексте `scgi_cache_methods` директива может использоваться внутри блоков http, server или location для настройки поведения кеширования под конкретные участки приложения. Корректная конфигурация требует чёткого понимания потока данных приложения и последствий кеширования различных HTTP‑методов в рамках логики приложения.

Пример конфига

location /api {
    scgi_pass 127.0.0.1:9000;
    scgi_cache my_cache;
    scgi_cache_methods GET POST;
}

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

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

scgi_cache_lock Директива 'scgi_cache_lock' управляет применением блокировки, когда запрос к кэшированному SCGI-ответу обрабатывается одновременно несколькими процессами.
httpserverlocation
Синтаксисscgi_cache_lock on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_cache_lock' в NGINX включает или отключает блокировку запросов при регенерации записи в кэше. Это означает, что если один процесс уже формирует ответ для запроса, отсутствующего в кеше, последующие запросы к тому же ресурсу должны ждать завершения первого, что позволяет избежать одновременного выполнения нескольких процессов генерации. Блокировка гарантирует, что только один процесс одновременно обновляет кэш, повышая целостность кэша и улучшая пользовательский опыт за счёт уменьшения нагрузки на серверы бэкенда. Если блокировка включена и поступает параллельный запрос в то время, когда ответ генерируется, новые запросы будут ждать готовности ответа вместо прямого обращения к бэкенду. Директива принимает в качестве аргумента флаг, обычно 'on' или 'off'. По умолчанию, если не указано, поведение блокировки будет 'off', то есть несколько запросов могут привести к одновременному выполнению нескольких обращений к бэкенду, что потенциально может привести к повышенной нагрузке на бэкенд или нестабильности времени ответа. Пользователям следует внимательно оценивать требования их приложения к параллельности при решении о включении этой директивы.

Пример конфига

http {
    scgi_cache_path /path/to/cache levels=1:2 keys_zone=my_zone:10m;
    location /scgi {
        scgi_pass backend;
        scgi_cache my_zone;
        scgi_cache_lock on; 
    }
}

Использование 'scgi_cache_lock on' может увеличить время отклика для пользователей при большом количестве одновременных запросов, поскольку они будут ожидать завершения первого ответа.

Блокировку следует использовать с осторожностью, так как её включение может привести к задержкам в ответах, если обработка на бэкенде медленная.

scgi_cache_lock_timeout Устанавливает максимальное время ожидания блокировки кэшированного ответа в SCGI-кешировании NGINX.
httpserverlocation
Синтаксисscgi_cache_lock_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_lock_timeout` в NGINX HTTP Core module задаёт максимальную длительность ожидания при попытке получить блокировку для кэшированного SCGI-ответа. Это особенно полезно, когда несколько запросов к одному и тому же ресурсу обрабатываются одновременно. Когда поступает запрос и соответствующий кэшированный ответ недоступен, устанавливается блокировка, чтобы предотвратить одновременное формирование нескольких SCGI-запросов для того же ресурса. Это гарантирует, что будет выполнен только один запрос upstream, пока остальные ожидают. Если указанный таймаут истечёт и блокировка не будет получена, ожидающие запросы будут возвращены с ошибкой или получат устаревшую кэшированную версию (если такое поведение включено). Поэтому эта директива помогает контролировать, как долго запросы должны находиться в режиме ожидания при возникновении cache miss и предотвращает перегрузку upstream server из‑за одновременных запросов. Значение для `scgi_cache_lock_timeout` задаётся в секундах и позволяет точно контролировать поведение сервера, связанное с блокировками при обработке SCGI-запросов. Возможность задать такой таймаут может значительно повысить производительность под нагрузкой и улучшить время ответа для конечных пользователей.

Пример конфига

scgi_cache_lock_timeout 5s;

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

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

scgi_cache_lock_age Директива `scgi_cache_lock_age` контролирует продолжительность, в течение которой запрос будет удерживать блокировку записи кэша для ответов SCGI.
httpserverlocation
Синтаксисscgi_cache_lock_age time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_lock_age` в NGINX является важным параметром в контексте кэширования ответов SCGI. Когда выполняется запрос к SCGI-бэкенду и происходит промах кэша, NGINX попытается сохранить ответ этого запроса в кэше для последующих идентичных запросов. Чтобы предотвратить ситуацию, когда несколько процессов создают дублирующие SCGI-запросы, пока исходный запрос всё ещё обрабатывается, эта директива задаёт, как долго (в секундах) должна удерживаться блокировка кэша до тех пор, пока ответ не будет получен и сохранён в кэше. Установив этот параметр времени, вы фактически контролируете конкурентность запросов к одной и той же записи кэша, обеспечивая, что для конкретной записи кэша обрабатывается только один запрос до тех пор, пока не станет доступен ответ. Типичный сценарий использования `scgi_cache_lock_age` — это предотвращение проблемы одновременных запросов (thundering herd), когда множество запросов сервера приводит к перегрузке бэкенда. Блокируя запись кэша от обработки несколькими одновременными запросами до завершения первого, NGINX помогает смягчить возможные проблемы с нагрузкой и повышает общую эффективность ответов. Параметр принимает продолжительность, указанную в секундах, и его значение следует тщательно подбирать в зависимости от нагрузки сервера и ожидаемых шаблонов запросов, чтобы оптимизировать производительность при эффективном управлении использованием ресурсов.

Пример конфига

location /api {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_lock on;
    scgi_cache_lock_age 10s;
}

Если `scgi_cache_lock` отключен, директива `scgi_cache_lock_age` не будет иметь никакого эффекта.

Для эффективности эта директива должна использоваться совместно с директивами кэширования.

Неправильная настройка может привести к ненужному ожиданию завершения других запросов перед ответом.

scgi_cache_revalidate Директива `scgi_cache_revalidate` управляет тем, будет ли NGINX повторно проверять кэшированные ответы SCGI перед их отправкой клиентам.
httpserverlocation
Синтаксисscgi_cache_revalidate on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_revalidate` в NGINX используется в контексте блоков `http`, `server` или `location`. Она выполняет роль флага, который определяет, должны ли кэшированные ответы повторно проверяться у SCGI-сервера перед их отправкой клиенту. Когда эта директива установлена в `on`, NGINX будет проверять корректность кэшированного ответа по отношению к бэкенд SCGI‑серверу при каждом запросе к этому ресурсу, гарантируя, что клиенты получают самую актуальную информацию. Если установить её в `off`, NGINX будет отдавать кэшированное содержимое без проверки его актуальности, что может приводить к возврату устаревших данных, если содержимое на сервере изменилось. Эта директива тесно связана с другими директивами кэширования, такими как `scgi_cache`, где `scgi_cache` задаёт зону кэширования, а `scgi_cache_use_stale` может быть использована для отдачи устаревшего содержимого при необходимости. Основная цель `scgi_cache_revalidate` — обеспечить приоритет свежести данных в сценариях, когда бэкенд мог обновить содержимое, которое должно быть отражено пользователю. Неправильная установка этого флага может привести к отдаче устаревшего содержимого, если кэширование настроено, но повторная проверка не приоритетна.

Пример конфига

scgi_cache_path /tmp/scgi_cache levels=1:2 keys_zone=my_cache:10m;

location /example {
    scgi_pass backend;
    scgi_cache my_cache;
    scgi_cache_revalidate on;
}

Установка `scgi_cache_revalidate` в `off` может привести к выдаче устаревшего контента без проверок.

Убедитесь, что `scgi_cache` настроен правильно, иначе эта директива не будет иметь никакого эффекта.

scgi_cache_background_update Директива `scgi_cache_background_update` включает обновление кэша в фоновом режиме для ответов SCGI.
httpserverlocation
Синтаксисscgi_cache_background_update on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_cache_background_update` управляет тем, должен ли NGINX инициировать запрос к upstream server, когда запрашивается устаревшая запись кэша. Если установить 'on', то при устаревшей записи кэша NGINX всё равно отдаст эту устаревшую запись клиенту, одновременно в фоновом режиме получая свежую копию от upstream server. Это улучшает время отклика и обеспечивает, что следующий запрос получит свежие данные. Напротив, если установить 'off', NGINX будет выдавать только устаревшую запись до тех пор, пока она снова не станет валидной, без фонового обновления. Это особенно полезно для снижения задержки при обращении к часто запрашиваемому ресурсу, который нечасто изменяется. Чтобы использовать эту директиву, её можно задать в контексте `http`, `server` или `location`. В зависимости от потребностей приложения включение фоновых обновлений кэша может существенно улучшить воспринимаемую производительность и пользовательский опыт за счёт минимизации времени ожидания получения свежих данных. Тем не менее, при включении этой функции важно учитывать нагрузку upstream server, так как множественные фоновые запросы могут привести к повышенной загрузке upstream service, особенно при большом объёме трафика.

Пример конфига

location /app {
    scgi_pass 127.0.0.1:9000;
    scgi_cache scgi_cache;
    scgi_cache_background_update on;
}

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

Убедитесь, что ключи кэша настроены корректно, чтобы избежать непреднамеренной выдачи старых данных.

scgi_temp_path Директива `scgi_temp_path` задаёт путь для временного хранения запросов SCGI (Simple Common Gateway Interface), позволяя осуществлять специализированную обработку данных SCGI.
httpserverlocation
Синтаксисscgi_temp_path path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_temp_path` указывает путь в файловой системе, где будут размещаться временные файлы для запросов SCGI. Этот путь используется для хранения данных до их отправки бэкенд‑приложению SCGI. Когда выполняется запрос по SCGI, NGINX может буферизовать тело запроса и метаданные, создавая временные файлы в указанном каталоге. Директива может принимать несколько аргументов (до четырёх), которые могут включать базовый путь и дополнительные параметры конфигурации при необходимости. Директиву можно размещать в различных контекстах, таких как `http`, `server` и `location`, что позволяет гибко настраивать поведение в зависимости от архитектуры сервера и потребностей маршрутизации. Настраивая путь для временного хранения, администраторы могут выбрать расположение с достаточным объёмом дискового пространства и подходящими правами доступа для оптимизации производительности и безопасности. Это также позволяет использовать разные места для временного хранения для различных виртуальных серверов или блоков `location`, если это требуется, что способствует упорядоченному управлению файлами. Учтите, что если указанный `scgi_temp_path` не существует или у процесса NGINX нет соответствующих прав доступа, запросы SCGI могут завершаться с ошибкой. Поэтому жизненно важно убедиться, что путь правильно создан и доступен. Кроме того, мониторинг использования дискового пространства в этом каталоге поможет избежать проблем с производительностью, так как обработка запросов может зависнуть, если диск заполнится.

Пример конфига

http {
    scgi_temp_path /var/tmp/scgi_temp;
}

Убедитесь, что указанный путь существует и доступен для записи пользователю NGINX.

Временные файлы могут занимать значительный объём; регулярно следите за их использованием, чтобы предотвратить проблемы.

Если используется общая файловая система, учитывайте её влияние на производительность.

scgi_max_temp_file_size Директива `scgi_max_temp_file_size` ограничивает максимальный размер временных файлов, создаваемых для SCGI-запросов.
httpserverlocation
Синтаксисscgi_max_temp_file_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_max_temp_file_size` используется в NGINX для управления хранением временных файлов при обработке SCGI-запросов. Конкретно эта директива задаёт максимально допустимый размер таких временных файлов, которые создаются, когда тело запроса превышает определённый предел. Если размер временного файла превысит значение, заданное этой директивой, NGINX вернёт ошибку вместо дальнейшей обработки запроса, что помогает предотвращать чрезмерное использование дискового пространства и возможные проблемы с производительностью. Эту директиву можно настроить в контексте `http`, `server` или `location`, что обеспечивает гибкость в зависимости от требований приложения. При задании нужно указывать допустимую единицу измерения размера, такую как байты, килобайты (`k`), мегабайты (`m`) и т. д. Если директива не указана, применяется значение по умолчанию, что фактически означает отсутствие верхнего предела, если не задано иначе. Правильное использование этой директивы может быть критически важным для контроля потребления ресурсов на сервере NGINX. В средах с жёсткими ограничениями по дисковому пространству, таких как общий хостинг или сценарии с ограниченными ресурсами, она может предотвращать несанкционированное чрезмерное использование хранилища временных файлов, тем самым повышая общую надёжность.

Пример конфига

http {
    server {
        location /scgi {
            scgi_pass 127.0.0.1:4000;
            scgi_max_temp_file_size 10m;
        }
    }
}

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

Отсутствие настройки этой директивы может привести к неконтролируемому росту временных файлов, что скажется на свободном месте на диске.

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

scgi_temp_file_write_size Устанавливает ограничение размера для временных файлов, создаваемых при обработке SCGI-запросов.
httpserverlocation
Синтаксисscgi_temp_file_write_size size;
По умолчанию64k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_temp_file_write_size` задаёт максимальный размер временных файлов, которые создаются для хранения данных при обработке SCGI (Scripting Common Gateway Interface) запросов. Эта директива особенно актуальна при работе с большими телами ответов или когда ответы требуют кодирования передачи чанками, поскольку она может влиять на то, как данные буферизуются и записываются во временные файлы. Установка этой директивы позволяет администраторам контролировать использование дискового пространства и влияние на производительность, связанное с чрезмерно большими временными файлами. Если размер ответа SCGI превышает указанный предел, NGINX будет использовать временные файлы для обработки дополнительного объёма данных. Настроенное значение должно быть тщательно подобрано с учётом ожидаемых размеров ответов и доступных ресурсов, чтобы избежать деградации производительности или ошибок из‑за нехватки места на диске. Кроме того, если директива установлена на слишком большое значение, это может привести к увеличению времени записи, если временное хранилище становится узким местом, тогда как слишком низкое значение может привести к более частым дисковым операциям ввода‑вывода из‑за разбивки ответов на более мелкие записи. Эту директиву можно включать в различных контекстах, таких как `http`, `server` или `location`, что позволяет осуществлять детальную настройку размера временных файлов для разных частей приложения по мере необходимости. Понимание конкретного сценария использования и соответствующая корректировка значения являются ключевыми для оптимизации производительности и использования ресурсов при обработке SCGI.

Пример конфига

http {
    scgi_temp_file_write_size 128k;
}

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

Не поддерживается во всех контекстах; использование этого вне соответствующего блока может привести к ошибкам конфигурации.

scgi_next_upstream Директива `scgi_next_upstream` определяет, какие условия ошибок вызывают повторную попытку отправки запроса на следующий сервер в блоке upstream при использовании SCGI.
httpserverlocation
Синтаксисscgi_next_upstream error_code | timedout | invalid_header | http_500 | http_502 | http_503 | http_504;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_next_upstream` используется в контекстах, таких как `http`, `server` и `location`, и играет ключевую роль в управлении логикой повторных попыток запросов в модуле SCGI. Когда запрос завершается неудачно из-за указанных условий ошибок, эта директива позволяет администратору указать, следует ли NGINX попытаться отправить запрос на следующий сервер в блоке upstream. К ним относятся таймауты, отказ в подключении или ответы Bad Gateway. Это повышает надёжность и обеспечивает более плавную работу для клиентов, перенаправляя запросы на доступные серверы в случае проблем на стороне сервера. Директива позволяет задать несколько параметров в виде списка, разделённого запятыми, который указывает, как NGINX должен вести себя при возникновении конкретных ошибок. Например, вы можете захотеть повторить запрос при таймауте, но не при 500 Internal Server Error. Понимание последствий каждого условия, включённого в директиву, имеет решающее значение для создания отказоустойчивых приложений. Неправильная настройка директивы может привести либо к ненужным повторным попыткам, которые увеличивают задержку, либо, наоборот, к отсутствию повторных попыток тогда, когда они могли бы быть полезны. Также важно учитывать, как значения по умолчанию взаимодействуют с заданными параметрами. Если значения не определены, NGINX не выполняет повторных попыток, и сочетание директивы с корректными настройками `scgi_pass` обеспечит успешную связь с приложениями SCGI.

Пример конфига

location /some_url {
    scgi_pass backend;
    scgi_next_upstream error_code timedout http_500;
}

Убедитесь, что серверы upstream правильно определены, чтобы избежать ошибок маршрутизации.

Будьте осторожны с чрезмерным использованием повторных попыток; их избыток может привести к ухудшению производительности или накоплению запросов.

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

scgi_next_upstream_tries Директива 'scgi_next_upstream_tries' задаёт количество попыток подключения к следующему upstream‑серверу в случае сбоя в коммуникации с SCGI‑службой.
httpserverlocation
Синтаксисscgi_next_upstream_tries number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_next_upstream_tries' настраивает, сколько попыток NGINX предпримет для связи с другим upstream‑сервером SCGI, если начальный upstream‑сервер не отвечает должным образом. Она особенно полезна в ситуациях, когда в конфигурации NGINX определено несколько серверов SCGI, поскольку обеспечивает отказоустойчивость и повышает надёжность сервера. Эта директива принимает один целочисленный аргумент, который обозначает общее число повторных попыток, которые должны быть предприняты, прежде чем прекращать попытки подключения к последующим upstream‑серверам. При установке, если SCGI‑запрос завершается неудачей из‑за сетевых проблем, таймаута или любой другой ошибки, обнаруженной при обработке запроса, NGINX попытается переслать запрос следующему upstream‑серверу, указанному в SCGI‑блоке. Такое поведение может помочь распределить нагрузку и повысить доступность приложения. Если все указанные попытки исчерпаны и соединение не удалось установить, NGINX вернёт клиенту ответ с ошибкой. Важно тщательно настроить эту директиву в соответствии со спецификой вашего приложения и возможностями сервера, чтобы избежать излишних задержек при обработке запросов, особенно при высокой нагрузке или когда upstream‑серверы могут быть недоступны сразу.

Пример конфига

http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    location /scgi {
        include fastcgi_params;
        scgi_pass backend;
        scgi_next_upstream_tries 3;
    }
}

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

Убедитесь, что 'scgi_pass' правильно настроен; в противном случае директива может не сработать так, как ожидается.

scgi_next_upstream_timeout Директива 'scgi_next_upstream_timeout' задаёт интервал времени ожидания ответа от следующего SCGI-сервера в upstream-группе, если текущий сервер не отвечает.
httpserverlocation
Синтаксисscgi_next_upstream_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'scgi_next_upstream_timeout' используется в конфигурации NGINX для указания времени ожидания ответа от следующего SCGI-сервера, если текущий сервер перестал отвечать. Этот таймаут важен в средах, где одновременно работают несколько SCGI-серверов, поскольку он сокращает простой за счёт быстрой переключения NGINX на другой сервер, когда основной не отвечает. Значение, задаваемое этой директивой, критично для поддержания производительности и надёжности веб-приложений, использующих SCGI-бекенды. При поступлении запроса, если основной SCGI-сервер не может обработать его в течение указанного времени, NGINX попытается подключиться к следующему серверу, указанному в upstream-конфигурации. Если подключение успешно и сервер отвечает в пределах таймаута, ответ от следующего сервера будет возвращён клиенту. Настраивая этот таймаут, администраторы могут найти баланс между производительностью и использованием ресурсов. Короткий таймаут может привести к более частым быстрым переключениям на другие серверы, но также может увеличить нагрузку на несколько серверов, если в короткий период произойдёт слишком много переключений. Напротив, более длинный таймаут может сделать приложение медленнее при медленном ответе одного из серверов, что потенциально ухудшит пользовательский опыт. Поэтому рекомендуется отслеживать и настраивать этот параметр в соответствии с потребностями приложения и поведением серверов.

Пример конфига

scgi_pass 127.0.0.1:9000;
scgi_next_upstream_timeout 30s;

Установка слишком большого времени ожидания может привести к увеличению задержки для пользователей, если основной сервер не отвечает вовремя.

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

scgi_param Директива `scgi_param` задаёт параметры SCGI для запросов к SCGI-серверам.
httpserverlocation
Синтаксисscgi_param name value [empty];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_param` используется в NGINX для определения параметров, которые будут переданы SCGI (Simple Common Gateway Interface) приложениям при выполнении прокси-запросов. Она позволяет передавать переменные и значения, которые SCGI-сервер может использовать при обработке запроса. Эта директива может принимать от двух до трёх аргументов: имя параметра, значение параметра и, опционально, флаг, указывающий, следует ли удалять параметр из заголовка запроса, если его значение пустое. При использовании `scgi_param` можно задавать пользовательские параметры, соответствующие требованиям SCGI-приложений, которые вы проксируете. Параметры отправляются как часть SCGI-запроса, позволяя бэкенд-приложению динамически реагировать на основе этих значений. Поэтому важно убедиться, что имена параметров соответствуют ожидаемым SCGI-приложением, чтобы избежать проблем при обработке запроса. Часто упускают из виду, что если значение параметра — пустая строка, оно не будет отправлено, если не указан опциональный третий аргумент со значением 'on', который инструктирует NGINX включать пустые параметры в запрос. Эта возможность может быть критически важна при отладке или для обеспечения корректной работы принимающего SCGI-приложения даже когда некоторые параметры не предоставлены или пусты.

Пример конфига

location /example {
    scgi_pass 127.0.0.1:9000;
    scgi_param SCRIPT_NAME /example;
    scgi_param QUERY_STRING $query_string;
    scgi_param REQUEST_METHOD $request_method;
}

Убедитесь, что имена параметров совпадают с теми, которые ожидает SCGI-приложение.

Пустые параметры не будут отправлены, если явно не указано опцией 'empty'.

Значения параметров должны быть URL-encoded, если они содержат символы, требующие кодирования.

scgi_pass_header Директива `scgi_pass_header` позволяет указать заголовки, которые должны быть переданы от SCGI-сервера в ответе клиенту.
httpserverlocation
Синтаксисscgi_pass_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_pass_header` используется в конфигурациях NGINX для управления пересылкой определённых заголовков от SCGI-сервера клиенту. При настройке NGINX гарантирует, что указанные заголовки, включённые в ответ SCGI, будут отправлены вместе с HTTP-ответом. Это особенно полезно для сохранения важной метадаты, предоставляемой SCGI-приложением, например типа содержимого или любых пользовательских заголовков приложения, которые могут потребоваться клиенту. Директива рассчитана на приём одного аргумента, который представляет собой имя заголовка, подлежащего передаче. Директива может применяться в контекстах `http`, `server` или `location`, что обеспечивает гибкость применения в зависимости от области конфигурации. Если требуется несколько заголовков, директиву можно указать несколько раз, по одному разу для каждого включаемого заголовка. Кроме того, важно убедиться, что указанные заголовки действительно присутствуют в ответе SCGI; в противном случае они не будут отправлены клиенту, что приведёт к неполноте передаваемых данных. На практике эта директива работает путём перехвата заголовков, входящих в ответ от SCGI-сервера. Указывая, какие заголовки передавать, администраторы могут тонко настроить поведение на стороне клиента и управление данными, обеспечивая информирование клиентов обо всей необходимой информации и адаптацию к конкретным требованиям обслуживаемого приложения.

Пример конфига

server {
    listen 80;

    location /myapp {
        scgi_pass 127.0.0.1:9000;
        scgi_pass_header X-My-Custom-Header;
        scgi_pass_header Content-Type;
    }
}

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

Если заголовок отсутствует в ответе SCGI, он не появится в ответе клиенту, что может ввести в заблуждение.

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

scgi_hide_header Директива `scgi_hide_header` указывает NGINX исключать определённые заголовки из ответа, отправляемого клиентам при использовании протокола SCGI.
httpserverlocation
Синтаксисscgi_hide_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_hide_header` используется для управления тем, какие заголовки от upstream server не должны включаться в ответ, возвращаемый клиенту. Это позволяет администраторам контролировать раскрытие определённых заголовков по причинам конфиденциальности или безопасности. Она принимает один аргумент, который указывает имя заголовка, подлежащего скрытию. Эту директиву можно размещать в контекстах `http`, `server` или `location`, что даёт гибкость в зависимости от архитектуры приложения. Когда указана директива `scgi_hide_header`, NGINX перехватывает ответ перед его отправкой клиенту и удаляет указанный заголовок из ответа. Это особенно полезно, когда вы контролируете upstream application и хотите очистить или упростить заголовки, отправляемые клиентам, предотвращая раскрытие конфиденциальной или ненужной информации. Для скрытия нескольких заголовков можно использовать несколько директив `scgi_hide_header`, указывая их в отдельных строках или контекстах. Директива направлена на оптимизацию работы с клиентом, обеспечивая отправку только релевантных и безопасных заголовков, и может способствовать более чистому API-ответу. Правильное использование `scgi_hide_header` помогает соблюдать лучшие практики безопасности за счёт контроля раскрытия информации из вашего приложения.

Пример конфига

location /api {
    scgi_pass 127.0.0.1:4000;
    scgi_hide_header X-Powered-By;
    scgi_hide_header Server;
}

Убедитесь, что имя заголовка написано правильно, так как оно чувствительно к регистру.

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

Многократные вызовы этой директивы могут привести к путанице; убедитесь, что нужные заголовки скрыты так, как задумано.

scgi_ignore_headers Директива `scgi_ignore_headers` позволяет указать, какие заголовки от SCGI сервера следует игнорировать в ответе клиенту.
httpserverlocation
Синтаксисscgi_ignore_headers header_name [header_name ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `scgi_ignore_headers` используется в конфигурации NGINX для управления тем, как обрабатываются определённые заголовки ответа, предоставленные SCGI сервером. По умолчанию NGINX передаёт все заголовки из ответа SCGI клиенту, что иногда может привести к непреднамеренному раскрытию заголовков или конфликтам. Эта директива позволяет указать список заголовков, которые должны быть проигнорированы, что обеспечивает более чистую и контролируемую коммуникацию между сервером NGINX и клиентом. Директива принимает одно или несколько имён заголовков в качестве аргументов. Каждый указанный заголовок будет опущен в ответе, отправляемом клиенту при проксировании через NGINX. Это особенно полезно в ситуациях, когда определённые заголовки считаются ненужными или могут потенциально привести к утечке конфиденциальной информации. Имена заголовков вводятся независимо от регистра, а несколько заголовков можно перечислить, разделяя их пробелами. Использование директивы `scgi_ignore_headers` может повысить безопасность и производительность ваших приложений, гарантируя, что клиенту видны только релевантные заголовки. Однако необходимо избегать игнорирования заголовков, критичных для клиента, таких как `Content-Type`, или пользовательских заголовков, которые могут быть необходимы для клиентской обработки.

Пример конфига

location /app {
    scgi_pass 127.0.0.1:9000;
    scgi_ignore_headers X-Powered-By X-Server;
}

Убедитесь, что вы не игнорируете заголовки, необходимые для корректной работы клиента.

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

Игнорирование критических заголовков может привести к потере важных метаданных в ответах.

secure_link Директива 'secure_link' используется для защиты ресурсов, требуя наличия действительной защищённой ссылки для доступа.
httpserverlocation
Синтаксисsecure_link string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'secure_link' добавляет дополнительный уровень защиты, гарантируя, что запросы к определённым ресурсам содержат защищённый токен. Этот токен генерируется на основе конкретного URL и секретного ключа, что позволяет серверу проверять подлинность и действительность запроса. Эта директива особенно полезна для медиаконтента или файлов для скачивания, когда нужно ограничить несанкционированный доступ. После настройки директива 'secure_link' проверяет наличие защищённой ссылки в URL запроса. Защищённая ссылка обычно состоит из хеша, который вычисляется с использованием URL запрашиваемого ресурса и секретного ключа, а также включает время истечения срока действия, что предотвращает бесконечное повторное использование ссылок. Если защищённая ссылка валидна, запрос обрабатывается; если она недействительна или отсутствует, доступ отклоняется. Синтаксис этой директивы позволяет задавать формат защищённой ссылки, а также секретный ключ, используемый для её генерации. Директиву можно применять в контекстах 'http', 'server' или 'location' для эффективного контроля доступа к ресурсам, повышая общую безопасность приложения.

Пример конфига

location /protected {
    secure_link "$arg_md5$arg_time$uri";
    secure_link_md5 "secret_key";
}

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

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

secure_link_md5 Директива `secure_link_md5` генерирует и проверяет MD5-хэши для защищённых ссылок на файлы.
httpserverlocation
Синтаксисsecure_link_md5 string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `secure_link_md5` используется для реализации метода защищённого контроля доступа к файлам в NGINX. Это в основном применяется для защиты ресурсов от несанкционированного доступа путём генерации MD5-хэша на основе заранее заданного секретного ключа, конкретного URI запроса и метки времени. Когда поступает запрос к ресурсу, директива сравнивает сгенерированный хэш с переданным в запросе хэшем, чтобы проверить подлинность и действительность ссылки. Если хэши совпадают и метка времени находится в допустимом диапазоне, доступ разрешается; в противном случае — отклоняется. Параметр для `secure_link_md5` — это строка, которая должна содержать секретный ключ, URI и время истечения. Время истечения определяет, как долго сгенерированная ссылка остаётся действительной, повышая безопасность за счёт ограничения срока использования ссылки. Это особенно полезно в сценариях, когда доступ к чувствительным ресурсам необходим, но не должен быть широко доступен, например при скачивании файлов или доступе к премиум-контенту. Для эффективного использования этой директивы необходимо убедиться, что на стороне сервера и на стороне клиента используются одинаковый алгоритм хеширования и параметры, чтобы обеспечивать согласованность и безопасность между сгенерированными и отправленными MD5-хэшами. Директива может быть настроена в нескольких контекстах, включая `http`, `server` и `location`, что позволяет гибко реализовать её в зависимости от структуры приложения.

Пример конфига

location /private {
    secure_link_md5 "$arg_md5$uri$time$remote_addr";
    secure_link "";
    if ($secure_link = 0) {
        return 403;
    }
    # Protected resource access would follow
}

Убедитесь, что алгоритм хеширования одинаков в реализациях сервера и клиента.

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

Всегда используйте защищённые (https) соединения, чтобы предотвратить перехват данных, передаваемых по ссылке.

secure_link_secret Директива `secure_link_secret` задаёт общий секрет, используемый для проверки защищённых ссылок в NGINX.
httpserverlocation
Синтаксисsecure_link_secret string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `secure_link_secret` используется в конфигурации NGINX для указания секретного ключа, который применяется при генерации и проверке защищённых ссылок. Это особенно полезно для защиты конфиденциальных ресурсов, поскольку гарантирует, что доступ к ссылкам возможен только у клиентов, обладающих корректной подписью, что ограничивает доступ к целевым файлам для неавторизованных пользователей. Когда создаётся защищённая ссылка, она состоит из исходного имени файла и метки времени истечения срока действия, которые криптографически хэшируются с помощью `secure_link_secret`. Это делает ссылку защищённой от подделки: любое изменение ссылки приведёт к отказу в проверке. Когда пользователь пытается получить доступ по защищённой ссылке, NGINX проверяет эту подпись с использованием `secure_link_secret` и разрешает доступ только если хэш корректен и срок действия не истёк. Директива принимает один аргумент — строку общего секрета. Её следует настраивать в контекстах `http`, `server` или `location`; использование этой директивы включает функциональность, связанную с защищёнными ссылками, которая также может требовать применения директивы `secure_link` для управления генерацией и проверкой самих ссылок. Необходимо тщательно хранить общий секрет в конфиденциальности, чтобы предотвратить неавторизованный доступ к ресурсам.

Пример конфига

http {
    secure_link_secret "1mVm0gfR1cuNzU3nXqRxVhbSe3";
}

server {
    location /protected {
        secure_link $arg_hash,$arg_time;
        if ($secure_link = "0") {
            return 403;
        }
        
        # Serve the protected content...
    }
}

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

Изменение секрета после выдачи ссылок сделает эти ссылки недействительными и потребует генерации новых ссылок с использованием нового секрета.

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

slice Директива `slice` в NGINX позволяет разбивать запросы для обработки в определённых блоках.
httpserverlocation
Синтаксисslice size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `slice` используется в контекстах 'http', 'server' и 'location', позволяя задавать, как обрабатываются запросы `slice`. Эта директива принимает один аргумент и указывает NGINX динамически работать с входящим запросом на основе заданных условий. Она особенно полезна для крупных ответов — разбивает их на удобные для обработки фрагменты, что упрощает обработку и позволяет задействовать механизмы кэширования. Также это может повысить эффективность, позволяя обрабатывать несколько небольших запросов параллельно, оптимизируя использование ресурсов и время отклика. При использовании директивы `slice` можно задать различные параметры, определяющие, как будет разделён запрос. Директива работает на детализированном уровне, позволяя настраивать поведение для конкретных сценариев, таких как потоковая передача медиа или загрузка файлов. Это достигается путём указания условий, при которых формируются заголовки ответа, включая директивы для переопределения и управления размером чанков, а также определения конфигураций кэша для различных сегментов. Обратите внимание, что при конфигурации сегменты выполняются в определённом порядке согласно директивам, заданным в конфигурационном файле, что, в свою очередь, влияет на общую производительность и на опыт пользователя.

Пример конфига

slice 1M;

Убедитесь, что задан корректный размер для slicing, поскольку неверные значения приведут к ошибкам.

Использование слишком маленьких slice sizes может привести к увеличению накладных расходов и снижению производительности.

Slicing больших файлов без соответствующих buffering settings может привести к ухудшению производительности.

split_clients Директива `split_clients` позволяет NGINX разделять клиентов на разные группы на основе указанного процента и выполнять различные действия для каждой группы.
http
Синтаксисsplit_clients $remote_addr % { weight1 block1; weight2 block2; ... };
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директиву `split_clients` можно использовать в контексте `http` для упрощения A/B-тестирования и распределения трафика между несколькими бэкендами или конфигурациями. По сути, она направляет запросы от клиентов в один из нескольких определённых блоков на основе захешированного значения клиента, обычно IP-адреса клиента. Когда директива задана, она принимает один или несколько процентов и соответствующие блоки конфигурации. Первый аргумент `split_clients` указывает процент клиентских запросов, который должен соответствовать, чтобы вступил в силу первый блок, за которым следуют правила обработки таких клиентов. Каждый последующий блок может задавать дополнительные проценты, фактически создавая несколько «корзин» клиентов, где каждая корзина может маршрутизировать трафик по‑своему. Это полезно, например, при тестировании новых функций на подмножестве пользователей, в то время как остальным направляется стабильная версия. Чтобы проиллюстрировать, если 70% клиентов направляются на одну версию приложения, а оставшиеся 30% — на другую, директива `split_clients` может управлять этим разделением на основе хэша IP-адреса клиента. В результате отдельные пользователи последовательно попадают на ту версию, которой им назначено, в течение всей сессии, что делает её особенно эффективной для обеспечения согласованного пользовательского опыта в A/B-тестах и при постепенных развёртываниях.

Пример конфига

split_clients ${remote_addr}  70% { server server_v1; }
    30% { server server_v2; };

Убедитесь, что проценты в сумме по всем заданным блокам составляют 100%.

Переменная, используемая для хеширования (например, $remote_addr), должна быть стабильной между запросами, чтобы пользователи оставались в одном и том же бакете.

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

ssi Директива 'ssi' включает или отключает функцию Server Side Includes (SSI) в указанных контекстах.
httpserverlocationif in location
Синтаксисssi on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'ssi', являющаяся частью NGINX HTTP Core module, управляет использованием Server Side Includes (SSI), позволяя генерировать динамический контент путём встраивания директив на стороне сервера в файлы HTML. Эта функция в первую очередь полезна для включения общих шаблонов заголовков и подвалов, вставки динамического содержимого и других сценариев, когда контент нужно разделять между страницами без статического дублирования. Директива принимает флаг в качестве аргумента, который может включать (on) или отключать (off) функциональность SSI в контекстах HTTP, server и location. Когда SSI включён, NGINX обрабатывает файлы, содержащие директивы SSI, интерпретируя их при отдаче файлов. Например, директивы вроде можно использовать внутри HTML-документа для включения содержимого указанного файла. Важно убедиться, что файлы с директивами SSI отдаются с медиа-типом, поддерживающим SSI, например text/html, чтобы механизм работал корректно. Если SSI настроен неправильно, NGINX будет отдавать «сырой» контент без интерпретации директив, что может привести к путанице и неожиданным результатам. Кроме того, следует учитывать, что включение SSI может влиять на производительность, так как добавляет накладные расходы на обработку запросов. Для оптимизации производительности SSI следует использовать осмотрительно в условиях высокой нагрузки и учитывать аспекты кэширования, чтобы смягчить дополнительную нагрузку, вызываемую обработкой инструкций SSI.

Пример конфига

location / {
    ssi on;
    ssi_silently on;
    root /usr/share/nginx/html;
    index index.html;
}

Убедитесь, что директива `ssi` используется в контексте, где она разрешена, например http, server или location.

Файлы, обслуживаемые с директивами SSI, должны иметь тип содержимого text/html, чтобы обрабатываться корректно.

Использование SSI на сайтах с высокой нагрузкой может привести к проблемам с производительностью; могут потребоваться стратегии кэширования.

ssi_silent_errors Директива 'ssi_silent_errors' включает или отключает подавление сообщений об ошибках, создаваемых командами SSI в NGINX.
httpserverlocation
Синтаксисssi_silent_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'ssi_silent_errors' является частью конфигурации сервера NGINX и в основном используется в связке с функциональностью Server-Side Includes (SSI). Когда эта директива установлена в 'on', любые ошибки, возникающие при обработке директив SSI, не будут возвращаться клиенту в составе ответа. Вместо этого NGINX будет подавлять эти ошибки, позволяя серверу продолжать доставку контента без отображения ошибок, которые могут возникать из-за отсутствующих файлов, некорректных директив или других ошибок, связанных с SSI. Если 'ssi_silent_errors' установлена в 'off', что является поведением по умолчанию, клиенты будут получать стандартные сообщения об ошибках для таких проблем, что может быть полезно при отладке, но также может раскрывать им внутренние детали сервера. Для веб-приложений, зависящих от SSI, использование 'ssi_silent_errors' может улучшить пользовательский опыт, гарантируя, что нефатальные ошибки SSI не нарушат доставку контента. Однако разработчикам следует учитывать, что, хотя это скрывает ошибки от пользователей, это может усложнить поиск и устранение неисправностей, поскольку журналы сервера будут содержать ошибки, а клиенты не увидят их. Важно найти баланс между видимостью ошибок для отладки и чистым пользовательским опытом.

Пример конфига

location /includes/ {
    ssi on;
    ssi_silent_errors on;
    # Other configuration options
}

Установка 'ssi_silent_errors' в 'on' может привести к незаметным проблемам при обработке SSI, которые могут повлиять на генерацию контента.

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

ssi_ignore_recycled_buffers Директива `ssi_ignore_recycled_buffers` управляет тем, будут ли переработанные буферы игнорироваться при обработке SSI.
httpserverlocation
Синтаксисssi_ignore_recycled_buffers on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `ssi_ignore_recycled_buffers` в первую очередь относится к функциональности Server Side Includes (SSI) в NGINX. При установке в `on` эта директива инструктирует NGINX игнорировать переработанные буферы — в частности те, которые ранее использовались другими запросами — при обработке SSI. Такое поведение помогает обеспечить корректное отображение включений SSI и предотвращает влияние устаревших данных из предыдущих запросов, которые могут всё ещё находиться в памяти. По умолчанию директива установлена в `off`, что означает, что при встрече переработанных буферов они могут быть использованы, что потенциально может привести к непредвиденным результатам, если данные в этих буферах не относятся к текущему запросу. Эту директиву можно размещать в контекстах `http`, `server` или `location`, что обеспечивает гибкость настройки в зависимости от того, где используется SSI в конфигурации NGINX. В итоге использование `ssi_ignore_recycled_buffers` может сделать обработку SSI более безопасной и предсказуемой, особенно в условиях высокой нагрузки, где переработка буферов встречается чаще.

Пример конфига

location /example {
    ssi on;
    ssi_ignore_recycled_buffers on;
}

Установка значения `on` может увеличить потребление памяти из-за дополнительных выделений, поскольку переработанные буферы не будут повторно использоваться.

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

ssi_min_file_chunk Директива `ssi_min_file_chunk` задаёт минимальный размер фрагментов файла, которые должны обрабатываться при использовании включений на стороне сервера (SSI).
httpserverlocation
Синтаксисssi_min_file_chunk size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `ssi_min_file_chunk` в NGINX управляет размером фрагментов файлов, которые SSI обрабатывает при включении файлов в тело ответа. Основная цель этой директивы — оптимизировать обработку SSI-файлов, задавая минимальный порог. Если включаемый файл меньше указанного размера, сервер пытается прочитать и обработать его за одну операцию, тогда как большие файлы могут быть разбиты на несколько фрагментов для более эффективной обработки. Поэтому изменение этого значения может повлиять на производительность, особенно при большом числе одновременных запросов или при работе с большими файлами. Директива принимает числовой аргумент, который задаёт размер в байтах. Типичный сценарий использования предполагает установку умеренного размера фрагмента, чтобы слишком большие файлы делились надлежащим образом и не перегружали буферы памяти, при этом избегая чрезмерно маленьких фрагментов, увеличивающих накладные расходы на обработку. Рекомендуется выбрать баланс, соответствующий ожидаемой нагрузке и размерам используемых файлов. Директива может быть задана в контекстах `http`, `server` или `location`, что обеспечивает гибкую конфигурацию в зависимости от различных потребностей ваших сайтов или приложений.

Пример конфига

http {
    ssi on;
    ssi_min_file_chunk 2048;
}

Слишком высокое значение этого параметра может привести к значительному потреблению памяти при обработке больших SSI files.

Если не задано, поведение обработки по умолчанию может привести к проблемам с производительностью при обработке очень маленьких файлов.

ssi_value_length Директива ssi_value_length задаёт максимальный размер значений переменных SSI в байтах.
httpserverlocation
Синтаксисssi_value_length size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `ssi_value_length` в NGINX служит для настройки максимальной длины значений переменных включений на стороне сервера (SSI). Эта директива особенно полезна в ситуациях, когда большие значения могут возвращаться командами SSI, например ``. Ограничивая длину значения, можно эффективно контролировать использование ресурсов сервера и избегать ситуаций, которые могут привести к чрезмерному потреблению памяти при обработке. При установке директивы `ssi_value_length` её параметр должен быть положительным целым числом, которое представляет собой максимально допустимую длину значения переменной SSI в байтах. Если задаётся значение, превышающее этот предел, NGINX обрежет его до допустимой длины. Такое поведение помогает предотвращать переполнение и обеспечивать стабильность работы сервиса при обработке динамического контента, создаваемого с помощью SSI. Пользователи могут задавать директиву в разных контекстах, включая блоки `http`, `server` или `location`, что обеспечивает гибкость конфигурации. В целом корректное использование директивы `ssi_value_length` может улучшить производительность и при этом обеспечить управляемость контента, созданного посредством обработки SSI. Однако важно выбрать подходящее значение в соответствии с требованиями приложения, сохраняя целостность данных и оптимизируя производительность.

Пример конфига

http {
    ssi_value_length 128;
    server {
        location / {
            ssi on;
        }
    }
}

Установка слишком низкого значения может привести к неожиданному усечению значений переменных.

Пренебрежение настройкой этой директивы может привести к чрезмерному потреблению ресурсов при обработке больших значений переменных SSI.

ssi_types Директива 'ssi_types' в NGINX определяет типы медиафайлов, которые должны обрабатываться для Server Side Includes (SSI).
httpserverlocation
Синтаксисssi_types type1 [type2 ...];
По умолчаниюtext/html text/shtml;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'ssi_types' используется для определения типов файлов, пригодных для обработки Server Side Includes (SSI) в NGINX. По умолчанию только файлы HTML и SHTML подвергаются обработке SSI, чтобы избежать ненужного парсинга других типов файлов, которые в этом не нуждаются. Эта директива позволяет пользователям расширять набор типов файлов, гарантируя, что любой указанный тип файла сможет содержать команды SSI. Директива принимает в качестве аргумента один или несколько MIME-типов и настраивается в контекстах http, server или location. Например, вы можете добавить типы вроде 'text/xml' или 'application/json', если хотите включить SSI в файлы этих типов. Когда сервер NGINX встречает файл, для которого сопоставлен MIME-тип, указанный в 'ssi_types', он будет обрабатывать этот файл на предмет директив SSI. Директива особенно полезна в динамических веб-приложениях, где различные форматы могут содержать команды include. Однако при расширении SSI на типы, отличные от HTML, следует проявлять осторожность, так как это может потенциально увеличить нагрузку на сервер из-за парсинга файлов, которым SSI может быть не нужен. Кроме того, следует соблюдать правильное согласование содержимого, чтобы обеспечить выдачу и обработку корректных типов.

Пример конфига

location /includes {
    ssi on;
    ssi_types text/xml application/json;
}

Убедитесь, что желаемые MIME-типы указаны правильно; опечатка помешает обработке.

Помните, что включение SSI для многих типов файлов может увеличить нагрузку на сервер и время отклика.

Не забудьте включить SSI в location block или глобально, чтобы это вступило в силу.

ssi_last_modified Директива ssi_last_modified включает или отключивает генерацию заголовков Last-Modified для файлов, обрабатываемых Server Side Includes (SSI).
httpserverlocation
Синтаксисssi_last_modified on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `ssi_last_modified` используется в модуле NGINX HTTP Core для управления тем, должен ли NGINX отправлять HTTP-заголовок Last-Modified для файлов, встроенных и обрабатываемых Server Side Includes (SSI). Когда эта директива включена (установлена в 'on'), NGINX проверяет метки времени включенных файлов и генерирует соответствующие заголовки Last-Modified на основе наиболее позднего времени изменения этих файлов. Это может быть полезно для механизмов кэширования и помогает клиентам определить, нужно ли им получить свежую версию ресурса или кешированная версия все ещё действительна. Когда установлено 'off', заголовок Last-Modified не будет генерироваться, что может снизить накладные расходы в некоторых сценариях, где кэширование не является критичным.

Пример конфига

location / {
    ssi on;
    ssi_last_modified on;
}

Убедитесь, что SSI включён, чтобы конфигурация вступила в силу; в противном случае директива не окажет никакого эффекта.

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

Установка этой директивы в 'on' может привести к ненужным накладным расходам, если включаемые файлы не изменяются часто.

ssl_certificate Директива ssl_certificate указывает путь к файлу SSL-сертификата для конфигураций сервера HTTPS в NGINX.
httpserver
Синтаксисssl_certificate file_path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_certificate необходима для включения SSL на сервере NGINX. Она задаёт путь к PEM-encoded файлу SSL-сертификата, который содержит публичный ключ управляемого сервера. Этот сертификат критически важен для установления защищённых соединений HTTPS, так как он позволяет клиентам проверить подлинность сервера, к которому они подключаются. Директива может быть определена в контекстах http или server, влияя либо на всю конфигурацию сервера, либо на конкретный серверный блок соответственно. Обычно директива ssl_certificate используется вместе с директивой ssl_certificate_key, которая указывает соответствующий приватный ключ для сертификата. Оба файла должны соответствовать друг другу; в противном случае SSL handshake завершится неудачей, что помешает установлению защищённых соединений. Конфигурация также должна включать параметры, связанные с SSL, такие как директивы ssl_protocols и ssl_ciphers, которые определяют используемые протоколы безопасности и алгоритмы шифрования при соединении. При использовании этой директивы важно убедиться, что указанный файл сертификата доступен и имеет правильный формат. Сертификаты можно получить у различных центров сертификации, и они обычно представлены в виде файлов .crt. Кроме того, если используется цепочка сертификатов, файл должен содержать в себе серверный сертификат и любые промежуточные сертификаты для корректной проверки на стороне клиента.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    location / {
        # Other configurations
    }
}

Убедитесь, что путь к файлу сертификата указан правильно и доступен пользователю NGINX.

Убедитесь, что SSL-сертификат действителен и правильно подписан доверенным центром сертификации.

Если используется подстановочный сертификат, значение server_name должно корректно соответствовать формату подстановки, чтобы сертификат был действителен.

ssl_certificate_key Директива ssl_certificate_key указывает файл приватного ключа, используемый для шифрования SSL/TLS в NGINX.
httpserver
Синтаксисssl_certificate_key path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_certificate_key является критически важной настройкой при конфигурации защищённых HTTPS-соединений в NGINX. Эта директива позволяет пользователю указать файл, который содержит приватный ключ, соответствующий SSL-сертификату, определённому в директиве ssl_certificate. Она обеспечивает, что NGINX может устанавливать защищённые SSL/TLS-сессии, расшифровывая данные, отправляемые клиентами, и предоставляя безопасный уровень для передачи данных через интернет. На практике директива ssl_certificate_key принимает один аргумент — путь к файлу приватного ключа. Контекст, в котором можно использовать эту директиву, — внутри блоков 'http' или 'server', что позволяет задавать её глобально или для конкретного виртуального сервера. Важно убедиться, что файл приватного ключа имеет правильные права доступа: он должен быть доступен процессу NGINX, но при этом оставаться защищённым от несанкционированного доступа, чтобы предотвратить утечку конфиденциальной информации. Неправильная настройка этой директивы может привести к сбоям SSL-рукопожатия и ошибкам, таким как "SSL_CTX_use_PrivateKey_file() failed". Поэтому необходимо проверить, что приватный ключ соответствует указанному сертификату и оба корректно настроены в конфигурационных файлах NGINX.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
}

Закрытый ключ должен соответствовать связанному SSL-сертификату.

Убедитесь, что процесс NGINX имеет права на чтение файла закрытого ключа.

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

ssl_certificate_cache Директива ssl_certificate_cache задаёт параметры кэширования SSL-сертификатов в NGINX.
httpserver
Синтаксисssl_certificate_cache size [timeout] [max_size];
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_certificate_cache в NGINX настраивает параметры кэширования SSL-сертификатов. Когда устанавливаются SSL-соединения, NGINX может сохранять SSL-сертификаты в кэше для повторного использования. Такое поведение кэша помогает повысить производительность, сокращая необходимость многократно загружать SSL-сертификаты для одних и тех же соединений или при активном управлении сессиями. Параметры позволяют настраивать размер кэша и длительность хранения сертификатов. Директива может принимать от одного до трёх аргументов. Первый параметр задаёт размер кэша, то есть объём памяти, выделяемый для кэширования сертификатов. Он может использовать распространённые суффиксы размеров, такие как 'k', 'm' или 'g', обозначающие килобайты, мегабайты или гигабайты. Второй необязательный параметр задаёт таймаут, определяющий, как долго сертификат остаётся в кэше, а третий необязательный параметр указывает максимальное число записей в кеше. Если они не заданы, сертификаты будут оставаться в кэше до достижения предела размера кэша, после чего будут вытесняться наименее недавно использованные элементы. Использование ssl_certificate_cache помогает оптимизировать время SSL-рукопожатия, поскольку NGINX может извлекать сертификаты из памяти, избегая filesystem I/O. Однако администраторам следует осторожно подходить к выбору размера кэша и времени хранения, так как они могут повлиять на использование памяти и динамику обновления сертификатов, особенно в средах с частой сменой SSL-сертификатов.

Пример конфига

http {
    ssl_certificate_cache 10m 30s 100;
}

Убедитесь, что размер cache достаточен для вашей ожидаемой нагрузки.

Установка слишком большого timeout может привести к появлению устаревших certificates при изменениях.

Неиспользование cache может привести к увеличению времени SSL handshake.

ssl_ech_file Настраивает путь к файлу, содержащему данные конфигурации ECH (Encrypted Client Hello).
httpserver
Синтаксисssl_ech_file path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_ech_file` используется для указания пути к файлу конфигурации, содержащего параметры ECH (Encrypted Client Hello), которые обеспечивают механизм повышения конфиденциальности начального рукопожатия в SSL/TLS-соединениях. Эта директива является частью модуля SSL для NGINX и полезна для веб‑серверов, стремящихся защитить пользователей от слежки и обеспечить целостность веб‑опыта. Параметр этой директивы — строка, представляющая путь к файлу, в котором хранится конфигурация ECH. Файл конфигурации ECH должен быть корректно отформатирован и содержать допустимые записи; в противном случае NGINX не сможет корректно запуститься или загрузить конфигурацию. Важно убедиться, что на файл установлены правильные права доступа, чтобы NGINX мог прочитать его при запуске. Когда сервер NGINX запущен с включённым ECH, он прочитает указанный файл во время запуска, гарантируя, что заданные свойства ECH будут применены к клиентам, поддерживающим эту функцию. Это может способствовать повышению конфиденциальности пользователей и обеспечению более защищённого канала связи с сервером.

Пример конфига

ssl_ech_file /etc/nginx/echn_config.conf;

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

Содержимое файла конфигурации ECH должно соответствовать ожидаемому формату, иначе NGINX не распознает настройки.

ssl_password_file Директива `ssl_password_file` задаёт путь к файлу, содержащему пароль для приватного ключа SSL-сертификата.
httpserver
Синтаксисssl_password_file file;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_password_file` в NGINX используется для указания расположения файла, содержащего пароль для приватного ключа SSL-сертификата. Она особенно полезна, когда приватный ключ зашифрован и для доступа к нему требуется фраза-пароль. Предоставив этот файл, NGINX может автоматически прочитать пароль, что позволяет серверу запускаться без ручного вмешательства. Эта директива поддерживает только один аргумент, которым должен быть путь к файлу с паролем. Эта директива может быть размещена в контексте `http` или `server`, что делает её гибкой для настройки в соответствии с конкретной конфигурацией сервера. При запуске NGINX, если приватный ключ защищён паролем, движок прочитает пароль из файла, указанного в этой директиве. Файл с паролем должен храниться в безопасном месте, так как он содержит конфиденциальную информацию. Поэтому следует установить соответствующие разрешения, чтобы ограничить доступ к этому файлу и предотвратить чтение пароля неавторизованными пользователями. Если файл не найден или доступ к нему запрещён, NGINX не сможет запуститься или выполнить перезагрузку, что может привести к прерыванию сервиса. Поэтому крайне важно убедиться, что путь указан правильно и у NGINX есть необходимые права на чтение файла для бесперебойной работы.

Пример конфига

server {
    ssl_certificate /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/private/server.key;
    ssl_password_file /etc/ssl/private/password.txt;
}

Убедитесь, что файл с паролями доступен для чтения рабочими процессами NGINX — обычно это пользователь, под которым запущен NGINX.

Если файл с паролями отсутствует или указан неверно, NGINX не сможет запуститься, что приведёт к простоям сервера.

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

ssl_certificate_compression Директива ssl_certificate_compression определяет, включена ли или отключена компрессия сертификатов SSL/TLS.
httpserver
Синтаксисssl_certificate_compression on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_certificate_compression в NGINX используется для включения или отключения сжатия сертификатов SSL/TLS, отправляемых клиентам. Сжатие сертификатов может повысить скорость передачи данных за счёт уменьшения объёма данных, передаваемых по сети, что особенно полезно при ограниченной пропускной способности. Однако включение этой функции может представлять риск для безопасности, поскольку потенциально может подвергнуть сжатые данные атакам, таким как CRIME. Эта директива принимает флаг в качестве аргумента: установка 'on' включает сжатие, а 'off' — отключает его. По умолчанию директива установлена в 'off', то есть сертификаты SSL/TLS будут передаваться в исходном виде без сжатия. При использовании этой функции следует соблюдать осторожность, особенно при работе с конфиденциальными данными, из‑за возможных последствий утечки данных при передаче в сжатом виде. Для использования этой директивы её можно поместить в контексты http или server в конфигурационном файле NGINX. Как и при изменении других параметров конфигурации, любые изменения этой директивы потребуют перезапуска или перезагрузки сервера NGINX, чтобы вступить в силу.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_certificate_compression on;
}

Включение сжатия SSL-сертификатов может подвергнуть сервер потенциальным уязвимостям безопасности, таким как CRIME.

Убедитесь, что ваши клиенты поддерживают функцию сжатия, чтобы избежать проблем с совместимостью.

Проверьте производительность и безопасность вашего сервера после изменения этой директивы.

ssl_dhparam Указывает параметры DH для обмена ключами Диффи-Хеллмана в SSL/TLS‑соединениях.
httpserver
Синтаксисssl_dhparam path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_dhparam` настраивает параметры Диффи-Хеллмана (DH), которые будут использоваться во время SSL/TLS‑рукопожатий для защищённых соединений. Параметры DH имеют решающее значение для установления безопасного обмена ключами между сервером и клиентами, особенно при использовании определённых наборов шифров, требующих их наличия. Использование пользовательского файла параметров DH позволяет администраторам задать надёжную длину ключа, повышая защиту от потенциальных атак. Директива принимает один аргумент — путь к файлу, содержащему параметры DH, обычно в формате PEM. Когда задан `ssl_dhparam`, NGINX будет использовать указанные параметры DH для всех новых SSL‑соединений, которым требуется обмен ключами DH. Директива применима в контекстах `http` и `server`, что делает её универсальной для задания параметров DH глобально или на уровне отдельного сервера. Важно убедиться, что файл с параметрами DH корректно настроен и доступен процессу NGINX, поскольку в противном случае это может привести к сбоям при SSL‑рукопожатиях. На практике обычно создают сильный файл параметров DH с помощью таких инструментов, как OpenSSL, и рекомендуется регулярно обновлять эти параметры для поддержания высокого уровня безопасности. Длина параметров должна быть, по возможности, не менее 2048 бит для современных требований безопасности, хотя более длинные параметры могут увеличить вычислительную нагрузку в процессе рукопожатия.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/privatekey.pem;
    ssl_dhparam /path/to/dhparams.pem;
}

Убедитесь, что файл DH parameters существует и доступен процессу NGINX, чтобы избежать ошибок SSL handshake.

Использование недостаточно сильных DH parameters может привести к уязвимостям; предпочитайте параметры не менее 2048 bits.

Изменения в DH parameters требуют перезагрузки NGINX, чтобы вступить в силу.

ssl_ecdh_curve Задает кривую для ECDH (Elliptic Curve Diffie-Hellman) обмена ключами в сессиях SSL/TLS.
httpserver
Синтаксисssl_ecdh_curve curve_name;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_ecdh_curve` в NGINX используется для указания эллиптических кривых, предпочитаемых для ECDH-обмена ключами в соединениях SSL/TLS. ECDH — это механизм обмена ключами, который позволяет двум сторонам установить общий секрет по небезопасному каналу связи, который затем может быть использован для симметричного шифрования. Эта директива особенно важна при настройке защищённых соединений, поскольку выбор эллиптических кривых может влиять как на безопасность, так и на производительность. Значение, задаваемое с помощью `ssl_ecdh_curve`, может быть конкретным названием кривой или списком кривых. NGINX поддерживает различные стандартные кривые, и сервер будет использовать первую кривую из списка, которую поддерживают и сервер, и клиент. Важно выбирать надёжные, широко поддерживаемые кривые, чтобы обеспечить максимальную совместимость и безопасность. Эта директива может быть установлена в контексте `http` или `server`, влияя на все блоки, где включён SSL. Неправильная конфигурация, например указание слабых кривых, может привести к уязвимостям в TLS‑соединениях, устанавливаемых сервером.

Пример конфига

server {
    listen       443 ssl;
    server_name  example.com;
    ssl_certificate     server.crt;
    ssl_certificate_key server.key;
    ssl_ecdh_curve    secp384r1; 
}

Убедитесь, что SSL включён перед использованием этой директивы; иначе она не будет иметь эффекта.

Использование неподдерживаемых кривых может привести к сбоям соединения или переключению на более слабые методы.

Учтите совместимость со старыми клиентами, которые могут не поддерживать современные кривые.

ssl_protocols Директива 'ssl_protocols' указывает SSL/TLS-протоколы, которые разрешено использовать в NGINX.
httpserver
Синтаксисssl_protocols TLSv1 TLSv1.1 TLSv1.2;
По умолчаниюSSLv3;
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'ssl_protocols' используется в SSL-контексте NGINX для определения версий протоколов SSL и TLS, разрешённых для защищённых подключений. Эта директива повышает безопасность, позволяя администраторам указывать только те версии, которые они считают безопасными и необходимыми, эффективно отключая старые, потенциально уязвимые протоколы, такие как SSLv2 и SSLv3. Варианты протоколов включают 'TLSv1', 'TLSv1.1', 'TLSv1.2', 'TLSv1.3', а устаревшие опции можно опустить, чтобы предотвратить их использование. Параметры, указанные в этой директиве, должны соответствовать текущим стандартам безопасности, поскольку использование устаревших версий может подвергнуть серверы различным уязвимостям.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/private/server.key;
    ssl_protocols TLSv1 TLSv1.2;
}

Убедитесь, что проверили совместимость с браузерами клиентов при отключении устаревших протоколов.

Если вы используете версию до 1.15.0, не указывайте TLSv1.3, поскольку он не поддерживается.

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

ssl_ciphers Задает список шифров, используемых для SSL/TLS-соединений в NGINX.
httpserver
Синтаксисssl_ciphers string;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_ciphers` в NGINX указывает, какие шифры разрешены для SSL/TLS‑соединений, позволяя администраторам контролировать криптографические протоколы, которые могут использоваться для защищенной передачи данных. Эта директива принимает один аргумент — список строк шифров, отформатированных в соответствии с документацией OpenSSL или NGINX. Порядок шифров имеет значение: сервер будет пытаться использовать шифры в указанном порядке при согласовании защищенных соединений с клиентами. Если клиент не поддерживает ни один из указанных шифров, он не сможет установить защищенное соединение с сервером. Важно, чтобы администраторы сервера выбирали шифры, обеспечивающие достаточный уровень безопасности и поддерживаемые клиентами, которые ожидаются для подключения. Установив эту директиву, они могут снизить уязвимости, связанные со старыми или слабыми шифрами, а также ограничить спектр атак на защищенные соединения. Для более сложных конфигураций эту директиву можно комбинировать с другими, связанными с SSL, директивами, такими как `ssl_protocols` и `ssl_prefer_server_ciphers`, для повышения уровня безопасности. При использовании этой директивы следует проводить надлежащее тестирование и проверку, чтобы убедиться, что достигнут требуемый уровень безопасности и сохранена совместимость с клиентскими приложениями.

Пример конфига

ssl_ciphers 'HIGH:!aNULL:!MD5';

Убедитесь, что указанные шифры поддерживаются вашей версией OpenSSL и NGINX.

Использование устаревших или слабых шифров может подвергнуть ваш сервер уязвимостям безопасности.

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

ssl_buffer_size Директива `ssl_buffer_size` задаёт размер буфера, используемого для чтения данных SSL.
httpserver
Синтаксисssl_buffer_size size;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_buffer_size` в NGINX определяет размер буфера, выделяемого для чтения сообщений SSL-рукопожатия. Этот размер буфера влияет на приём данных SSL как во время рукопожатия, так и при передаче данных. По умолчанию NGINX позволяет размеру буфера динамически подстраиваться под потребности конкретной используемой SSL-библиотеки, но его можно явно задать для оптимизации или для обеспечения определённого поведения сервера. При использовании директивы указывается размер буфера, который должен соответствовать ожидаемому размеру для вашего сценария использования. Установка этого значения слишком малого может привести к проблемам с производительностью или неправильной обработке крупных сообщений, тогда как чрезмерно большое значение может приводить к расточительному использованию памяти. Это значение используется внутренне NGINX во время фазы SSL-рукопожатия — когда согласовываются защищённые соединения — и в процессе фактической передачи данных по TLS, влияя таким образом на общую эффективность SSL-операций. Директиву можно размещать как в контексте http, так и в контексте server, что даёт гибкость в определении размеров буферов на разных уровнях конфигурации NGINX. Для серверов, обрабатывающих большие объёмы SSL-трафика, тонкая настройка `ssl_buffer_size` может привести к улучшению производительности и снижению задержек.

Пример конфига

http {
    ssl_buffer_size 16k;
}

server {
    listen 443 ssl;
    ssl_buffer_size 8k;
}

Убедитесь, что размер буфера соответствует ожидаемому максимальному размеру SSL-записи, чтобы избежать усечения сообщений.

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

ssl_verify_client Директива `ssl_verify_client` настраивает, должен ли NGINX запрашивать и проверять SSL-сертификат клиента.
httpserver
Синтаксисssl_verify_client on | off | optional;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_verify_client` используется в конфигурации NGINX для указания проверки SSL-сертификатов клиента во время SSL-рукопожатия. При включении эта директива заставит NGINX запросить у клиента сертификат и, в зависимости от значения `on`, `off` или `optional`, либо требовать подтверждения действительного сертификата, либо позволять клиенту продолжить работу, если он его не предоставляет. Это особенно полезно в сценариях с повышенными требованиями к безопасности, где используется mutual TLS (mTLS) для аутентификации клиентов на основе сертификатов. Директива принимает один аргумент: - `on`: Требует от клиента предоставления действительного сертификата, в противном случае происходит отказ. - `off`: Не запрашивает сертификат клиента и игнорирует сертификаты клиентов для целей аутентификации. - `optional`: Запрашивает сертификат клиента, но допускает доступ даже если клиент его не предоставил. Если сертификат клиента предоставлен, он будет проверен. Этот уровень контроля позволяет администраторам тонко настраивать политики безопасности для разных конечных точек в окружении сервера NGINX. Крайне важно сочетать использование этой директивы с правильно настроенными файлами CA и сертификатов, чтобы избежать уязвимостей безопасности и обеспечить корректную работу mTLS.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    ssl_verify_client on;
    ssl_client_certificate /etc/nginx/ssl/ca.crt;
}

Убедитесь, что CA-сертификат, используемый для проверки клиента, правильно задан с помощью `ssl_client_certificate`.

Использование `optional` без корректного клиентского сертификата может привести к несанкционированному доступу, если этим не управлять должным образом.

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

ssl_verify_depth Директива ssl_verify_depth задаёт максимальную глубину цепочки сертификатов CA, которой будет доверять сервер при SSL/TLS-аутентификации клиента.
httpserver
Синтаксисssl_verify_depth number;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_verify_depth используется в контексте SSL-модуля NGINX для установки максимально допустимой глубины цепочки центров сертификации (CA) для SSL/TLS-аутентификации клиента. Эта глубина задаётся целым числом, которое указывает, сколько сертификатов CA может быть в цепочке доверия, представляемой сертификатом клиента. Если соединение представляет цепочку сертификатов длиной больше значения, установленного этой директивой, соединение будет отклонено. Директива особенно полезна в средах, где требуется аутентификация клиента, так как она гарантирует, что в проверочном пути допускается только ограниченное число промежуточных CA. Ограничивая максимальную глубину, администраторы сервера могут лучше контролировать отношения доверия и снижать потенциальные риски, связанные с чрезмерно глубокими или недоверенными цепочками сертификатов. Например, установка ssl_verify_depth в 1 означает, что сервер будет доверять только сертификату, у которого либо есть прямой доверенный издатель (корневой CA), либо цепочка, включающая одного промежуточного CA. Это помогает задать строгую иерархию CA и может предотвратить потенциальные проблемы с безопасностью, возникающие из-за глубоких цепочек доверия, в которые может быть включён недоверенный CA.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/server.crt;
    ssl_certificate_key /etc/ssl/private/server.key;

    ssl_client_certificate /etc/ssl/certs/ca.crt;
    ssl_verify_client on;
    ssl_verify_depth 2;
}

Убедитесь, что заданное значение не чрезмерно ограничивает доверие; проконсультируйтесь с иерархией вашего центра сертификации (CA) перед определением глубины.

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

ssl_client_certificate Директива ssl_client_certificate указывает файл, содержащий доверенные сертификаты CA для проверки клиентских сертификатов.
httpserver
Синтаксисssl_client_certificate path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_client_certificate используется в конфигурации NGINX для указания пути к файлу, содержащему доверенные сертификаты Certificate Authority (CA) для проверки клиентских сертификатов при SSL/TLS соединениях. Эта директива обычно применяется в конфигурациях, требующих mutual TLS authentication, когда клиенты должны предъявить действительный сертификат, подписанный доверенным CA, чтобы установить соединение с сервером. Когда директива настроена, NGINX использует указанный список Certificate Authority (CA) для аутентификации клиентских сертификатов, предъявляемых во время SSL handshake. Процесс валидации проверяет, указан ли выпускающий CA клиентского сертификата в предоставленном файле. Если валидация проходит успешно, клиенту разрешается продолжить; в противном случае соединение может быть разорвано или могут применяться дополнительные действия в зависимости от других настроек. Важно убедиться, что указанный файл содержит действительные сертификаты CA и что установлены правильные права доступа, чтобы NGINX мог прочитать файл. Директиву можно задавать в контексте http или server, в соответствии с конкретными требованиями приложения. Учтите, что если необходимо доверять нескольким клиентским сертификатам, эта конфигурация может указывать на один файл, содержащий все необходимые сертификаты CA, обеспечивая бесшовную валидацию для нескольких клиентских идентичностей.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate     /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    ssl_client_certificate /etc/nginx/ssl/ca.crt;
    ssl_verify_client on;
}

Убедитесь, что путь к файлу сертификата указан правильно и доступен процессу NGINX.

Проверьте правильность прав доступа к файлу CA-сертификата.

Убедитесь, что SSL правильно настроен на сервере для использования этой директивы.

ssl_trusted_certificate Директива 'ssl_trusted_certificate' указывает один или несколько доверенных сертификатов CA, используемых для проверки клиентских сертификатов в контекстах SSL/TLS.
httpserver
Синтаксисssl_trusted_certificate path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'ssl_trusted_certificate' играет ключевую роль в настройках SSL/TLS в NGINX, указывая путь к одному или нескольким сертификатам центра сертификации (CA), которые используются для проверки клиентских сертификатов при взаимной TLS-аутентификации. При настройке NGINX загрузит эти доверенные сертификаты из указанных файлов и использует их для проверки подлинности клиентских сертификатов, представленных в ходе фазы SSL-рукопожатия. Эта директива особенно важна при использовании аутентификации клиентов, когда серверу необходимо убедиться, что клиентский сертификат выдан доверенным центром сертификации. Сертификаты, указанные в 'ssl_trusted_certificate', могут быть в формате PEM, что обеспечивает простую интеграцию с другими источниками доверенных сертификатов. Кроме того, если указан объединённый файл, он должен быть упорядочен так, чтобы сертификат корневого CA располагался первым, за ним следовали любые промежуточные сертификаты, что обеспечивает корректную проверку цепочки. Также следует учитывать, что если эта директива не задана или указанные файлы сертификатов не могут быть загружены, NGINX не сможет проверить клиентские сертификаты, что может представлять риск для безопасности. Поэтому крайне важно всегда правильно настраивать и проверять пути и права доступа к файлам сертификатов, используемым в этой директиве.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;
    ssl_trusted_certificate /path/to/ca.crt;
    ssl_client_certificate /path/to/client.crt;
    ssl_verify_client on;
}

Убедитесь, что сертификаты CA имеют правильный формат (PEM) и корректно указаны в конфигурации.

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

Имейте в виду, что недоверенные или просроченные сертификаты CA могут привести к отказам в аутентификации клиентов.

ssl_prefer_server_ciphers Директива `ssl_prefer_server_ciphers` управляет приоритетом наборов шифров, используемых в SSL/TLS-соединениях.
httpserver
Синтаксисssl_prefer_server_ciphers on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_prefer_server_ciphers` в NGINX указывает, должна ли предпочитаемая сервером последовательность наборов шифров иметь приоритет над предпочтениями клиента при установлении SSL/TLS-соединений. По умолчанию процесс SSL/TLS-рукопожатия позволяет клиенту выбирать набор шифров для защиты соединения на основе его предпочтений. Однако некоторые политики безопасности могут требовать, чтобы окончательное решение о том, какой набор шифров будет выбран, принималось сервером, особенно для обеспечения более сильных или более стабильных методов шифрования. Когда директива установлена в 'on', NGINX игнорирует список поддерживаемых клиентом наборов шифров и вместо этого выбирает самый сильный из списка, заданного на сервере, для данного соединения. Если установлено значение 'off', сервер будет учитывать предпочтения клиента, что может привести к использованию более слабых шифров, если клиент их предпочитает. Эта директива особенно полезна для сохранения контроля над уровнем безопасности сервера, предотвращая понижение уровня шифрования клиентами во время процесса рукопожатия.

Пример конфига

ssl_prefer_server_ciphers on;

Убедитесь, что список наборов шифров правильно настроен; иначе это может привести к сбоям соединения, если не найдутся совместимые шифры.

Установка этой директивы в 'on' может привести к тому, что клиенты не смогут подключиться, если они не поддерживают предпочитаемые вами сильные шифры.

ssl_session_cache Директива `ssl_session_cache` задаёт кэш для параметров SSL-сессии, что ускоряет SSL‑рукопожатие.
httpserver
Синтаксисssl_session_cache shared: | none;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_session_cache` в NGINX задаёт механизм кэширования параметров SSL-сессии, что повышает производительность за счёт уменьшения накладных расходов при установлении SSL‑соединений. Кэшируя SSL-сессии, клиенты могут возобновлять соединения без полного выполнения SSL‑рукопожатия, что ускоряет процесс, особенно для повторных посетителей. Эту директиву можно задавать в контекстах `http` и `server`, что даёт гибкость в зависимости от того, как SSL применяется на различных серверах или локациях. Синтаксис `ssl_session_cache` допускает один или два параметра: тип кэша и, опционально, размер кэша. Тип кэша может быть `shared` или `none`, причём тип `shared` указывает, что кэш может использоваться несколькими рабочих процессами. При указании, размер определяет максимальное количество параметров сессии, хранимых в кэше, что существенно влияет на использование памяти и ёмкость. Поведение этого механизма кэширования зависит от размера и управления кэшем SSL‑сессий, что напрямую влияет на производительность SSL‑соединений для конечных пользователей. Когда клиент повторно подключается и предоставляет свой идентификатор сессии, NGINX может быстро получить сохранённые параметры сессии, если они не истекли, что позволяет серверу пропустить тяжёлые вычисления, связанные с установлением новой сессии. Это особенно полезно в сценариях с большим трафиком, когда критично снижать задержки для SSL‑соединений.

Пример конфига

http {
    ssl_session_cache shared:SSL:10m;
}

Убедитесь, что размер кэша соответствует вашему трафику; слишком маленький размер может привести к частым вытеснениям из кэша.

Если вы используете несколько server blocks, убедитесь, что они используют один и тот же named cache, если требуется совместное использование сессий между origin servers.

ssl_session_tickets Директива `ssl_session_tickets` управляет включением или отключением поддержки SSL session tickets в NGINX.
httpserver
Синтаксисssl_session_tickets on | off;
По умолчаниюon
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_session_tickets` в NGINX позволяет включать (или отключать) использование session tickets для SSL-соединений. Когда включено, NGINX будет использовать session tickets для безопасного возобновления SSL-сессий, сводя к минимуму необходимость клиентов проходить полный SSL-рукопожатие при последующих подключениях. Эта возможность может повысить производительность в средах с высоким трафиком, где клиенты часто переподключаются. Session tickets работают в связке с SSL session cache, позволяя возобновлять сессии без необходимости серверу хранить состояние каждой SSL-сессии. При первом подключении клиента к серверу он получит session ticket, который может быть использован в будущих подключениях для предъявления серверу. Когда сервер получает этот ticket, он может расшифровать его, чтобы получить информацию о сессии, не выполняя поиск сессии в памяти или кеше, тем самым ускоряя SSL-рукопожатие для клиента. Директива принимает флаговый параметр: он может быть установлен в 'on' или 'off'. При значении 'on' NGINX использует session tickets; при 'off' session tickets отключены. Стоит отметить, что session tickets должны быть корректно настроены на стороне сервера вместе с ключами для обеспечения безопасного шифрования и расшифровки этих session tickets, что помогает предотвращать атаки повторного воспроизведения или неправильное использование.

Пример конфига

server {
    listen       443 ssl;
    server_name  example.com;
    ssl_certificate     /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;

    ssl_session_tickets on;
}

Убедитесь, что на вашем сервере настроены правильные ключи шифрования для session tickets, чтобы надежно их защитить.

Отключение session tickets может привести к увеличению времени SSL handshake, так как клиенты не смогут легко возобновлять сессии.

Убедитесь, что session ticket key регулярно обновляется (ротация), чтобы поддерживать безопасность.

ssl_session_ticket_key Директива ssl_session_ticket_key устанавливает ключ session ticket для восстановления SSL-сессий в NGINX.
httpserver
Синтаксисssl_session_ticket_key value;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_session_ticket_key` имеет решающее значение для включения и управления поддержкой SSL session ticket в NGINX. Эта директива задаёт ключ, используемый для шифрования и расшифровки session ticket, что позволяет клиентам возобновлять SSL-сессии без полного рукопожатия. Директива предполагает определённую длину ключа для обеспечения безопасности, которая в идеале должна соответствовать алгоритму шифрования, используемому для session ticket. Важно отметить, что этот ключ должен храниться в тайне и обращаться с ним следует осторожно, поскольку его раскрытие или компрометация могут привести к уязвимостям в управлении SSL-сессиями. При запуске сервера ключ должен генерироваться безопасным образом, и его управление критически важно. Если ключ session ticket на сервере изменится, все сессии, установленные с использованием старого ключа, станут недействительными, и клиенты не смогут их возобновить. Поэтому рекомендуется периодически менять ключи session ticket, но делать это таким образом, чтобы минимизировать неудобства для клиентов. Директива `ssl_session_ticket_key` может использоваться как в контексте `http`, так и в контексте `server`, что делает её гибкой для применения в обеих областях. Чтобы динамически задавать или изменять ключи session ticket, NGINX позволяет несколько раз объявлять эту директиву с разными ключами в разных контекстах, хотя использование одного и того же ключа в разных конфигурациях может быть нежелательным, если это не строго контролируется. Кроме того, может потребоваться полная перезагрузка сервера, чтобы новые ключи вступили в силу, если они были изменены после запуска сервера.

Пример конфига

ssl_session_ticket_key /etc/ssl/nginx/ticket.key;

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

Изменение ключа сделает существующие сессии недействительными, в результате чего клиенты потеряют данные сессии.

Ключ должен иметь подходящий размер и формат, совместимые с SSL-настройкой сервера.

ssl_session_timeout Директива `ssl_session_timeout` задаёт период ожидания для кэширования SSL-сессий в NGINX.
httpserver
Синтаксисssl_session_timeout time;
По умолчанию1h
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_session_timeout` используется для указания временного интервала, в течение которого SSL-сессия должна храниться в кэше сервера. Когда клиент подключается по SSL, может быть установлена сессия, что улучшает производительность при последующих подключениях за счёт повторного использования параметров сессии вместо повторного согласования. Эта директива позволяет администраторам определить, как долго кэшированная сессия может оставаться действительной, прежде чем она будет признана истёкшей и удалена из кэша. Время может быть указано с единицей измерения, например `s` (секунды), `m` (минуты) или `h` (часы), и механизм кэширования существенно повышает эффективность SSL‑согласования, особенно для клиентов, которые часто подключаются к серверу. Директива может быть размещена в контексте `http` или `server` в конфигурации NGINX, что даёт гибкость в зависимости от того, должен ли таймаут применяться глобально или к конкретному блоку сервера. Правильная настройка этой директивы обеспечивает эффективное управление ресурсами и балансирует соображения безопасности, поскольку более короткие таймауты могут повышать безопасность ценой некоторого снижения производительности.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;
    ssl_session_timeout 30m;
}

Установка слишком малого времени ожидания сессии может привести к частым SSL-переговорам, что приведёт к ухудшению производительности.

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

ssl_crl Директива `ssl_crl` указывает файл списка отзыва сертификатов (CRL) для проверки отозванных SSL-сертификатов.
httpserver
Синтаксисssl_crl path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_crl` используется в NGINX при настройке SSL/TLS для указания файла, содержащего список отозванных сертификатов. Эта функция жизненно важна для поддержания защищённой связи, поскольку позволяет серверу проверить, был ли SSL-сертификат клиента отозван перед установлением соединения. Директива может быть размещена в блоке `http` или `server` в конфигурации NGINX, гарантируя, что указанный CRL будет использоваться в процессе SSL-рукопожатия. Когда клиент предоставляет свой сертификат, NGINX проверяет этот список наряду с другими политиками валидации сертификатов. Файл CRL, указанный в `ssl_crl`, должен иметь корректный формат и быть доступным для NGINX. Эта директива помогает избегать принятия сертификатов, которые больше не действительны, тем самым повышая общую безопасность приложения, блокируя потенциальных злоумышленников, которые могут использовать скомпрометированные учётные данные. Если файл CRL не найден или недоступен для чтения, это может привести к ошибкам во время SSL-рукопожатия, влияющим на пользователей, пытающихся получить доступ к сервису. Важно, что директива `ssl_crl` принимает только один аргумент — путь к файлу CRL. Рекомендуется поддерживать список в актуальном состоянии и активно мониторить статус сертификатов, чтобы обеспечить более безопасную среду для конечных пользователей. Использование CRL имеет и недостатки; например, они могут не обеспечивать обновления в реальном времени, если не выполняются вручную или не настроено частое обновление.

Пример конфига

http {
    server {
        ssl on;
        ssl_certificate /etc/ssl/certs/server.crt;
        ssl_certificate_key /etc/ssl/private/server.key;
        ssl_crl /etc/ssl/crl/ca.crl;
    }
}

Убедитесь, что файл CRL имеет корректный формат и доступен для NGINX.

Если путь, указанный в `ssl_crl`, неверен или файл недоступен для чтения, SSL-соединения могут не устанавливаться.

Поддерживайте файл CRL в актуальном состоянии, чтобы не отклонять действительные сертификаты.

ssl_ocsp Директива `ssl_ocsp` включает или отключает проверку протокола Online Certificate Status Protocol (OCSP) для SSL/TLS-соединений в NGINX.
httpserver
Синтаксисssl_ocsp on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_ocsp` используется для указания того, включён ли Online Certificate Status Protocol (OCSP) для SSL/TLS-сертификатов в NGINX. Когда OCSP включён, NGINX обращается к центру сертификации (CA) для проверки статуса отзыва SSL-сертификата, представленного клиентом, повышая безопасность за счёт принятия только действительных клиентских сертификатов. Директива действует в контекстах `http` и `server` конфигурации NGINX. При включении этой директивы NGINX будет пытаться проверять статус сертификатов в процессе SSL-рукопожатия. Такая проверка важна для обнаружения отозванных TLS-сертификатов. Если сертификат оказывается отозванным, соединение может быть завершено в соответствии с настройками сервера. Однако необходимо реализовывать эту функцию осторожно, поскольку зависимость от внешних OCSP-серверов может добавить задержки или привести к сбоям в работе SSL, если эти серверы недоступны. Кроме того, подразумевается, что при настройке сертификатов должен быть указан действующий OCSP responder URL. Директива принимает только один аргумент, указывающий, включать или отключать проверку OCSP. Эта директива может быть особенно важна для приложений с повышенными требованиями к безопасности, поскольку помогает предотвратить использование скомпрометированных сертификатов при эффективном управлении состоянием SSL клиентских соединений.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/private.key;
    ssl_ocsp on;
}

Убедитесь, что URL OCSP responder корректно настроен и доступен; в противном случае SSL handshakes могут не состояться.

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

Учитывайте последствия включения OCSP на серверах с высокой нагрузкой — частые сетевые запросы к OCSP серверам могут привести к ухудшению производительности.

ssl_ocsp_responder Директива ssl_ocsp_responder указывает URL ответчика OCSP для проверки отзыва SSL-сертификата.
httpserver
Синтаксисssl_ocsp_responder URL;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_ocsp_responder в NGINX используется для задания URL ответчика Online Certificate Status Protocol (OCSP), который должен применяться для проверки статуса отзыва SSL/TLS-сертификатов, представляемых сервером в процессе SSL-рукопожатия. Когда клиент подключается к серверу и устанавливает SSL/TLS-сессию, эта директива указывает NGINX проверить, является ли сертификат, представленный клиентом, по-прежнему действительным и не отозван ли он центром сертификации. Это важно для поддержания безопасности и целостности SSL-соединений, чтобы клиенты не доверяли отозванным сертификатам. Эту директиву можно определить в контексте http или server, что позволяет применять её глобально или на уровне конкретного виртуального сервера. Параметром этой директивы является одиночный URL, который должен быть действительной конечной точкой ответчика OCSP. Для реализации этой директивы требуется, чтобы библиотека OpenSSL была скомпилирована с поддержкой OCSP. NGINX будет использовать этот внешний OCSP-сервис для запроса статуса сертификата по мере необходимости в процессе SSL-рукопожатия. Ответ, полученный от ответчика OCSP, помогает определить, принять или отклонить сертификат клиента на основе его текущего статуса.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/privatekey.pem;
    ssl_ocsp_responder http://ocsp.example.com;
}

Убедитесь, что URL доступен с сервера, на котором запущен NGINX.

Проверьте, что ваша установка OpenSSL поддерживает OCSP; в противном случае эта директива не будет иметь эффекта.

OCSP responder должен быть правильно настроен и доступен в сети, чтобы отвечать на запросы.

ssl_ocsp_cache Директива `ssl_ocsp_cache` настраивает поведение кэширования ответов OCSP (Протокол онлайн-проверки статуса сертификата) в NGINX.
httpserver
Синтаксисssl_ocsp_cache zone;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_ocsp_cache` позволяет указать механизм кэширования ответов OCSP в NGINX. Когда ответ OCSP получен, он может быть сохранён в кэше, чтобы уменьшить количество запросов к серверу OCSP, что в свою очередь повышает производительность и надёжность. Директива должна быть задана в контексте `http` или `server` и принимает один аргумент, определяющий поведение кэша и длительность хранения. Аргумент задаёт параметры кэширования в формате, указывающем, как долго ответы OCSP должны храниться в кэше. По истечении этого времени ответ считается устаревшим, и будет выполнен новый запрос к серверу OCSP для проверки статуса отзыва сертификата. Это важно для обеспечения актуальной информации о статусе SSL/TLS сертификатов, используемых вашим приложением. Правильная настройка этой директивы может значительно улучшить производительность SSL в условиях высокой нагрузки, одновременно минимизируя накладные расходы, связанные с частыми запросами OCSP. Важно контролировать размер кэша, чтобы он соответствовал возможностям памяти вашего сервера, поскольку неправильно настроенный кэш может привести к увеличению задержек или дефициту памяти.

Пример конфига

ssl_ocsp_cache shared:ocsp_cache:10m;

Зона кэша должна быть определена до использования этой директивы; в противном случае она будет работать некорректно.

Если кэширование не включено или размер кэша слишком мал, это может привести к чрезмерному количеству запросов OCSP, что потенциально повлияет на производительность.

ssl_stapling Директива ssl_stapling включает или отключает OCSP (протокол онлайн-проверки статуса сертификата) stapling в NGINX.
httpserver
Синтаксисssl_stapling on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_stapling` в NGINX используется для управления использованием OCSP stapling — механизма, который позволяет серверу напрямую предоставлять клиентам помеченный временем ответ OCSP. Это устраняет необходимость для клиентов подключаться к OCSP responder для проверки статуса сертификата, что улучшает время отклика и повышает конфиденциальность. Директива принимает булев флаг в качестве аргумента, то есть её можно установить в 'on' для включения OCSP stapling или в 'off' для отключения. Когда функция включена, во время SSL handshake NGINX получает и кэширует последний ответ OCSP от центра сертификации при представлении сертификата. Если кэшированный ответ действителен, сервер включит этот ответ в сообщения SSL handshake, отправляемые клиенту. В противном случае сервер выполнит запрос к OCSP responder для получения свежего ответа. Поэтому крайне важно тщательно управлять политикой кэширования сервера и следить за тем, чтобы ответы OCSP не устаревали. Кроме того, реализация OCSP stapling зависит от наличия действительного SSL-сертификата, который это поддерживает, и обычно требует настройки соответствующих resolver-параметров для разрешения DNS для OCSP-серверов.

Пример конфига

server {
    listen       443 ssl;
    server_name  example.com;

    ssl_certificate     /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;

    ssl_stapling on;
    ssl_stapling_verify on;
}

Убедитесь, что ваш SSL-сертификат поддерживает OCSP stapling; в противном случае включение этой директивы может привести к ошибкам при установлении соединения.

Если разрешение DNS для OCSP responder не удаётся, клиенты могут столкнуться с ошибками SSL, несмотря на наличие действительного сертификата.

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

ssl_stapling_file Директива `ssl_stapling_file` указывает имя файла ответа OCSP, который будет использоваться для SSL stapling.
httpserver
Синтаксисssl_stapling_file path;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_stapling_file` в NGINX служит для включения OCSP (Online Certificate Status Protocol) stapling путём указания конкретного файла, содержащего ответ OCSP. Эта директива может быть размещена в контекстах `http` или `server`, что позволяет задавать поведение для всех виртуальных серверов или для отдельных серверов в соответствии с конфигурацией. Подавая файл с ответом OCSP, NGINX может прикреплять этот ответ к TLS-рукопожатиям, повышая производительность SSL-подключений за счёт уменьшения числа онлайн-проверок, которые необходимо выполнять. Параметр директивы `ssl_stapling_file` — одиночный аргумент, представляющий путь к файлу, содержащему сериализованные данные ответа OCSP. Этот файл должен быть сгенерирован CA (Certificate Authority) или другим доверенным посредником и регулярно обновляться, поскольку ответы OCSP обычно имеют срок действия. Важно следить за актуальностью ответа OCSP, чтобы клиенты могли эффективно проверять статус сертификата во время TLS-сессий. Если путь к файлу указан неверно или содержимое недействительно, NGINX запишет сообщение об ошибке и отключит OCSP stapling для этого сервера.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_stapling on;
    ssl_stapling_file /path/to/ocsp_response.der;
}

Убедитесь, что файл ответа OCSP регулярно обновляется; устаревшие ответы могут привести к тому, что клиенты отвергнут соединение.

Файл должен иметь правильные права доступа, чтобы NGINX мог его прочитать; в противном случае NGINX не сможет загрузить данные OCSP и отключит stapling.

Убедитесь, что файл ответа корректно отформатирован в соответствии со спецификацией OCSP. Неправильный формат может привести к ошибкам при разборе.

ssl_stapling_responder Директива 'ssl_stapling_responder' настраивает URL для получения ответов OCSP (Online Certificate Status Protocol) в процессе stapling.
httpserver
Синтаксисssl_stapling_responder URL;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'ssl_stapling_responder' в NGINX используется для указания URL, с которого можно получить ответы OCSP. Эта директива необходима для оптимизации процессов проверки сертификатов SSL/TLS, позволяя клиентам проверять статус отзыва сертификатов упрощённым образом. Задав URL ответчика, NGINX обеспечивает эффективное получение ответов OCSP, что улучшает производительность защищённых соединений за счёт сокращения времени, которое клиенты тратят на получение статуса своих сертификатов через множественные запросы к Certificate Authorities (CAs). На практике URL, заданный этой директивой, должен быть действительной конечной точкой OCSP сервера. Как правило, это HTTPS URL, поскольку ответы OCSP часто содержат конфиденциальную информацию о статусе действительности сертификата. Конфигурация 'ssl_stapling_responder' должна находиться в блоке 'http' или 'server', и её корректная настройка может значительно улучшить производительность SSL, особенно в средах с высоким трафиком. Также необходимо убедиться, что OCSP responder работает корректно и доступен, чтобы избежать прерываний сервиса или увеличения задержки соединений.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/privatekey.pem;
    ssl_stapling on;
    ssl_stapling_responder https://ocsp.example.com;
}

Убедитесь, что указанный URL доступен и правильно настроен как OCSP-сервер.

Использование non-HTTPS URLs может привести к раскрытию конфиденциальных данных при получении ответа OCSP.

Неправильно настроенные OCSP-респондеры могут привести к сбоям в TLS-рукопожатиях.

ssl_stapling_verify Директива `ssl_stapling_verify` включает проверку ответов OCSP (протокола онлайн-проверки статуса сертификата) для SSL/TLS-соединений.
httpserver
Синтаксисssl_stapling_verify on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

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

Пример конфига

server {
    ssl_certificate     /path/to/certificate.crt;
    ssl_certificate_key /path/to/key.key;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;  # DNS resolution for OCSP server
}

Убедитесь, что резолвер правильно настроен; в противном случае проверки OCSP могут завершаться с ошибкой из-за невозможности разрешить адрес сервера OCSP.

Если сервер OCSP недоступен, клиенты могут столкнуться с задержками или ошибками соединения из-за блокировки запросов на проверку.

ssl_early_data Директива `ssl_early_data` включает или отключает использование ранних данных TLS в NGINX.
httpserver
Синтаксисssl_early_data on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_early_data` управляет обработкой ранних данных в TLS 1.3-соединениях для NGINX. Ранние данные позволяют клиентам отправлять данные сразу после начала рукопожатия, что особенно выгодно в сценариях, когда клиент хочет отправить запрос до завершения рукопожатия, потенциально снижая задержку для таких операций, как HTTP/2 и QUIC. При включении клиент может отправить до 2^14 байт ранних данных на сервер при условии, что сервер настроен соответствующим образом для их обработки. Установка директивы в 'on' включает прием ранних данных, что требует осторожного подхода из-за возможных атак воспроизведения, поскольку ранние данные не гарантируют свежесть отправляемых данных. Для снижения связанных с этим рисков может потребоваться реализовать политики, например проверки идемпотентности на уровне приложения. Важно отметить, что не все клиенты могут поддерживать или корректно обрабатывать ранние данные, и их эффективность может варьироваться в зависимости от шаблонов трафика и сценариев использования веб‑приложения. Эта директива может использоваться в контекстах `http` и `server`, влияя на то, как согласовываются соединения и как обрабатываются ранние данные в ходе TLS-сеансов.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_early_data on;
}

Включение early data может подвергнуть приложение атакам воспроизведения; убедитесь, что идемпотентность корректно обрабатывается.

Не все клиенты поддерживают early data, что может привести к непоследовательному поведению при широком использовании на разных user agents.

ssl_conf_command Директива ssl_conf_command позволяет задавать конфигурации, связанные с SSL, для NGINX.
httpserver
Синтаксисssl_conf_command command parameter;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива ssl_conf_command используется для настройки параметров конфигурации SSL внутри блока server NGINX или в контексте HTTP. Она принимает два параметра: первый — это SSL-команда, которая будет выполнена, а второй — соответствующие аргументы для этой команды. Эта директива особенно полезна для применения специфических SSL-настроек, которые могут не покрываться стандартными директивами, или для тонкой настройки SSL-параметров в соответствии с требованиями приложения. Эта директива позволяет администраторам напрямую использовать OpenSSL команды, предоставляя тем самым мощные возможности для кастомизации. Ключевое преимущество — гибкость в динамическом управлении SSL-средой, адаптация к различным сценариям развёртывания без захардкоженных значений в файлах конфигурации. Правильное использование этой директивы гарантирует оптимизацию SSL-настроек с учётом требований по соответствию уровня безопасности и производительности. Кроме того, понимание соответствующих OpenSSL команд и их последствий имеет решающее значение при эффективном применении этой директивы. Разработчикам следует помнить, что неправильное использование директивы может привести к некорректной конфигурации, которая может поставить под угрозу безопасность или производительность. Поэтому крайне важно понимать последствия каждой команды, используемой в директиве, особенно относительно контекста, в котором действует SSL, например настроек на уровне HTTP или server.

Пример конфига

ssl_conf_command ssl_protocols TLSv1.2 TLSv1.3;

Убедитесь, что команда и параметры поддерживаются OpenSSL и совместимы с версией NGINX.

Некорректный синтаксис команды может привести к сбоям при запуске сервера или непредвиденному поведению.

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

ssl_reject_handshake Директива `ssl_reject_handshake` используется для управления тем, отклоняется ли SSL-рукопожатие на основании критериев, заданных в конфигурации.
httpserver
Синтаксисssl_reject_handshake on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ssl_reject_handshake` предоставляет механизм управления SSL-рукопожатиями, которые происходят, когда клиенты пытаются установить защищённое соединение с сервером. При включении эта директива влияет на поведение сервера при получении запроса на SSL-рукопожатие, конкретно отвергая попытку рукопожатия на основании заранее заданных правил или условий, установленных в конфигурации сервера. Эта директива может располагаться в контекстах `http` или `server` и принимает параметр-флаг. Флаг может принимать значения `on` или `off`, включая или отключая отказ в приёме SSL-рукопожатий соответственно. Когда директива установлена в `on`, любые клиентские запросы, не удовлетворяющие указанным критериям, будут немедленно прерваны, что предотвратит установление SSL-соединения. Эта функция особенно полезна администраторам сервера, желающим усилить безопасность, контролируя, какие клиенты могут инициировать SSL-рукопожатия на основании их характеристик или поведения. Важно настраивать эту директиву совместно с другими директивами управления доступом, такими как `allow` и `deny`, чтобы в полной мере использовать её возможности. Это обеспечивает прохождение рукопожатия только авторизованными клиентами, тем самым снижая риски, связанные с несанкционированным доступом и потенциальными уязвимостями во время SSL-переговоров.

Пример конфига

server {
    listen 443 ssl;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
    ssl_reject_handshake on;
}

Убедитесь, что SSL/TLS правильно включены в server block, где используется эта директива.

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

Учитывайте влияние на функциональность приложения при отклонении SSL-рукопожатий.

stub_status Директива 'stub_status' включает простую страницу мониторинга состояния для NGINX.
serverlocation
Синтаксисstub_status;
По умолчаниюnone
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива 'stub_status' предоставляет способ отображать базовую информацию о состоянии NGINX, включая активные соединения, количество принятых соединений, обработанные запросы и общее число запросов. Она требует location block в контексте server, где к ней можно получить доступ, обычно по определённому URI. Когда клиент обращается к настроенному URI, NGINX отвечает текущей информацией о состоянии в текстовом формате. Чтобы использовать 'stub_status', сначала необходимо определить location block внутри server block. Внутри этого location вы включаете 'stub_status' без дополнительных аргументов. Доступ к этой странице можно ограничить с помощью директив управления доступом, таких как 'allow' и 'deny', чтобы только определённые клиенты могли запрашивать страницу статуса. Когда включено, handler обрабатывает запросы к этому location и возвращает ответ с метриками, включая количество активных соединений, количество принятых соединений, обработанные запросы и общее число запросов, предоставляя ценные сведения для мониторинга и отладки производительности сервера NGINX.

Пример конфига

server {
    listen 80;
    location /nginx_status {
        stub_status;
        allow 127.0.0.1;  # Only allow local requests
        deny all;         # Deny all other requests
    }
}

Убедитесь, что элементы управления доступом ('allow' и 'deny') правильно настроены; в противном случае страница статуса может быть доступна неавторизованным пользователям.

Подтвердите, что блок location для 'stub_status' настроен корректно и не переопределяется другими директивами location.

Отслеживайте показатели производительности сервера безопасно; доступ к stub statuses без ограничений может привести к утечке информации.

sub_filter Директива sub_filter используется для изменения тела ответа путем подстановки одних строк другими.
httpserverlocation
Синтаксисsub_filter "search" "replace";
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива sub_filter позволяет динамически заменять строки в теле ответа HTTP-трафика, обслуживаемого NGINX. Это может быть особенно полезно для изменения содержимого на лету, например, адаптации ссылок или текста в зависимости от окружения или для целей локализации. Директива принимает два параметра: первый — это строка, которую необходимо найти в теле ответа, а второй — строка, которой её заменить. Каждый раз, когда NGINX обрабатывает ответ, он сканирует вывод на предмет вхождений указанной строки поиска и заменяет их на указанную строку замены перед отправкой ответа клиенту. Важно отметить, что директива sub_filter работает только если размер тела ответа меньше настроенного размера буфера и когда код ответа находится в диапазоне 200-299. Кроме того, директива поддерживает регулярные выражения для сопоставления строк, если директива 'sub_filter_types' правильно настроена. Это может помочь реализовать более сложные замен, но необходимо соблюдать осторожность и убедиться, что шаблоны регулярных выражений правильно экранированы и составлены, чтобы избежать непреднамеренных совпадений или ухудшения производительности из-за чрезмерного бэктрекинга в сложных шаблонах.

Пример конфига

location /example {
    sub_filter "example.com" "example.org";
    sub_filter_once off;
}

Убедитесь, что директива 'sub_filter_types' включает MIME-типы ответов, в которых необходимы подстановки, иначе директива может работать не так, как ожидается.

Подстановка происходит только если Content-Type ответа соответствует тем, что указаны в 'sub_filter_types', и код статуса ответа находится в диапазоне 200-299.

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

sub_filter_types Директива 'sub_filter_types' настраивает типы содержимого, к которым будут применяться замены в теле ответа в NGINX.
httpserverlocation
Синтаксисsub_filter_types mime_type ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'sub_filter_types' позволяет указать, какие MIME-типы должны обрабатываться для замены в теле ответа с помощью директивы 'sub_filter' в NGINX. По умолчанию тела ответов для определённых типов содержимого могут быть изменены в соответствии с пользовательскими заменами, например заменой одних строк на другие. Эта директива становится необходимой, когда вы хотите ограничить или контролировать, какие типы содержимого обрабатываются для таких замен, что может помочь оптимизировать производительность и использование ресурсов. Использование 'sub_filter_types' помогает предотвратить ненужную обработку типов содержимого, для которых замены не требуются, и может повысить эффективность работы сервера NGINX. Директива принимает один или несколько MIME-типов в качестве аргументов. Каждый тип указывается внутри директивы и может включать стандартные типы, такие как 'text/html', 'text/css', 'application/json' и т. п. Определённые типы в 'sub_filter_types' будут определять контекст, в котором действуют соответствующие директивы 'sub_filter', гарантируя, что будут изменены только подходящие ответы.

Пример конфига

http {
    sub_filter_types text/html text/css;
}

Если типы MIME не заданы, может применяться поведение по умолчанию, что приведёт к непреднамеренным подстановкам.

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

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

sub_filter_once Директива `sub_filter_once` контролирует, применяется ли замена только один раз в ответе или каждый раз, когда обнаруживается указанная подстрока.
httpserverlocation
Синтаксисsub_filter_once on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `sub_filter_once` используется в контексте NGINX `http`, `server` или `location` для определения поведения замен подстрок, выполняемых директивой `sub_filter`. Если установлено 'on', замена затрагивает только первое вхождение указанной строки в теле ответа. Напротив, если установлено 'off', `sub_filter` обработает все случаи подстроки, изменяя их в итоговом выводе. Это особенно полезно, когда присутствует несколько одинаковых строк и достаточно одной замены без изменения каждого вхождения — таким образом избегаются непреднамеренные искажения контекста ответа. Эта директива принимает логическое значение ('on' или 'off'). По умолчанию обычно установлено `off`, что означает разрешение множественных замен, если не указано иное. Для работы `sub_filter_once` требуется включение модуля `sub` в NGINX, что критично для корректного функционирования директивы. Дополнительно необходимо правильно настроить `sub_filter`, чтобы заранее определить конкретные подстроки для замены перед применением одиночных или множественных замен в соответствии с настройкой `sub_filter_once`.

Пример конфига

sub_filter 'old_text' 'new_text';
sub_filter_once on;

Убедитесь, что директива sub_filter используется вместе с sub_filter_once; сама по себе она неэффективна.

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

Использование sub_filter_once при высокой нагрузке может повлиять на производительность из-за дополнительных проверок наличия вхождений подстановки.

sub_filter_last_modified Директива sub_filter_last_modified позволяет управлять заголовком Last-Modified проксируемых ответов.
httpserverlocation
Синтаксисsub_filter_last_modified on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'sub_filter_last_modified' является частью HTTP-ядра NGINX и используется в контексте блоков http, server или location. Эта директива, при включении, инструктирует NGINX добавлять заголовок Last-Modified к ответам, которые он отдает после применения замен sub_filter. Директива требует флага, определяющего поведение при манипуляции заголовком. Если флаг установлен в 'on', она добавит или изменит заголовок Last-Modified в upstream-ответе, что особенно полезно для динамически генерируемого контента, требующего отметки времени для механизмов кэширования.

Пример конфига

location /example {
    sub_filter last_modified on;
    proxy_pass http://backend;
}

Убедитесь, что директива 'sub_filter' включена, поскольку 'sub_filter_last_modified' изменяет заголовки только для ответов, в которых выполняются замены.

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

try_files Директива `try_files` пытается обслуживать файлы из указанных путей, при отсутствии файлов возвращаясь к заданному URI.
serverlocation
Синтаксисtry_files file1 [file2 ...] fallback_uri;
По умолчаниюnone
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива `try_files` используется в NGINX для указания списка путей к файлам, которые NGINX будет проверять на наличие по порядку, чтобы обслужить запрос. Она может принимать несколько аргументов, представляющих пути к файлам или URI, которые NGINX будет пытаться отдать по очереди. Если NGINX находит файл, существующий по одному из указанных путей, он отдаёт этот файл. Если ни один из указанных файлов не существует, NGINX может перейти к обслуживанию предопределённого URI, что полезно для маршрутизации запросов к другому обработчику. Синтаксис требует как минимум двух аргументов: списка путей для проверки и как минимум одного резервного URI. Директива будет последовательно проверять каждый путь, пока не найдёт существующий файл. Если ни один из указанных файлов не найден, используется последний аргумент, который должен быть URI. Это позволяет аккуратно обрабатывать отсутствующие файлы, переходя на страницы ошибок или перенаправляя на несуществующие маршруты, например, для SPA-фреймворка. Директива `try_files` особенно хорошо работает в locations, где распространена перезапись URL, например в одностраничных приложениях или при динамически управляемых файлах. Используя порядок файлов, передаваемых в `try_files`, разработчики могут создавать гибкие ответы в зависимости от доступности конкретных ресурсов на диске или указанных URI.

Пример конфига

location / {
    try_files $uri $uri/ /index.php;
}

Убедитесь, что задан fallback URI; в противном случае при отсутствии файлов может возникнуть ошибка 404.

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

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

hash Директива 'hash' задает алгоритм хеширования, используемый для распределения запросов на upstream-серверы в NGINX.
upstream
Синтаксисhash key [algorithm];
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива 'hash' используется в контексте 'upstream' для определения алгоритма хеширования для распределения клиентских запросов по заданным upstream-серверам. Этот механизм позволяет NGINX управлять балансировкой нагрузки между несколькими backend-службами на основе хеша ключа, которым обычно является IP-адрес или другие указанные данные. Директива может принимать один или два аргумента. Первый аргумент — это ключ, который хешируется, а необязательный второй аргумент позволяет указать конкретный алгоритм (например, 'consistent'). Поведение по умолчанию использует простой алгоритм хеширования, но указание алгоритма может дать детерминированные результаты, улучшающие сохранность сессий. При использовании директивы 'hash' следует учитывать различные факторы, такие как количество upstream-серверов и требования к аффинности сессий, для обеспечения оптимальной производительности. Директива гарантирует, что запросы от одного и того же клиента (на основе ключа хеша) последовательно направляются на один и тот же upstream-сервер, что особенно полезно для приложений с сохранением состояния, которые зависят от того, что данные сессии хранятся локально на конкретном сервере.

Пример конфига

upstream backend {
    hash $remote_addr;
    server backend1.example.com;
    server backend2.example.com;
}

При использовании нестандартного hash algorithm убедитесь в совместимости с вашими upstream server configurations.

Ошибочные настройки session persistence могут привести к неравномерному load distribution или повышенной задержке.

Не забудьте проверить client key selection, чтобы предотвратить hash collisions, которые могут негативно повлиять на load balancing behavior.

ip_hash Директива `ip_hash` обеспечивает сохранение сессий, направляя запросы с одного и того же IP-адреса клиента на один и тот же сервер в группе upstream.
upstream
Синтаксисip_hash;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива `ip_hash` используется в контексте блока `upstream` в конфигурации NGINX для обеспечения стабильного балансирования нагрузки на основе IP-адресов клиентов. Включив `ip_hash`, NGINX вычисляет хеш от IP-адреса клиента, чтобы определить, какой сервер внутри группы upstream должен обработать запрос. Это означает, что пользователь с одним и тем же IP будет всегда направляться на один и тот же бэкенд-сервер в течение сессии, что позволяет поддерживать состояние сессий без необходимости привязки через файлы cookie. Маршрутизация запросов осуществляется применением хеш-функции к IP-адресу клиента, что гарантирует, что IP-адреса последовательно разрешаются в один и тот же сервер. Если запрос исходит от другого клиента (по IP), он может быть направлен на другой сервер из набора upstream. Эта возможность особенно полезна для поддержания согласованности сессий в приложениях, которые сами по себе не управляют сессиями и чувствительны к выбору сервера. Следует иметь в виду, что в окружениях, где клиенты находятся за прокси или балансировщиками нагрузки, потребуется корректная конфигурация `real_ip` или соответствующая обработка, чтобы использовать правильный IP-адрес клиента для хеширования.

Пример конфига

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

Убедитесь, что upstream servers способны обрабатывать сессии независимо, так как `ip_hash` не разделяет состояние между серверами.

Использование `ip_hash` может привести к неравномерному распределению нагрузки между серверами, особенно в случаях, когда некоторые IPs отправляют больше трафика, чем другие.

keepalive Директива `keepalive` позволяет поддерживать HTTP keepalive‑соединения в контексте upstream.
upstream
Синтаксисkeepalive number;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива `keepalive` в NGINX используется внутри блоков `upstream` для управления максимальным количеством неактивных keepalive‑соединений к upstream серверам. Когда keepalive‑соединения включены, NGINX может переиспользовать существующие соединения с upstream серверами для нескольких запросов вместо открытия новых соединений каждый раз, что может повысить производительность и уменьшить задержку. Эта функциональность особенно полезна при высоких нагрузках, так как снижает накладные расходы, связанные с частым установлением и разрывом соединений. Директива принимает один аргумент, который задаёт максимальное количество неактивных соединений, которые могут поддерживаться к upstream серверам. Если поступает запрос, который превышает это число, NGINX закроет наименее недавно использовавшееся неактивное соединение, чтобы освободить место для нового. Важно настраивать этот параметр с учётом ресурсов сервера и ожидаемых шаблонов трафика. Установка слишком малого значения может привести к неэффективности из‑за частых переподключений, в то время как слишком большое значение может привести к исчерпанию ресурсов. В целом использование директивы `keepalive` рекомендуется в конфигурациях NGINX, которые предполагают взаимодействие с upstream серверами, поскольку это способствует более эффективному использованию ресурсов и сокращению времени отклика. Также целесообразно мониторить влияние на производительность после внесения изменений, чтобы обеспечить оптимальные параметры.

Пример конфига

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    keepalive 16;
}

Убедитесь, что upstream-серверы поддерживают keepalive-соединения; в противном случае это может привести к обрывам соединений.

Слишком большое значение может исчерпать системные ресурсы, что приведёт к проблемам с производительностью.

keepalive_time Директива keepalive_time задаёт время, в течение которого существующее соединение в upstream может оставаться неактивным до его закрытия.
upstream
Синтаксисkeepalive_time time;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива keepalive_time указывает максимальную продолжительность, в течение которой простаивающее keep-alive соединение с upstream сервером должно поддерживаться перед закрытием. Это помогает оптимизировать использование ресурсов, предотвращая накопление неиспользуемых соединений и тем самым позволяя лучше управлять максимальным количеством соединений, доступных серверу. Когда указанный в keepalive_time период истечёт, соединение будет закрыто, что может помочь освободить ресурсы для новых запросов. Эта директива особенно полезна в сценариях с высокой нагрузкой и множеством краткоживущих соединений, обеспечивая эффективное повторное использование соединений без перегрузки ресурсов сервера. Используя директиву keepalive_time, администраторы могут балансировать нагрузку и поддерживать состояние соединений в соответствии с потребностями приложения. Важно учитывать влияние на производительность при определении значения этой директивы — слишком короткий тайм-аут может увеличить накладные расходы на установление соединений, тогда как слишком длинный тайм-аут может привести к недоиспользованию ресурсов. Директива принимает один аргумент, который задаёт длительность в секундах, на которую соединение будет поддерживаться в состоянии простоя.

Пример конфига

upstream backend {
    keepalive_time 60;
}

Установка очень малого значения keepalive_time может привести к увеличению задержки из-за частого открытия и закрытия соединений.

Если keepalive_time не настроен правильно, это может привести либо к исчерпанию ресурсов, либо к недоиспользованию в зависимости от рабочей нагрузки.

Убедитесь, что заданный timeout соответствует ожиданиям клиента по стабильности соединения.

keepalive_timeout Директива keepalive_timeout задаёт таймаут для keep-alive соединений с upstream servers.
upstream
Синтаксисkeepalive_timeout timeout;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива keepalive_timeout в NGINX необходима для управления постоянными соединениями между сервером NGINX и upstream servers (например, серверами приложений). Настроив эту директиву, администраторы могут указать, как долго неактивное соединение должно оставаться открытым перед его закрытием. Это помогает оптимизировать использование ресурсов сервера и может повысить производительность приложения, снижая накладные расходы на установку новых TCP‑соединений для каждого запроса. Директива принимает один аргумент, который указывает длительность таймаута keep-alive в секундах. Если соединение остаётся неактивным дольше этого времени, оно будет закрыто, что позволит серверу освободить ресурсы. Это особенно полезно в высоконагруженных средах, где эффективное управление keep-alive соединениями может привести к существенным улучшениям производительности. На практике установка слишком низкого значения этого таймаута может привести к увеличению накладных расходов, так как клиентам придётся часто восстанавливать соединения. Напротив, слишком большое значение может привести к исчерпанию ресурсов, если слишком много неактивных соединений будет поддерживаться. Рекомендуется подобрать сбалансированное значение на основе особенностей вашего приложения и характера трафика.

Пример конфига

upstream backend {
    keepalive_timeout 65;
}

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

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

keepalive_requests Директива `keepalive_requests` ограничивает количество запросов, которые могут быть отправлены по одному постоянному соединению (keepalive).
upstream
Синтаксисkeepalive_requests number;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива `keepalive_requests` настраивается в контексте блока `upstream`, что позволяет задать ограничение на количество запросов, которые могут быть отправлены через одно постоянное соединение (keepalive) к backend-серверу. Эта функция помогает предотвратить монополизацию ресурсов одним соединением и обеспечивает более эффективное управление подключениями, особенно в сценариях с высокой нагрузкой, когда типично много одновременных запросов. Задав значение `keepalive_requests`, вы можете определить, сколько запросов допустимо на keepalive-соединении. Например, если установить его в 10, то после выполнения 10-го запроса NGINX закроет это соединение и при необходимости откроет новое для последующих запросов. Это не только помогает сбалансировать использование ресурсов, но и гарантирует, что backend-серверы не будут перегружены длительно удерживаемыми соединениями, которые могут мешать производительности. Параметр должен быть положительным целым числом, и при выборе его значения следует внимательно учитывать конкретные потребности вашего приложения. Меньшее значение может привести к более частым установкам соединений, но к меньшему удержанию ресурсов, в то время как большее значение может повысить пропускную способность, однако за ним следует следить на предмет возможного исчерпания ресурсов или перегрузки сервера.

Пример конфига

upstream backend {
    keepalive 16;
    keepalive_requests 100;
    server backend1.example.com;
    server backend2.example.com;
}

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

Неправильное использование keepalive‑соединений с `keepalive_requests` может вызвать снижение производительности при высокой нагрузке.

least_conn Директива 'least_conn' в NGINX выбирает сервер с наименьшим количеством активных соединений в группе upstream.
upstream
Синтаксисleast_conn;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива 'least_conn' используется в контексте 'upstream' для реализации метода балансировки нагрузки, который направляет входящие запросы на экземпляр сервера с наименьшим числом активных соединений. Такое поведение обеспечивает более равномерное распределение нагрузки между серверами, что особенно полезно в сценариях, где разные серверы могут иметь различную вычислительную мощность или при обработке запросов с разной интенсивностью использования ресурсов. Эта директива идеально подходит для приложений с переменным пользовательским спросом, предотвращая перегрузку одних серверов, пока другие остаются недогруженными. В отличие от round-robin или других методов, которые могут распределять запросы последовательно или случайным образом, 'least_conn' динамически оценивает текущее состояние каждого сервера в блоке upstream и выбирает сервер на основе числа активных соединений. Когда указана директива 'least_conn', NGINX не учитывает время ответа сервера или природу запросов, а просто отдаёт приоритет на основе текущей нагрузки, выраженной числом соединений. Это полезная стратегия для максимизации эффективности распределения ресурсов в веб-ферме, особенно при работе с долговременными соединениями или приложениями с сильно варьирующейся длительностью сессий.

Пример конфига

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
}

Убедитесь, что upstream-серверы надлежащим образом мониторятся на предмет состояния; если сервер недоступен или неисправен, он может не быть исключён из подсчёта соединений, что приведёт к неэффективному распределению нагрузки.

Неэффективно в сценариях, когда у всех серверов одинаковое количество соединений; следует учитывать другие факторы для более эффективного распределения нагрузки.

random Директива 'random' указывает, что метод балансировки нагрузки, используемый в upstream block, будет случайным образом выбирать server.
upstream
Синтаксисrandom;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива 'random', используемая в контексте upstream, позволяет NGINX реализовать балансировку нагрузки, случайным образом выбирая, на какой server направить запросы из доступного пула upstream servers. Эта директива улучшает распределение входящих запросов, обеспечивая, что ни один server не будет перегружен последовательными запросами. При активации директива 'random' работает вместе с уже определёнными в конфигурации upstream servers, случайно выбирая один из них для каждого запроса. Этот процесс выбора осуществляется внутренним алгоритмом, который использует генератор случайных чисел для выбора server из пула каждый раз, когда запрос попадает в upstream block. Директива не принимает аргументов и поэтому действует исключительно на основании своего присутствия в определении upstream. Ещё один важный аспект заключается в том, что этот метод не учитывает загрузку или состояние здоровья server, что может сделать его менее предпочтительным в сценариях, где лучше подходит более интеллектуальный метод балансировки нагрузки, например 'least_conn' или 'ip_hash'. Следовательно, хотя использование директивы 'random' может помочь равномерно распределять запросы при лёгких нагрузках, администраторам следует учитывать её ограничения в средах с высокой нагрузкой, где производительность server существенно варьируется.

Пример конфига

upstream backend {
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    random;
}

Использование 'random' может привести к неравномерной нагрузке на серверы при большом трафике, если у серверов различная производительность.

Обязательно сочетайте 'random' с проверками работоспособности для более отказоустойчивой конфигурации.

zone Директива 'zone' определяет зону разделяемой памяти для данных состояния сессий в NGINX.
upstream
Синтаксисzone name zone_size;
По умолчаниюnone
Контекстupstream
МодульNGINX HTTP Core

Описание

Директива 'zone' в первую очередь используется в контексте upstream и помогает управлять разделяемой памятью для переменных, используемых в нескольких запросах. Она создаёт зону разделяемой памяти, к которой могут обращаться разные процессы NGINX, что необходимо для хранения данных сессий или информации о соединениях. \n\nДиректива принимает один или два аргумента: имя зоны разделяемой памяти и необязательный размер. Выделенная память может хранить различные данные, связанные с сессиями, что позволяет NGINX более эффективно обрабатывать такие функции, как балансировка нагрузки и проверки состояния. Каждую zone можно настроить с определённым размером, чтобы учесть ожидаемое количество одновременно активных сессий. Если размер слишком мал, это может привести к непредвиденному поведению, например к потере или неправильной обработке сессий.\n\nПри определении zone NGINX выделяет указанное количество памяти из системы. Память зоны поддерживается между рабочими процессами, что позволяет данным сессий оставаться доступными и согласованными вне зависимости от того, какой процесс обрабатывает запрос. Поэтому директива 'zone' особенно полезна для приложений, требующих высокой доступности и низкой задержки, таких как сценарии с привязкой сессий, механизмы кэширования или другие сценарии совместного хранения состояния.

Пример конфига

upstream backend {
    zone my_zone 64k;
    server backend1.example.com;
    server backend2.example.com;
}

Убедитесь, что размер zone достаточен для потребностей вашего приложения; слишком маленький размер zone может привести к потере данных.

В каждом контексте должна быть определена только одна директива 'zone', чтобы избежать конфликтов.

userid Директива 'userid' в NGINX используется для установки идентификатора пользователя для рабочего процесса, обрабатывающего запрос.
httpserverlocation
Синтаксисuserid user_id;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'userid' является частью NGINX HTTP Core module и предназначена для настройки идентичности пользователя, под которой рабочие процессы обрабатывают запросы. Эту директиву можно указывать в контексте 'http', 'server' или 'location', что позволяет тонко настраивать права пользователей и безопасность. При использовании директивы NGINX переключает идентичность пользователя на указанного пользователя при выполнении запроса. Это повышает безопасность, гарантируя, что веб-сервер работает с минимально необходимыми привилегиями. Например, запуск NGINX от имени не root-пользователя ограничивает потенциальный ущерб в случае нарушения безопасности. Директива принимает аргумент, задающий идентификатор пользователя в числовом формате. Важно, чтобы указанный пользователь имел соответствующие права доступа к ресурсам, требуемым приложением. Кроме того, имейте в виду, что изменение идентификатора пользователя во время обработки запросов может привести к проблемам с правами, если конфигурация неверна. Указанный идентификатор пользователя должен соответствовать существующим пользователям на сервере, чтобы NGINX работал без ошибок.

Пример конфига

http {
    userid www-data;
}

Убедитесь, что указанный пользователь существует на сервере.

Будьте осторожны: при обращении к файлам или каталогам новым пользователем могут возникать ошибки прав доступа.

Изменение идентификаторов пользователей во время обработки запросов может привести к проблемам, если права доступа настроены неправильно.

userid_service Директива `userid_service` позволяет указать сервис для сопоставления идентификаторов пользователей в NGINX.
httpserverlocation
Синтаксисuserid_service URL;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_service` предназначена для включения и настройки сервисов, которые предоставляют сопоставление идентификаторов пользователей (UID) для запросов, обрабатываемых NGINX. Она особенно актуальна, когда требуется сопоставлять идентичности пользователей из одной системы в другую — часто это необходимо в мультиарендных конфигурациях, где приложения должны поддерживать разделение пользователей. При настройке этой директивы одним из основных аргументов является конечная точка сервиса. Сервис обычно взаимодействует с внешними системами для аутентификации пользователей и получения их UID на основании предоставленных учетных данных. Директиву можно задавать в разных контекстах, включая http-, server- или location-блоки, что позволяет применять как глобальные, так и специфические настройки в зависимости от потребностей развертываемого приложения. Необходимо учитывать возможное поведение: если указанный сервис недоступен или возвращает ошибку при получении UID, процесс NGINX должен корректно обработать это, чтобы не ухудшить пользовательский опыт. Поэтому при развертывании этой директивы в рабочей среде важно правильно настраивать обработку ошибок и резервные механизмы.

Пример конфига

http {
    userid_service http://auth.example.com/get_user_id;
}

Убедитесь, что URL сервиса доступен с сервера NGINX; в противном случае запросы могут завершаться с ошибкой.

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

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

userid_name Директива `userid_name` задаёт имя пользователя, которое будет возвращено в заголовке HTTP-ответа.
httpserverlocation
Синтаксисuserid_name name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_name` в NGINX является частью основного модуля HTTP и позволяет задать конкретное имя пользователя в заголовках HTTP-ответа. Основное назначение этой директивы — предоставить информацию об аутентифицированном пользователе, что может быть особенно полезно для логирования или отладки. Она принимает один аргумент — имя пользователя, которое будет включено в заголовок. Когда NGINX обрабатывает запрос и используется директива `userid_name`, она автоматически добавляет указанное имя пользователя в заголовки ответа. Эта функциональность может быть критически важна для приложений, которым необходимо отслеживать действия пользователей, или для реализаций, где идентичность пользователя должна проверяться сервисом, зависящим от HTTP-заголовков. Директива может быть задана в контекстах `http`, `server` или `location`, что обеспечивает гибкость её применения на разных уровнях конфигурации. Учитывайте, что при задании этой директивы требуется осторожность, особенно в общедоступных средах, поскольку раскрытие идентичности пользователей в заголовках ответа может представлять риск для безопасности при неправильном обращении. Важно оценить, уместна ли информация, передаваемая через `userid_name`, для вашего приложения и его пользователей.

Пример конфига

http {
    userid_name "example_user";

    server {
        location / {
            proxy_pass http://backend;
        }
    }
}

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

Учтите последствия раскрытия имён пользователей в HTTP-заголовках для клиента.

Неправильное размещение директивы в неподходящем контексте (http, server или location) может привести к ошибкам.

userid_domain Директива `userid_domain` задаёт домен для функции `userid` в NGINX, позволяя связывать идентификаторы сессий с определённым доменом.
httpserverlocation
Синтаксисuserid_domain domain_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_domain` используется в HTTP‑ядре модуля NGINX для определения конкретного домена, который должен быть ассоциирован с идентификаторами сессий, создаваемыми функцией `userid`. Эта директива применима в контекстах `http`, `server` и `location`, позволяя веб‑администраторам указать домен для привязки cookie, что обеспечивает корректную обработку управления сессиями между различными поддоменами или внутри одного домена. При установке `userid_domain` NGINX будет добавлять указанный домен в cookie сессии, что важно для приложений, зависящих от согласованности сессий и аутентификации пользователей. Гарантируя, что cookie ограничены целевым доменом, директива помогает эффективно управлять пользовательскими сессиями, повышая безопасность и качество пользовательского опыта. Домен должен быть действительным и может включать поддомены, что делает директиву гибкой для различных архитектур развёртывания. Директива принимает один аргумент — имя домена (например, "example.com"). Крайне важно, чтобы указанный домен соответствовал реальному сценарию использования, чтобы избежать проблем с управлением сессиями, особенно при переходах пользователей между поддоменами. Эта директива также напрямую влияет на поддержание сессий пользователей и является неотъемлемой частью модели безопасности приложений, работающих на NGINX.

Пример конфига

http {
    userid_domain example.com;
}

Убедитесь, что указанный домен действителен и имеет правильный формат.

Если директива не задана, это может привести к проблемам с идентификаторами сессий или уязвимостям безопасности.

Смена домена может нарушить текущие пользовательские сессии. Обязательно уведомите пользователей, если сессии будут прерваны. Проведите достаточное тестирование перед развертыванием.

userid_path Директива `userid_path` задаёт путь для хранения идентификаторов пользователей (UID), создаваемых системой аутентификации.
httpserverlocation
Синтаксисuserid_path path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_path` в NGINX в первую очередь используется для определения каталога, в котором сохраняются файлы сессий, специфичные для пользователя. Когда обрабатывается запрос и требуется аутентификация пользователя, NGINX генерирует уникальный идентификатор пользователя (UID), связанный с аутентифицированной сессией. Указав `userid_path`, администраторы могут контролировать, куда эти файлы сессий записываются и хранятся в файловой системе, что упрощает управление, контроль доступа и организацию данных сессий пользователей. Эта директива обычно используется в контекстах конфигурации, включая `http`, `server` и `location`. Успешная работа директивы зависит от указания действительного пути в файловой системе в качестве её аргумента. Важно убедиться, что процесс NGINX имеет права на запись в указанный каталог, чтобы избежать ошибок выполнения, связанных с обработкой файлов. Кроме того, рекомендуется выбирать путь, соответствующий политике организации по хранению конфиденциальных данных и правам доступа. Понимание последствий одновременного доступа к сессиям и очистки устаревших файлов сессий может помочь в оптимизации производительности и надежности обработки пользовательских сессий в NGINX. После настройки NGINX будет автоматически создавать и управлять этими файлами сессий на основе активности пользователей и настроек времени жизни сессии.

Пример конфига

userid_path /var/run/nginx/userids;

Убедитесь, что указанный путь доступен для записи рабочими процессами NGINX.

Следите за правами доступа к файлам, чтобы предотвратить несанкционированный доступ к файлам сессий.

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

userid_expires Задает период, в течение которого файлы cookie с идентификатором пользователя будут действительны.
httpserverlocation
Синтаксисuserid_expires time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_expires` в NGINX используется для указания времени истечения срока действия файлов cookie с идентификатором пользователя, что может помочь в сохранении пользовательских сессий при перезапуске сервера. Она принимает один аргумент, который задаёт длительность, в течение которой cookie активен. По истечении этого времени файл cookie идентификатора пользователя станет недействительным, и пользователю потребуется повторная аутентификация при возврате на сайт. Эта директива влияет как на управление сессиями, так и на безопасность, поскольку корректный выбор времени истечения критичен для поддержания целостности пользовательских сессий и минимизации рисков устаревших сессий. Значение директивы `userid_expires` может быть указано в различных форматах времени, таких как секунды, минуты, часы или дни, и должно быть положительным целым числом с допустимой единицей времени. Для применения этой директивы её можно разместить в определённых контекстах, таких как `http`, `server` или `location`, что позволяет задавать индивидуальные настройки для разных частей конфигурации NGINX. Важно отметить, что установка слишком длительного периода истечения может ослабить безопасность, так как это может позволить несанкционированный доступ к сессиям, если файл cookie пользователя будет скомпрометирован.

Пример конфига

http {
    userid_expires 30m;
}

Убедитесь, что значение времени указано правильно; некорректный формат может привести к тому, что NGINX не примет директиву.

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

userid_flags Директива `userid_flags` задаёт флаги для определения идентификаторов пользователей в контексте HTTP-запроса.
httpserverlocation
Синтаксисuserid_flags flag1 [flag2] [flag3];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_flags` используется для управления поведением отслеживания идентификаторов пользователей в NGINX. Она позволяет пользователю указать различные флаги, которые определяют, как идентификаторы пользователей управляются во время запросов. Предоставляя от одного до трёх аргументов, пользователи могут тонко настроить стратегии контроля доступа и логирования запросов на основе идентификаторов пользователей. Флаги могут использоваться в контекстах `http`, `server` и `location`, что даёт гибкость в выборе места их применения в конфигурационном файле. При использовании параметры директивы могут включать опции для включения или отключения конкретных функций, связанных с отслеживанием идентификаторов пользователей. Точное значение каждого флага может зависеть от конкретной версии NGINX и опций сборки, поэтому рекомендуется обращаться к официальной документации NGINX для используемой версии. Правильное использование этой директивы может повысить общую безопасность и управление пользовательскими сессиями, обеспечивая доступ к указанным ресурсам только авторизованным пользователям, что особенно важно при работе с конфиденциальными данными или приложениями, требующими аутентификации пользователей.

Пример конфига

http {
    userid_flags log, track;
}

server {
    location / {
        userid_flags log;
    }
}

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

Некорректное использование флагов может привести к непредвиденному поведению при отслеживании пользователей.

Важно проверить, что директива размещена в правильном контексте (http, server или location).

userid_p3p Директива `userid_p3p` задаёт политику P3P (Платформа предпочтений конфиденциальности) для разрешения идентификации пользователей с помощью cookies.
httpserverlocation
Синтаксисuserid_p3p "policy-string";
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `userid_p3p` является частью модуля NGINX HTTP Core и используется в контекстах, таких как `http`, `server` и `location`. Она указывает NGINX включать заголовок `P3P` в HTTP-ответ, который содержит информацию о том, как могут использоваться данные пользователей, такие как cookies. Это особенно важно для требований по защите конфиденциальности и предназначено для обеспечения пользователям большей прозрачности и контроля над их персональными данными. Директива принимает один аргумент: строку, представляющую определение политики P3P. Когда директива `userid_p3p` настроена, NGINX генерирует заголовок `P3P` в HTTP-ответе. Этот заголовок информирует user agents (browsers) о практике обработки данных сайта, что может повлиять на то, как cookies принимаются этими агентами. Аргумент директивы задаёт строку политики, которая может содержать несколько атрибутов, описывающих политику в отношении идентификации пользователей и доступа третьих сторон. Важно отметить, что хотя эта директива может помочь соответствовать стандартам конфиденциальности, P3P вышла из употребления из‑за ограниченного распространения и поддержки в веб-браузерах. Поэтому полагаться исключительно на эту директиву для обеспечения конфиденциальности пользователей следует с осторожностью и дополнять её более современными мерами защиты конфиденциальности.

Пример конфига

userid_p3p "CP="CAO PSA OUR";";

Убедитесь, что строка политики правильно отформатирована, чтобы предотвратить некорректные заголовки.

Учтите, что многие современные браузеры не полностью поддерживают P3P, что может приводить к непоследовательному поведению.

Тестирование следует проводить в различных браузерах, чтобы проверить ожидаемую обработку cookies.

userid_mark Директива 'userid_mark' используется для установки уникального идентификатора для отслеживания пользователей в NGINX.
httpserverlocation
Синтаксисuserid_mark string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'userid_mark' позволяет администраторам задавать строку, которая будет ассоциироваться с сессией пользователя. Этот идентификатор может использоваться для отслеживания взаимодействий пользователя или его состояния между несколькими запросами. Директива особенно полезна для анализа поведения пользователей, управления сессиями или интеграции с инструментами аналитики. Установив этот уникальный идентификатор, NGINX может поддерживать непрерывность пользователя в различных приложениях, таких как веб-приложения или утилиты отслеживания. При конфигурации 'userid_mark' будет добавляться в заголовки каждого запроса, обрабатываемого NGINX. Она принимает один аргумент, который задаёт сам маркер, и может быть включена в контексты 'http', 'server' или 'location' для контроля области действия идентификатора. Эта гибкость конфигурации позволяет осуществлять как глобальное, так и локализованное отслеживание пользователей. Кроме того, поскольку эта директива работает с идентификаторами пользователей, необходимо учитывать вопросы конфиденциальности и защиты пользовательских данных. Следует позаботиться о том, чтобы идентификаторы были анонимны и не раскрывали лично идентифицируемую информацию (PII).

Пример конфига

http {
    userid_mark "$session_id";
    server {
        location / {
            # additional configuration
        }
    }
}

Убедитесь, что переданный аргумент не содержит пробельных символов, так как это может привести к непредвиденному поведению.

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

uwsgi_pass Директива `uwsgi_pass` перенаправляет запросы на сервер приложений uWSGI.
locationif in location
Синтаксисuwsgi_pass URL;
По умолчаниюnone
Контекстlocation, if in location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_pass` используется в конфигурациях NGINX для указания адреса сервера uWSGI, обеспечивая связь между NGINX и приложениями uWSGI. Когда поступает запрос, соответствующий указанному location-блоку, NGINX пересылает данные запроса на заданный сервер uWSGI, используя либо TCP-сокет, либо Unix-доменный сокет, в зависимости от формата указанного адреса. Это обеспечивает бесшовную интеграцию веб‑приложений, написанных на таких языках, как Python, Ruby или других, поддерживаемых uWSGI. Директива принимает один аргумент, который может иметь форму IP-адреса и порта (для TCP-связи) или пути к Unix-сокету. Например, `uwsgi_pass 127.0.0.1:8000;` направляет запросы к серверу uWSGI, работающему на localhost на порту 8000. Альтернативно можно использовать `uwsgi_pass unix:/path/to/socket;` для отправки запросов через Unix-сокет, что может улучшить производительность за счёт меньших накладных расходов по сравнению с TCP. С помощью `uwsgi_pass` также можно настроить дополнительные параметры, такие как установка таймаутов и передача переменных в приложение uWSGI через NGINX. Крайне важно, чтобы сервер uWSGI был правильно настроен для обработки входящих запросов в соответствии со спецификациями приложения, включая маршрутизацию и логику обработки запросов, поскольку в этом контексте NGINX выступает лишь как обратный прокси.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8000;
}

Убедитесь, что сервер uWSGI запущен и доступен по указанному URL.

Если используется Unix socket, убедитесь, что процесс NGINX имеет разрешение на доступ к файлу сокета.

Не забудьте включить `uwsgi_params`, чтобы корректно передать необходимые параметры серверу uWSGI.

uwsgi_modifier1 Директива 'uwsgi_modifier1' задаёт модификатор для uWSGI-запросов в NGINX.
httpserverlocation
Синтаксисuwsgi_modifier1 value;
По умолчанию0
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_modifier1' используется в конфигурации NGINX для установки конкретного модификатора при проксировании запросов на uWSGI-сервер, улучшая взаимодействие между NGINX и приложениями uWSGI. Этот модификатор полезен для внутренних механизмов uWSGI, позволяя пользователям передавать дополнительные сведения о запросе, которые uWSGI-сервер может использовать при обработке. Директива принимает один аргумент, который обычно является числовым значением, определяющим устанавливаемый модификатор. Если она указана в контекстах location, server или http, эта настройка применяется ко всем uWSGI-запросам, обрабатываемым в этом контексте. По умолчанию модификатор установлен в ноль (0), если не указан, что означает, что никаких дополнительных модификаторов отправлено не будет. Важно согласовать эту конфигурацию с ожидаемой логикой обработки на стороне uWSGI, чтобы обеспечить корректную работу. Неправильная настройка может привести к непредвиденным действиям или ошибкам в логике приложения при обработке запросов.

Пример конфига

location /myapp {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_modifier1 1;
}

Убедитесь, что используемое значение поддерживается и правильно интерпретируется приложением uWSGI, чтобы избежать непредвиденного поведения.

Использование неверного значения может привести к ошибкам при обработке запросов или к сбоям приложения на стороне uWSGI.

uwsgi_modifier2 Директива `uwsgi_modifier2` изменяет поведение ответов протокола uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_modifier2 number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_modifier2` используется для изменения способа отправки некоторых атрибутов ответа в uWSGI backend application. В частности, она позволяет администраторам задать пользовательское значение модификатора, которое может быть интерпретировано uWSGI-сервером или приложением. Этот модификатор управляет различными функциями, такими как поведение и состояние приложения, обеспечивая более точное взаимодействие между NGINX и uWSGI. На практике эта директива задаётся в контекстах таких как http, server, or location, что даёт гибкость определения её на разных уровнях иерархии конфигурации. Обычный аргумент для `uwsgi_modifier2` — числовое значение, как правило в диапазоне от 0 до 255. При задании это значение отправляется вместе с uWSGI-запросами и может изменять способ обработки этих запросов backend application или middleware. Директива `uwsgi_modifier2` взаимодействует с другими директивами, связанными с uWSGI, такими как `uwsgi_pass` и `uwsgi_param`, позволяя детально контролировать настройки заголовков, отправляемых в приложение. Необходима осторожность, чтобы backend application распознавало и могло корректно использовать заданное значение модификатора для достижения ожидаемого поведения.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_modifier2 2;
}

Убедитесь, что бэкенд-приложение разработано таким образом, чтобы обрабатывать указанное значение модификатора; в противном случае это может привести к непредвиденному поведению.

Следует использовать только допустимые числовые значения (0-255); в противном случае NGINX может не запуститься или не перезагрузиться корректно.

uwsgi_store Директива `uwsgi_store` позволяет сохранять ответ от uWSGI-сервера в указанный файл.
httpserverlocation
Синтаксисuwsgi_store path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_store` используется в конфигурациях NGINX для указания того, что содержимое ответа от uWSGI-сервера должно сохраняться в файловом расположении. Эта директива принимает один аргумент, который указывает путь к файлу, где будет сохранён ответ. Эта возможность особенно полезна для кеширования или логирования вывода uWSGI-ответов, позволяя серверу повторно использовать содержимое без необходимости многократного обращения к вышестоящему серверу. Когда запрос попадает в указанное location в NGINX, содержащее директиву `uwsgi_store`, NGINX перенаправит запрос на назначенный uWSGI-сервер. После получения ответа NGINX запишет содержимое в файл, указанный в аргументе `uwsgi_store`. Этот механизм помогает снизить нагрузку на приложение uWSGI, уменьшая количество раз, когда ему нужно генерировать одно и то же содержимое. Сохранённый файл затем может быть напрямую обслужен NGINX или дополнительно обработан по необходимости. Указанный путь к файлу должен иметь необходимые права для записи со стороны NGINX. Если указанный путь недействителен или у NGINX отсутствуют права на запись, использование директивы приведёт к ошибкам при обработке запросов. Поэтому при использовании `uwsgi_store` важно правильно настроить права доступа в файловой системе и убедиться в валидности пути. Кроме того, следует учитывать перезапись файлов, так как это может повлиять на ранее сохранённые ответы.

Пример конфига

location /example {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_store /var/www/html/response.txt;
}

Убедитесь, что каталог, указанный в пути, существует и доступен для записи NGINX.

Будьте осторожны с перезаписью файлов; если файл уже существует, он будет заменён без предупреждения.

Проверьте, что сервер uWSGI настроен корректно для надлежащей обработки запросов.

uwsgi_store_access Директива `uwsgi_store_access` настраивает контроль доступа к ответам, кэшированным на стороне сервера для приложений uWSGI.
httpserverlocation
Синтаксисuwsgi_store_access allow | deny address;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_store_access` в NGINX в основном используется для управления доступностью кэшированных ответов при работе с приложениями uWSGI. Она позволяет администраторам определить, каким IP-адресам клиентов разрешён или запрещён доступ к сохранённым на сервере ответам. Указывая список директив allow или deny, пользователи могут тонко настроить уровень контроля доступа к кэшированному содержимому, что повышает безопасность и облегчает управление ответами.

Пример конфига

location /app {
    uwsgi_pass unix:/tmp/app.sock;
    uwsgi_store on;
    uwsgi_store_access allow 192.168.1.0/24;
}

Убедитесь, что указанные IP-адреса имеют правильный формат и доступны, чтобы предотвратить неожиданные проблемы с доступом.

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

uwsgi_buffering Директива `uwsgi_buffering` управляет тем, буферизует ли NGINX ответы от приложений uWSGI.
httpserverlocation
Синтаксисuwsgi_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_buffering` используется в NGINX для определения того, как обрабатываются ответы от upstream‑сервера uWSGI. Когда установлено значение 'on', NGINX буферизует весь ответ от приложения uWSGI перед его отправкой клиенту. Это может быть полезно для оптимизации доставки контента, позволяя NGINX обрабатывать ответы внутри себя, тем самым уменьшая количество TCP‑пакетов, отправляемых клиенту, и повышая эффективность управления подключениями. Напротив, когда установлено значение 'off', NGINX будет передавать ответ клиенту по мере его получения от приложения uWSGI. Эта настройка может быть полезна для приложений, которые генерируют вывод по частям, или когда требуется отклик в реальном времени, например в случае длительного опроса или событий, отправляемых сервером. Директива гибкая: её можно использовать в контекстах `http`, `server` или `location`. Её значение — флаг, принимающий 'on' или 'off'. По умолчанию, если явно не задано, буферизация включена для ответов uWSGI. Важно тщательно выбирать между буферизацией и её отключением на основе характеристик производительности и требований приложения, чтобы избежать возможного негативного влияния на время отклика или использование ресурсов.

Пример конфига

location /myapp {
    uwsgi_pass myapp;
    uwsgi_buffering off;
}

Учтите, что установка buffering в 'off' может привести к увеличению использования ресурсов из-за большего числа открытых соединений, поддерживаемых NGINX.

Когда buffering отключён, NGINX может не суметь эффективно сжимать ответы, поскольку он отправляет данные по мере их получения.

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

uwsgi_request_buffering Директива 'uwsgi_request_buffering' контролирует, буферизуются ли тела запросов при обработке запросов uWSGI.
httpserverlocation
Синтаксисuwsgi_request_buffering on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_request_buffering' в NGINX имеет решающее значение для управления тем, как обрабатываются тела запросов при взаимодействии с приложениями uWSGI. При включённой буферизации NGINX сохраняет тело запроса до тех пор, пока не будет получено всё содержимое, что позволяет вышестоящему серверу получить весь пакет данных сразу. Это особенно полезно при обработке крупных загрузок или когда вышестоящий сервер должен проверить тело запроса целиком перед обработкой. С другой стороны, отключение буферизации запросов может снизить использование памяти и повысить производительность в сценариях с высокой конкуренцией или при небольших размерах запросов, поскольку NGINX будет передавать тело запроса напрямую приложению uWSGI без буферизации. Настройку можно подобрать в зависимости от ожидаемого размера запросов и характеристик производительности вашего приложения. Параметр для 'uwsgi_request_buffering' принимает флаг, который может быть либо 'on', либо 'off'. При значении 'on' буферизация включена; при 'off' — буферизация отключена. Важно понимать влияние этой директивы на производительность приложения и выбор бэкенд-обработки. В сценариях, где данные передаются в реальном времени (например, загрузки файлов) или ответы нужно отправлять, как только доступны части запроса, предпочтителен вариант с отключённой буферизацией. Напротив, для сложных полезных нагрузок или когда критична целостность запроса, включение этой опции обеспечивает анализ запроса в целом перед его обработкой.

Пример конфига

server {
    listen 80;
    server_name example.com;

    location / {
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_request_buffering off;
    }
}

Использование 'off' может привести к большему использованию ресурсов, если отправляются большие полезные нагрузки, поскольку они будут передаваться напрямую в upstream без буферизации.

Если upstream-приложение не может обрабатывать частичные запросы (т.е. ожидает полного тела запроса), установите его в 'on'.

uwsgi_ignore_client_abort Директива 'uwsgi_ignore_client_abort' управляет обработкой отключений клиента во время ответов uWSGI.
httpserverlocation
Синтаксисuwsgi_ignore_client_abort on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_ignore_client_abort' определяет, должна ли NGINX продолжать обработку запросов к uWSGI серверу даже если клиент отключился. Когда значение установлено в 'on', NGINX будет игнорировать ранние прерывания со стороны клиента: это значит, что запрос будет отправлен в uWSGI-приложение, и сервер будет ожидать завершения обработки независимо от состояния соединения клиента. Это может быть полезно для длительных запросов, когда необходимо обеспечить выполнение всей бизнес-логики приложения, даже если ответ может не быть доставлен клиенту. По умолчанию NGINX работает так, что если клиент отключается до завершения обработки запроса сервером, соединение с бэкендом прерывается, что может нарушить текущую обработку. С 'uwsgi_ignore_client_abort on;' сервер будет продолжать обработку даже в подобных ситуациях, что может помочь избежать лишних накладных расходов на обработку и повысить пропускную способность приложения в отдельных сценариях. Это помогает гарантировать, что задачи, инициированные клиентом, такие как загрузка файлов или ресурсоёмкие вычисления, будут полностью завершены. Эту директиву можно задавать в контекстах 'http', 'server' и 'location', что даёт гибкость в зависимости от того, где вы планируете обрабатывать запросы в конфигурации. Она работает с конфигурациями, специфичными для модуля uWSGI, но не влияет на другие типы upstream-модулей, такие как HTTP или gRPC-прокси.

Пример конфига

location /long-request {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_ignore_client_abort on;
}

Если и 'uwsgi_ignore_client_abort', и параметры таймаута соединения настроены неправильно, это может привести к расходованию ресурсов при частых отключениях клиентов.

Использование опции 'on' без учета ресурсов системы может привести к нежелательному выполнению длительных процессов и повлиять на общую производительность.

uwsgi_bind Директива `uwsgi_bind` задаёт адрес и порт, которые NGINX будет использовать для связи с uWSGI-серверами.
httpserverlocation
Синтаксисuwsgi_bind address [port];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_bind` является частью конфигурации NGINX для управления соединениями с uWSGI-серверами, которые обычно используются для обслуживания Python-приложений. Эта директива позволяет указать IP-адрес и порт (или Unix-сокет), по которым NGINX должен отправлять запросы на uWSGI-бэкенд. По умолчанию uWSGI слушает на `127.0.0.1:8000`, но эта директива позволяет настроить этот адрес в соответствии с потребностями вашей инфраструктуры. Директива принимает один или два параметра. Первый параметр — адрес uWSGI-сервера, а необязательный второй параметр может указывать порт, если вы используете TCP-сокеты. Если указан Unix-сокет, адрес будет путём к этому сокету. Эта возможность обеспечивает эффективную передачу данных, так как полностью обходит TCP-стек. Директива `uwsgi_bind` может использоваться в разных контекстах, включая `http`, `server` и `location`, что делает её гибкой для конфигурации на разных уровнях настройки NGINX. Если определено несколько директив `uwsgi_bind`, NGINX будет прослушивать все указанные адреса для обеспечения масштабируемости и балансировки нагрузки между несколькими процессами или серверами uWSGI. Убедитесь, что настройки соединения правильно соответствуют конфигурацией вашего приложения uWSGI, чтобы избежать проблем с подключением, особенно в части прав доступа к сокету.

Пример конфига

location / {
    include uwsgi_params;
    uwsgi_bind 127.0.0.1:8000;
    uwsgi_pass myapp;
}

Убедитесь, что сервер uWSGI правильно настроен для прослушивания указанного адреса и порта.

Будьте внимательны к правам доступа при использовании Unix-доменных сокетов; убедитесь, что NGINX имеет права доступа к файлу сокета.

Если вы используете несколько директив `uwsgi_bind`, проверьте, что они не конфликтуют друг с другом.

uwsgi_socket_keepalive Директива `uwsgi_socket_keepalive` включает или отключает keepalive на сокетном соединении uWSGI для повышения надежности.
httpserverlocation
Синтаксисuwsgi_socket_keepalive on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_socket_keepalive` используется в конфигурациях NGINX для управления включением функциональности keepalive на uWSGI-соединениях. Когда keepalive включен, NGINX периодически отправляет keepalive-запросы по сокету, чтобы убедиться, что соединение остается активным, предотвращая его разрыв из‑за неактивности. Это особенно полезно в окружениях, где длительные uWSGI‑соединения в противном случае могли бы разорваться по таймауту до завершения обработки HTTP‑запроса. Директива принимает логический флаг в качестве аргумента. Установка значения 'on' включает keepalive для uWSGI‑соединений, тогда как 'off' отключает эту функцию. По умолчанию keepalive выключен (off). Включение keepalive может привести к улучшению производительности и надежности, особенно в высоконагруженных приложениях, где соединения часто переиспользуются. Однако важно учитывать, что не все серверные или сетевые конфигурации одинаково корректно реагируют на параметры keepalive, и может потребоваться тщательная настройка для достижения оптимальных результатов. Эту директиву можно задавать в контекстах `http`, `server` или `location`, что обеспечивает гибкость конфигурации в соответствии с требованиями вашего приложения. Как правило, рекомендуется тестировать Keepalive‑соединения под нагрузкой, чтобы убедиться, что они приносят ожидаемую пользу без негативного влияния на производительность или поведение приложения.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8000;
    uwsgi_socket_keepalive on;
}

Убедитесь, что ваш сервер uWSGI поддерживает keepalive-соединения; возможно, потребуется изменить конфигурацию сокета.

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

uwsgi_connect_timeout Устанавливает тайм-аут подключения к uWSGI-серверу в NGINX.
httpserverlocation
Синтаксисuwsgi_connect_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_connect_timeout` задаёт длительность ожидания успешного подключения NGINX к uWSGI-серверу. Если указанный тайм-аут истечёт до установления подключения, NGINX прекратит попытку и вернёт ошибку. Этот параметр критически важен при работе с приложениями uWSGI, особенно в средах, где задержки или недоступность сервера могут привести к затянувшимся попыткам подключения. Значение этой директивы задаётся в секундах и может быть указано либо целым числом (количество секунд), либо в формате времени, например '30s' — для 30 секунд. Директиву можно задавать в контекстах http, server или location, что позволяет использовать централизованные или более точечные настройки в зависимости от потребностей приложений. Некорректная настройка `uwsgi_connect_timeout` может привести к тонким проблемам, таким как медленные ответы или нежелательные тайм-ауты, которые негативно сказываются на опыте пользователей. Администраторам следует убедиться, что их настройки соответствуют требованиям по производительности приложения и ожидаемым сценариям нагрузки. Использование этой директивы должно быть должным образом задокументировано, чтобы последующие изменения могли вноситься на основе оперативной обратной связи, особенно для приложений с высоким трафиком.

Пример конфига

http {
    server {
        location / {
            uwsgi_pass 127.0.0.1:9000;
            uwsgi_connect_timeout 30s;
        }
    }
}

Установка слишком короткого времени ожидания может привести к ошибкам при выполнении запросов в условиях высокой задержки.

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

uwsgi_send_timeout Задает время ожидания для чтения ответа от uWSGI-пира.
httpserverlocation
Синтаксисuwsgi_send_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_send_timeout` в NGINX задает временной лимит на отправку запроса на uWSGI-сервер. Эта директива особенно полезна для того, чтобы NGINX не ожидал ответа от uWSGI-сервера бесконечно. Если ответ не будет отправлен в пределах указанного времени ожидания, NGINX закроет соединение и вернет клиенту ответ с ошибкой. Директива принимает один аргумент — значение таймаута, которое можно задавать в различных единицах времени, например в секундах или миллисекундах. Очень важно корректно установить это значение, чтобы не ухудшать опыт пользователя, например за счет длительных ожиданий при высокой нагрузке. Эту директиву можно поместить в разные контексты, включая 'http', 'server' или 'location'. По умолчанию, если `uwsgi_send_timeout` явно не задана, таймаут не применяется, то есть NGINX будет ждать бесконечно. Тем не менее явное указание этой директивы позволяет лучше управлять ресурсами и повышать отзывчивость веб‑сервера, особенно при работе с потенциально медленными бэкенд-приложениями uWSGI.

Пример конфига

location /app {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_send_timeout 30s;
}

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

Если у бэкенд-приложения uWSGI время ответа варьируется, для оптимальной производительности может потребоваться тонкая настройка этого параметра.

uwsgi_buffer_size Директива `uwsgi_buffer_size` задаёт размер буфера, используемого для чтения первой части ответа от uWSGI сервера.
httpserverlocation
Синтаксисuwsgi_buffer_size size;
По умолчанию4k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_buffer_size` в NGINX контролирует, сколько памяти выделяется для буферизации начального ответа от uWSGI сервера. Эта директива критична при работе с приложениями, которые обмениваются данными через uWSGI протокол, особенно в части того, как данные получаются и возвращаются клиенту. Указанное значение определяет размер буфера, который хранит заголовки ответа после их получения от uWSGI приложения. Более крупный буфер даёт большую гибкость в обработке заголовков большего размера без необходимости многократного чтения из uWSGI протокола, что снижает вероятность проблем с производительностью. Следует учитывать, что если uWSGI сервер отправляет заголовки, превышающие заданный размер буфера, NGINX может сгенерировать ошибку или усечь заголовки. Поэтому при настройке следует внимательно оценивать ожидаемый размер заголовков, генерируемых приложением. Эта директива принимает один аргумент — размер выделяемого буфера. Размер можно указывать в байтах или с суффиксами, такими как `k` для килобайтов, `m` для мегабайтов. Эффективное использование этой директивы значительно способствует стабильной работе веб-приложений, зависящих от uWSGI.

Пример конфига

uwsgi_buffer_size 8k;

Установка слишком малого размера буфера может привести к ошибкам, если заголовки превышают назначенный размер.

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

uwsgi_pass_request_headers Директива 'uwsgi_pass_request_headers' управляет передачей заголовков запроса на сервер uWSGI.
httpserverlocation
Синтаксисuwsgi_pass_request_headers on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_pass_request_headers' указывает, передавать ли входящие заголовки запроса на backend uWSGI. Это флаговая директива, которая принимает значения 'on' или 'off'. Когда установлено в 'on', все заголовки из входящего запроса пересылаются на сервер uWSGI, что может быть критично для сохранения информации об оригинальном HTTP-запросе при его дальнейшем обработке. Если установлено в 'off', заголовки не отправляются на backend, что может быть уместно в ситуациях, когда нужно минимизировать объем передаваемых данных или если backend не требует эти заголовки. Использование этой директивы в правильном контексте (http, server или location) важно для её корректной работы. Она помогает контролировать поведение uWSGI-запросов в условиях, чувствительных к ресурсам, позволяя эффективно управлять передаваемыми данными. Режим работы может существенно влиять на поведение приложения, особенно при работе с переменными, такими как аутентификация и управление сессиями, которые могут быть связаны с конкретными заголовками.

Пример конфига

location /app {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_pass_request_headers on;
}

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

Установка этой директивы в 'off' может привести к утрате важной информации для некоторых приложений, которые полагаются на заголовки при обработке.

uwsgi_pass_request_body Директива uwsgi_pass_request_body контролирует, передается ли тело запроса на сервер uWSGI вместе с заголовками запроса.
httpserverlocation
Синтаксисuwsgi_pass_request_body on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_pass_request_body` — это флаг, который определяет, следует ли отправлять тело запроса на сервер uWSGI, когда запрос проксируется с помощью `uwsgi_pass`. Если установлено в `on`, тело запроса передается бэкенд-приложению uWSGI, позволяя ему обрабатывать данные, такие как отправки форм, загрузки файлов или другие полезные нагрузки, содержащиеся в теле HTTP-запросов. Соответственно, при `off` тело запроса не отправляется, что может быть полезно в сценариях, где требуется только информация из заголовков и тело можно игнорировать, что потенциально улучшает производительность за счет снижения объема передаваемых данных. Эту директиву можно настраивать в контекстах `http`, `server` или `location`, что делает её универсальной и применимой в разных конфигурациях. Она особенно важна для приложений, которые обрабатывают HTTP-методы, обычно имеющие тело, такие как POST или PUT. Поведение этой директивы напрямую влияет на то, как сервер uWSGI взаимодействует с полученными запросами; например, если отправлен запрос, требующий наличия тела, в то время как `uwsgi_pass_request_body` установлен в `off`, приложение uWSGI получит уведомление об отсутствии данных в теле, что может привести к ошибкам, если это не обработано корректно.

Пример конфига

location /api {
    uwsgi_pass unix:/tmp/myapp.sock;
    uwsgi_pass_request_body off;
}

Убедитесь, что бэкенд-приложение готово обрабатывать запросы без тела, когда установлено значение 'off'.

Использование 'off' может привести к проблемам с HTTP-методами, такими как POST, которые обычно требуют наличия тела запроса. Избегайте этого, если приложению требуется тело.

uwsgi_intercept_errors Директива `uwsgi_intercept_errors` управляет тем, перехватывает ли NGINX ошибки, возвращаемые приложениями uWSGI.
httpserverlocation
Синтаксисuwsgi_intercept_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_intercept_errors`, когда включена (установлена в 'on'), позволяет NGINX перехватывать определённые ответные ошибки от uWSGI-сервера и обрабатывать их согласно заранее заданным правилам, вместо прямой пересылки клиенту. Обычно это включает стандартные HTTP-коды ошибок, такие как 404 и 500, что даёт возможность настраивать пользовательские страницы ошибок, логирование и другие действия при возникновении таких ответов. И наоборот, при установке в 'off' NGINX вернёт ответ uWSGI клиенту без изменений, что может привести к неудобному для пользователя отображению ошибок. Эта директива может использоваться в контекстах `http`, `server` или `location`, что делает её гибкой для нужд конкретного приложения и конфигурации развёртывания. В тех случаях, когда разработчики хотят обеспечить единообразный пользовательский опыт при ошибках со стороны бэкенда, включение этой директивы ('on') полезно — это позволяет вернуть более профессиональный и адаптированный ответ пользователям в случае ошибок, например обслуживать HTML-страницы ошибок вместо необработанных сообщений об ошибках от приложения. Параметры, принимаемые этой директивой, включают булево значение: 'on' для включения перехвата ошибок или 'off' для его отключения. Важно отметить, что эта директива применяется специально к ответам uWSGI, и контролируемое ею поведение может быть ключевым для эффективного управления ошибками, видимыми пользователям.

Пример конфига

location /myapp {
    uwsgi_pass myapp_backend;
    uwsgi_intercept_errors on;
    error_page 404 /custom_404.html;
    error_page 500 502 503 504 /custom_50x.html;
}

Если директива установлена в 'off', пользовательская обработка ошибок не будет работать, и необработанные ответы от uWSGI могут запутать пользователей.

Убедитесь, что при перехвате ошибок определены корректные страницы ошибок, чтобы не показывать стандартные страницы ошибок NGINX. При добавлении пользовательских страниц ошибок убедитесь, что они существуют и на них корректно ссылаются.

uwsgi_read_timeout Устанавливает таймаут на чтение ответа от сервера uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_read_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`uwsgi_read_timeout` задаёт длительность, в течение которой NGINX будет ожидать ответа от сервера uWSGI. Если сервер не ответит в этот срок, NGINX закроет соединение и вернёт клиенту ошибку. Этот параметр особенно полезен для приложений, которые могут дольше обрабатывать запросы, поскольку он предотвращает бесконечное удержание соединений NGINX открытыми. Значение таймаута можно задавать в различных форматах времени, например секундах, минутах или в более мелких единицах, таких как миллисекунды. Основное назначение — повысить производительность, избегая долгих ожиданий при неотзывчивых бэкендах. Администраторы могут настраивать этот лимит времени по-разному для разных контекстов, задавая директиву в блоках `http`, `server` или `location`, что обеспечивает гибкость в соответствии с конкретными требованиями. Если будет превышен лимит `uwsgi_read_timeout`, NGINX вернёт ошибку 504 Gateway Timeout, сообщая клиенту, что соединение было разорвано из-за того, что сервер uWSGI не ответил в отведённое время. Поэтому рекомендуется проанализировать время отклика приложения и установить это значение так, чтобы найти баланс между предоставлением достаточного времени на обработку и недопущением чрезмерного ожидания со стороны клиентов.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass unix:/path/to/socket;
    uwsgi_read_timeout 30s;
}

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

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

uwsgi_buffers Директива `uwsgi_buffers` задаёт количество и размер буферов, используемых для чтения ответов от uWSGI‑серверов.
httpserverlocation
Синтаксисuwsgi_buffers number size;
По умолчанию4 8k (or 4 16k if the configured buffer size is larger)
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_buffers` определяет, сколько и какого размера буферов будет выделено для чтения ответов от uWSGI‑серверов в NGINX. Это важно для контроля объёма используемой NGINX памяти при обработке запросов, отправляемых uWSGI‑серверам. Каждый буфер способен содержать данные ответа, и если объём данных превышает размер выделенного буфера, NGINX вынужден выполнять дополнительные выделения памяти, что может привести к ухудшению производительности. Директива принимает два параметра: число буферов и размер каждого буфера. Эти параметры можно настроить в зависимости от ожидаемого размера ответов uWSGI для оптимизации производительности и использования памяти. Например, если ожидается, что uWSGI будет возвращать большие ответы, рекомендуется увеличить и количество буферов, и их размер. Напротив, если ответы обычно небольшие, уменьшение этих значений поможет экономить память. Поведение этой директивы зависит от контекста: её можно задавать в контекстах `http`, `server` или `location`, что позволяет гибко настраивать конфигурацию в соответствии с потребностями конкретного приложения. Правильная настройка `uwsgi_buffers` может улучшить производительность в средах, где используется uWSGI для обслуживания Python‑приложений или аналогичных конфигураций.

Пример конфига

uwsgi_buffers 8 16k;

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

Установка `uwsgi_buffers` на маленькие значения в приложениях с высоким трафиком может вызвать усиление операций выделения памяти и повлиять на задержку.

uwsgi_busy_buffers_size Задает размер буфера, используемого для хранения данных ответа от серверов uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_busy_buffers_size size;
По умолчанию16k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_busy_buffers_size` определяет максимальный размер буфера, который может использоваться для хранения данных при взаимодействии NGINX с серверами uWSGI. Это особенно важно для поддержания производительности при обработке больших ответов. Если размер ответа, сгенерированного сервером uWSGI, превышает этот предел, NGINX применит дополнительные механизмы для обработки переполнения, что может привести к увеличенному потреблению ресурсов и повлиять на общую производительность. Указанный размер `uwsgi_busy_buffers_size` следует тщательно подбирать с учётом других связанных настроек буферов. Когда одновременно обрабатывается несколько ответов uWSGI, этот буфер может быстро заполниться, поэтому NGINX обычно буферизует первые `uwsgi_busy_buffers_size` байт и начинает их обработку, одновременно принимая и обрабатывая остальные данные. Директиву можно задавать в контексте HTTP, server или location, что обеспечивает гибкую конфигурацию для разных масштабов экземпляров NGINX. Крайне важно тестировать влияние различных размеров буферов в реалистичных сценариях, чтобы избежать нежелательных эффектов, таких как увеличение задержки или чрезмерная нагрузка на ресурсы. Необходима продвинутая тонкая настройка на основе конкретной нагрузки и размеров ответов от uWSGI для достижения оптимального баланса между потреблением ресурсов и производительностью.

Пример конфига

http {
    uwsgi_busy_buffers_size 32k;
}

server {
    location / {
        uwsgi_pass unix:/var/run/uwsgi.sock;
        uwsgi_busy_buffers_size 64k;
    }
}

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

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

uwsgi_force_ranges Директива `uwsgi_force_ranges` позволяет серверу отвечать на запросы диапазонов для приложений uWSGI, возвращая полный ответ при установке в 'on'.
httpserverlocation
Синтаксисuwsgi_force_ranges on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_force_ranges` — это параметр конфигурации в NGINX, который влияет на обработку запросов диапазонов для приложений uWSGI. Когда эта директива включена (установлена в 'on'), NGINX будет игнорировать любые запросы диапазонов, полученные для соответствующего блока server или location, отвечая полным ресурсом вместо частичного ответа. Такое поведение может быть особенно полезно в сценариях, когда отдача частичного содержимого может привести к осложнениям в логике приложения или ожиданиях клиента. Конкретно эта директива применяется в контексте блоков HTTP, server и location, что обеспечивает гибкость конфигурации. Когда она включена, она изменяет процесс формирования ответа. В типичном использовании запрос диапазона может требовать, чтобы сервер доставил только определённый диапазон байт ресурса. Однако при `uwsgi_force_ranges`, установленной в 'on', NGINX будет обрабатывать запрос таким образом, что клиенту отправляется весь ресурс целиком, упрощая обработку запросов и потенциально избегая нежелательного поведения в приложениях, рассчитанных на получение полного содержимого. Директива принимает флаг в качестве аргумента. Значение 'on' активирует такое поведение, тогда как установка в 'off' (или отсутствие директивы, так как по умолчанию она равна 'off') позволяет использовать стандартную обработку запросов диапазонов.

Пример конфига

location /myapp {
    include uwsgi_params;
    uwsgi_pass myapp;
    uwsgi_force_ranges on;
}

Убедитесь, что нижележащее приложение uWSGI совместимо с получением полных ответов; в противном случае это может привести к проблемам с производительностью или увеличению времени загрузки.

Если установлено в 'on', клиенты, ожидающие частичное содержимое через запросы диапазонов, получат вместо этого полный ресурс, что может привести к неожиданному поведению на стороне клиента.

uwsgi_limit_rate Директива `uwsgi_limit_rate` ограничивает скорость передачи данных на uWSGI-сервер.
httpserverlocation
Синтаксисuwsgi_limit_rate rate;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_limit_rate` используется для управления максимальной скоростью передачи ответов клиентам в контексте веб‑сервера NGINX. Указывая скорость в байтах в секунду, администраторы могут реализовать ограничение пропускной способности, что полезно для управления ресурсами сервера и предотвращения того, чтобы использование одним клиентом негативно сказывалось на других. Эта директива специально предназначена для использования с uWSGI, который является шлюзовым интерфейсом для обслуживания веб‑приложений на Python. Когда задана `uwsgi_limit_rate`, NGINX будет ограничивать скорость отправки данных клиенту, подстраивая вывод под установленный лимит. Директива принимает один аргумент — максимальную скорость отправки данных (например, `200k` для 200 килобайт в секунду). Её можно размещать в разных контекстах, включая `http`, `server` или `location`, что позволяет гибко контролировать, к каким запросам она применяется. Имейте в виду, что при ограничении скоростей это может повлиять на производительность приложений, обслуживаемых uWSGI, особенно при высокой нагрузке или при больших ответах. Директива особенно полезна в ситуациях, когда имеется несколько потребителей одних и тех же серверных ресурсов или когда требуется ограничить использование, чтобы избежать всплесков в потреблении полосы пропускания.

Пример конфига

http {
    server {
        location / {
            uwsgi_pass myapp;
            uwsgi_limit_rate 500k;
        }
    }
}

Установка `uwsgi_limit_rate` слишком низкой может привести к худшему пользовательскому опыту из‑за медленных ответов.

Убедитесь, что значение указано правильно; в противном случае NGINX может игнорировать директиву.

Более высокие лимиты могут не дать заметного эффекта, если само приложение имеет более низкую скорость вывода.

uwsgi_cache Директива uwsgi_cache задаёт общий кэш для ответов от uWSGI.
httpserverlocation
Синтаксисuwsgi_cache zone;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache` используется в конфигурации NGINX для определения зоны кэша, которая хранит ответы от приложений uWSGI, повышая производительность приложений за счёт сокращения времени отклика. Каждый раз, когда NGINX отправляет запрос на upstream uWSGI сервер и получает ответ, этот ответ может быть сохранён в указанном кэше для последующих запросов. Это обеспечивает более быстрые ответы на повторные запросы, которые обычно инициировали бы обработку uWSGI-приложением, позволяя выдавать кэшированные ответы напрямую из NGINX вместо многократного вызова самого приложения. Директива принимает один аргумент — имя зоны кэша, ранее определённой с помощью директивы `uwsgi_cache_path`. Поведение кэша также можно контролировать с помощью других директив, таких как `uwsgi_cache_key`, `uwsgi_cache_valid` и `uwsgi_cache_bypass`, среди прочих. Правильная настройка этих дополнительных директив необходима для эффективного управления записями в кэше и контроля времени жизни кэшированных данных в зависимости от типа ответа или условий запроса. Важно отметить, что функции кэширования опираются на заголовки ответа, возвращаемые приложением uWSGI, чтобы определить, следует ли кэшировать содержимое и как долго хранить ответы. Стратегии кэширования могут существенно повысить производительность при высокой нагрузке веб-приложений, особенно при интенсивном трафике.

Пример конфига

http {
    uwsgi_cache_path /tmp/uwsgi_cache levels=1:2 keys_zone=uwsgi_cache:10m inactive=60m;
    server {
        location /api {
            include uwsgi_params;
            uwsgi_pass uWSGI_backend;
            uwsgi_cache uwsgi_cache;
            uwsgi_cache_valid 200 30m;
        }
    }
}

Убедитесь, что путь к кэшу доступен и для него установлены соответствующие права доступа.

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

Будьте осторожны при кэшировании конфиденциальных данных, которые не следует разглашать.

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

uwsgi_cache_key Директива `uwsgi_cache_key` задаёт ключ для кэша в NGINX при использовании uWSGI-кэширования.
httpserverlocation
Синтаксисuwsgi_cache_key string;
По умолчанию$request_uri;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_key` используется для определения пользовательского ключа, который NGINX будет использовать для сохранения ответов в uWSGI-кэше. Эта директива может быть необходима в сценариях, когда кэш нужно сегментировать на основе определённых параметров, таких как идентификаторы сессий, состояния аутентификации пользователей или любые другие переменные, влияющие на содержимое, возвращаемое для конкретного запроса. По умолчанию NGINX использует хеш от URI запроса, но с помощью этой директивы вы можете явно указать, как должен формироваться ключ кэша. Директива принимает один аргумент — строку, которая может включать переменные, константы или и то, и другое, что обеспечивает гибкий способ построения ключа кэша. Например, вы можете включить переменную `$http_cookie`, если хотите иметь разные записи кэша на основе сессий пользователей. Определённый здесь ключ критически важен для обеспечения точных попаданий в кэш и получения ожидаемых ответов при повторных одинаковых запросах.

Пример конфига

uwsgi_cache_key "$scheme$request_method$host$request_uri$http_cookie";

Переопределение ключа по умолчанию требует точных указаний, чтобы избежать промахов кэша.

Если в ключе используются переменные, убедитесь, что они определены в контексте, где осуществляется доступ к кэшу.

uwsgi_cache_path Директива `uwsgi_cache_path` задаёт путь к кэшу для кэширования ответов uWSGI в NGINX.
http
Синтаксисuwsgi_cache_path path [levels=levels] [max_size=size] [inactive=time] [use_temp_path=on|off];
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_path` используется для определения расположения в файловой системе, используемого для кэширования ответов от приложений uWSGI. Эта директива включает кэширование ответов, при котором ответы от обработчиков uWSGI сохраняются на диске и могут подаваться напрямую из кэша, что снижает нагрузку на бэкенд-сервер и улучшает время отклика. Основные параметры этой директивы включают имя ключа кэша, каталог кэша и дополнительные настройки размера кэша, времени неактивности и уровня вложенности каталогов, используемых в структуре хранения кэша. При настройке `uwsgi_cache_path` принимаются несколько опций конфигурации, таких как путь к каталогу для хранения кэшированных данных, имя ключа кэша, максимальный размер кэша и конкретный таймаут неактивности для элементов кэша. Важно, чтобы каталог кэша был доступен для записи процессами NGINX. Механизм кэширования может значительно повысить производительность для приложений, которые генерируют повторяющиеся ответы, пригодные для кэширования, особенно для статического контента или динамических страниц с редкими изменениями. В целом эта директива обычно используется вместе с директивой `uwsgi_cache`, которая указывает, включено ли кэширование для конкретных местоположений uWSGI и как управляется поведение кэширования в этом контексте, тем самым тесно интегрируясь с функциями кэширования NGINX для оптимизации доставки приложений.

Пример конфига

uwsgi_cache_path /var/cache/nginx/uwsgi_cache levels=1:2 max_size=10g inactive=60m use_temp_path=off;

Убедитесь, что каталог кэша имеет корректные права доступа, чтобы рабочие процессы NGINX могли записывать в него.

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

Неверная настройка опции `levels` может привести к неэффективному использованию хранилища или проблемам с производительностью.

uwsgi_cache_bypass Директива uwsgi_cache_bypass определяет условия, при которых кэширование для ответов uWSGI пропускается.
httpserverlocation
Синтаксисuwsgi_cache_bypass condition | condition ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_bypass` в NGINX используется для задания конкретных условий, при которых происходит обход кэшированного ответа uWSGI. Это особенно полезно в сценариях, когда определённые запросы не должны получать кэшированный контент, что позволяет отдавать наиболее актуальные данные без вмешательства кэша. Для директивы можно задать один или несколько параметров, которые могут быть пользовательскими переменными или условиями, основанными на HTTP-заголовках или других атрибутах запроса. Директиву можно размещать в контекстах `http`, `server` или `location`; она поддерживает один или несколько аргументов. Каждый аргумент представляет собой условие или переменную, которое при вычислении в true приведёт к тому, что система кэширования пропустит кэшированный ответ для данного запроса. Например, можно настроить `uwsgi_cache_bypass`, чтобы избегать кэширования для аутентифицированных пользователей или когда в запросе присутствуют определённые параметры строки запроса. Кроме того, эта директива работает в сочетании с другими директивами, связанными с кэшированием, такими как `uwsgi_cache` и `uwsgi_cache_key`. Правильное использование `uwsgi_cache_bypass` вместе с этими директивами позволяет тонко настроить поведение кэша в соответствии с требованиями вашего приложения, давая разработчикам возможность контролировать случаи, когда кэш не должен использоваться, что обеспечивает более динамичную доставку контента.

Пример конфига

location /api {
    uwsgi_pass backend;
    uwsgi_cache my_cache;
    uwsgi_cache_bypass $arg_bypass;
}

Убедитесь, что любое указанное вами условие действительно оценивается как true, чтобы обойти кэш; в противном случае будет происходить кэширование.

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

uwsgi_no_cache Директива `uwsgi_no_cache` задает условие, при котором ответы от сервера uWSGI не должны кэшироваться.
httpserverlocation
Синтаксисuwsgi_no_cache string | $variable ;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_no_cache` используется в конфигурациях NGINX, чтобы предотвратить кэширование некоторых ответов на основе заданных параметров. Когда эта директива задается с одним или несколькими аргументами, она указывает NGINX не кэшировать ответы на запросы, соответствующие этим аргументам. Это особенно полезно в ситуациях, когда содержимое всегда должно получаться заново с сервера приложений uWSGI, например динамическое содержимое, которое часто изменяется. Аргументы для `uwsgi_no_cache` могут включать переменные, которые оцениваются в условия или значения, позволяя более тонко управлять кэшированием. Например, можно указать определенные заголовки запроса или коды состояния, из-за которых ответ помечается как некэшируемый. Эта директива чувствительна к контексту и может использоваться в разных областях, включая `http`, `server` и `location`, что позволяет применять гибкие стратегии кэширования по всей конфигурации NGINX. Когда указанные условия выполняются, с ответом обращается NGINX без его сохранения в механизмах кэширования, что гарантирует пользователям получение самой свежей версии содержимого. Если директива не задана, NGINX может кэшировать подходящие ответы в соответствии с настройками кэширования по умолчанию, что может привести к отдаче устаревшего содержимого.

Пример конфига

location /app {
    uwsgi_pass  unix:/tmp/uwsgi.sock;
    uwsgi_no_cache $http_cache_control;
}

Убедитесь, что передаваемые аргументы соответствуют вашим требованиям к кэшированию; неверные аргументы могут привести к нежелательным эффектам кэширования.

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

uwsgi_cache_valid Задает длительность кэширования ответов в NGINX при кэшировании UWSGI в зависимости от HTTP-статуса.
httpserverlocation
Синтаксисuwsgi_cache_valid code time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_valid` используется в контекстах HTTP, server и location для определения того, как долго определённые коды HTTP-ответов должны кэшироваться при использовании кэширования UWSGI. Директива позволяет администраторам задавать разные времена кэширования для различных кодов статуса ответа, что помогает оптимизировать доставку контента за счёт снижения нагрузки на upstream servers. Это особенно полезно для динамического контента, когда некоторые ответы стабильнее других. При настройке этой директивы можно задать одну или несколько пар `code` и `time`. Каждая пара указывает, что ответы с конкретным HTTP-кодом статуса должны кэшироваться в течение времени, указанного в параметре time. Значения времени можно задавать в секундах или с суффиксами, такими как 'm' для минут или 'h' для часов. Например, `200 10m` кэширует все ответы со статусом 200 в течение 10 минут. Ответы со статусом, не указанным в директиве, кэшироваться не будут. Эта директива полезна в сочетании с директивой `uwsgi_cache`, которая включает кэширование ответов UWSGI. Тонкая настройка длительности кэширования для разных ответов позволяет улучшить производительность сервера и сократить потребление пропускной способности, что приводит к более быстрому времени отклика для пользователей.

Пример конфига

uwsgi_cache_valid 200 30m;
uwsgi_cache_valid 404 1m;
uwsgi_cache_valid 500 5m;

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

Ответы от upstream‑серверов следует протестировать, чтобы убедиться, что кэшируемые коды ответов действительно устанавливаются корректно, поскольку неправильно настроенные бэкенд‑сервисы могут вызывать непредвиденное поведение.

uwsgi_cache_min_uses Директива `uwsgi_cache_min_uses` задаёт минимальное количество обращений, после которого запрос будет кешироваться.
httpserverlocation
Синтаксисuwsgi_cache_min_uses number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_min_uses` является частью механизма кеширования NGINX, предназначенного для запросов uWSGI. Она позволяет задать порог того, сколько раз конкретный запрос должен быть обработан, прежде чем он станет пригоден для кеширования. Это особенно полезно для управления временем хранения в кеше и производительностью, поскольку предотвращает занятие места в кеше редкими запросами. Эта директива принимает один аргумент: целое число, указывающее минимальный порог использования. Например, если установить значение 3, конкретный запрос должен быть выполнен как минимум три раза, прежде чем ответ будет сохранён в кеше. Если число обращений ниже этого порога, ответ не будет кешироваться, что может быть полезно в среде с высоким трафиком, где не все запросы стоит кешировать. Это помогает оптимизировать использование кеша и может улучшить общую производительность вашего приложения, гарантируя, что в кеше хранятся только наиболее часто запрашиваемые ответы. Важно отметить, что эту директиву следует использовать обдуманно: слишком высокий порог может помешать кешированию валидных ответов, а слишком низкий — привести к чрезмерному кешированию редко встречающихся ответов. Поэтому рекомендуется проанализировать шаблоны трафика и настроить директиву соответствующим образом для достижения желаемого поведения кеширования.

Пример конфига

uwsgi_cache_min_uses 3;

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

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

uwsgi_cache_max_range_offset Устанавливает максимальное смещение в байтах для запросов диапазона в кэшировании uWSGI.
httpserverlocation
Синтаксисuwsgi_cache_max_range_offset size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`uwsgi_cache_max_range_offset` директива задаёт максимальное количество байт, на которое может смещаться запрос диапазона при использовании механизма кэширования uWSGI в NGINX. Запросы диапазона позволяют клиентам запрашивать только часть файла, определённую диапазоном байтов, что может быть полезно для возобновления прерванных загрузок или для потоковой передачи медиа. Когда клиент посылает запрос с заголовком Range, эта директива ограничивает, насколько глубоко в содержимом может обратиться запрос. Если указанное смещение превышает предел, заданный этой директивой, NGINX ответит кодом состояния, указывающим, что диапазон не может быть удовлетворён (HTTP 416). Значение этой директивы задаётся в байтах, поэтому важно тонко настраивать его в зависимости от ожидаемых сценариев использования и типов обслуживаемого содержимого. Например, если `uwsgi_cache_max_range_offset` установлен в 1024, клиенты смогут запрашивать смещения частичного содержимого только в пределах первых 1024 байт кэшированного объекта. Это может предотвратить чрезмерное использование ресурсов при работе с большими файлами и улучшить производительность за счёт ограничения объёма операций по поиску в кэше и выделения памяти, необходимых для обслуживания частичного содержимого.

Пример конфига

location /app {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_cache my_cache;
    uwsgi_cache_max_range_offset 2048;
}

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

Если не задать эту директиву, это может привести к непредсказуемому поведению у некоторых клиентов, ожидающих range-seeking functionality.

uwsgi_cache_use_stale Директива `uwsgi_cache_use_stale` позволяет NGINX отдавать устаревшие кэшированные ответы при возникновении определённых ошибок или условий.
httpserverlocation
Синтаксисuwsgi_cache_use_stale
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_use_stale` управляет тем, когда NGINX должен отдавать устаревшее кэшированное содержимое в ответ на uWSGI-запросы. Эта директива особенно полезна для поддержания доступности сервиса, позволяя использовать устаревшие кэшированные ответы, пока генерируется свежий контент. Вы можете указать условия, при которых будет выдаваться устаревшее содержимое, с помощью следующих аргументов: 'error', 'timeout' и 'invalid_header'. Например, если бэкенд-сервер uWSGI недоступен или происходит таймаут, пользователи всё ещё могут получать кэшированное содержимое вместо страницы с ошибкой. Чтобы эффективно использовать эту директиву, добавьте её в ваш location-блок, где настроено кэширование uWSGI. Она может принимать несколько аргументов по необходимости — если, например, указать 'timeout error', то устаревшее содержимое будет выдаваться в случае как таймаута, так и ошибки. Это повышает надёжность ваших приложений за счёт снижения числа сбоев, с которыми сталкиваются пользователи. Однако администраторам следует соблюдать осторожность и убедиться, что устаревшее содержимое остаётся релевантным и приемлемым для пользователей, прежде чем широко применять эту директиву.

Пример конфига

location /api {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_cache my_cache;
    uwsgi_cache_use_stale error timeout;
}

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

Помните, что перед использованием `uwsgi_cache_use_stale` нужно определить корректную конфигурацию кэша с помощью `uwsgi_cache`.

Сочетание слишком большого числа опций может привести к сложному поведению; тщательно тестируйте.

uwsgi_cache_methods Директива uwsgi_cache_methods задаёт, какие HTTP-методы должны кэшироваться uWSGI-кэшем.
httpserverlocation
Синтаксисuwsgi_cache_methods method1 [method2 ...];
По умолчаниюGET HEAD
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_methods` является частью механизма кэширования uWSGI в NGINX, который позволяет указать, какие именно HTTP-методы следует кэшировать. По умолчанию кэширование применяется только к GET и HEAD-запросам, но с помощью этой директивы можно добавлять другие методы, указывая их в качестве аргументов. Такая гибкость важна в приложениях, где POST или другие методы возвращают ответы, которые также целесообразно кэшировать для повышения производительности без чрезмерной нагрузки на сервер. Директива допускает один или несколько аргументов — это имена методов, такие как 'GET', 'HEAD', 'POST' и т.д. Они чувствительны к регистру и должны быть указаны точно, чтобы работать. Помимо управления тем, какие методы можно кэшировать, она предоставляет способ тонкой настройки поведения кэша в соответствии с характеристиками приложения, позволяя сбалансировать скорость и актуальность данных, предоставляемых пользователям. После указания методов кэширования NGINX будет сохранять в кэше только ответы, сформированные для этих HTTP-методов в соответствии с директивой; ответы для остальных методов в кэш не будут помещаться. Контекстами, в которых может использоваться эта директива, являются `http`, `server` и `location`. Такая гибкость означает, что кэширование можно точно контролировать на уровне конкретного развертывания, позволяя администраторам настраивать поведение кэша в зависимости от конкретных обстоятельств.

Пример конфига

uwsgi_cache_methods POST PUT;

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

Помните, что поведение кэширования также может зависеть от других директив, таких как `uwsgi_cache_bypass` и `uwsgi_cache_use_stale`.

uwsgi_cache_lock Директива `uwsgi_cache_lock` позволяет блокировать кэш, чтобы предотвратить многократную генерацию одного и того же содержимого, когда оно ещё не доступно в кэше.
httpserverlocation
Синтаксисuwsgi_cache_lock on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_lock` используется для включения или отключения блокировки кэша в NGINX при использовании механизма кэширования uWSGI. Когда эта директива установлена в 'on', если выполняется запрос к содержимому, которое в данный момент генерируется, другие запросы к тому же содержимому будут заблокированы до завершения первого запроса. Это помогает уменьшить вероятность дублирующей обработки одного и того же запроса, улучшая использование ресурсов и сокращая время отклика при одновременных запросах. По умолчанию, если директива не задана, кэширование будет происходить без блокировки, что может привести к множественной генерации содержимого, если несколько запросов поступают одновременно. Эта директива взаимодействует с директивой `uwsgi_cache`, которая отвечает за определение зоны кэша, используемой для кэширования ответов uWSGI. Установка `uwsgi_cache_lock` в 'off' позволяет нескольким одновременным запросам к одному и тому же не закэшированному ресурсу выполняться параллельно, что потенциально увеличивает нагрузку на бэкенд приложения. Вы можете задавать эту директиву в контекстах http, server или location, что даёт гибкость в зависимости от вашей стратегии кэширования и архитектуры. Поведение кэша можно дополнительно настроить с помощью других директив кэширования для обеспечения оптимальной производительности в соответствии с требованиями приложения.

Пример конфига

uwsgi_cache my_cache;
uwsgi_cache_lock on;

location /example {
    uwsgi_pass my_app;
    uwsgi_cache my_cache;
}

Убедитесь, что uwsgi_cache определён для эффективного кэширования перед включением блокировки.

Избегайте включения `uwsgi_cache_lock`, если ваше приложение может допускать одновременную обработку нескольких запросов.

uwsgi_cache_lock_timeout Устанавливает период ожидания (таймаут) для блокировки кэша во время операций кэширования uWSGI.
httpserverlocation
Синтаксисuwsgi_cache_lock_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_lock_timeout` в NGINX задаёт длительность, в течение которой блокировка кэша остаётся активной, ожидая завершения операции кэширования другим запросом. Когда несколько запросов пытаются получить из кэша данные из uWSGI, эта блокировка предотвращает лавину одновременных обращений к кэшу, обеспечивая, что одновременно только один запрос получает данные кэша. Если другой запрос поступает до истечения таймаута блокировки, он будет ждать освобождения блокировки, что уменьшает вероятность одновременной обработки множества запросов на бэкенде и повышает производительность. Эта директива принимает в качестве аргумента значение времени, которое определяет, как долго другие запросы будут ожидать блокировку кэша. Таймаут задаётся в секундах; более высокий таймаут может помочь при периодически высокой нагрузке, но может привести к увеличению задержки запросов в периоды сильного соперничества за доступ к кэшу. Напротив, установка слишком низкого значения может привести к тому, что несколько одновременных запросов обратятся к бэкенду, если исходный запрос выполняется дольше таймаута блокировки, что сведёт на нет преимущества кэширования. Кроме того, директиву `uwsgi_cache_lock_timeout` следует задавать в соответствующем контексте конфигурации (http, server, or location) в зависимости от того, где вы хотите управлять поведением кэширования. Используйте эту директиву обдуманно с учётом паттернов трафика и времени отклика приложения, чтобы добиться наилучшей производительности кэширования.

Пример конфига

http {
    uwsgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

    server {
        location / {
            uwsgi_pass my_uwsgi;
            uwsgi_cache my_cache;
            uwsgi_cache_lock on;
            uwsgi_cache_lock_timeout 5s;
        }
    }
}

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

Если таймауты блокировок кэша установлены непропорционально выше ожидаемого времени ответа, это может привести к ненужному ожиданию пользователей при высокой конкуренции запросов.

Отсутствие указания значения может привести к непредсказуемому поведению в зависимости от других настроек конфигурации. Всегда следует задать значение или установить 'none'.

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

uwsgi_cache_lock_age Директива `uwsgi_cache_lock_age` задаёт время ожидания блокировки кэша при обслуживании запросов в NGINX с включённым кэшированием uWSGI.
httpserverlocation
Синтаксисuwsgi_cache_lock_age time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_lock_age` используется в конфигурациях NGINX для определения конкретного периода таймаута ожидания блокировки кэша. Когда несколько запросов к одному и тому же ресурсу поступают одновременно, механизм блокировки кэша предотвращает перегрузку backend одинаковыми запросами, позволяя только одному запросу получить ресурс из backend, пока остальные будут ждать заполнения кэша. Это предотвращает чрезмерную нагрузку на backend одинаковыми запросами и обеспечивает доставку клиентам актуального содержимого после кэширования ресурса. Значение, указанное для директивы `uwsgi_cache_lock_age`, представляет собой длительность времени, которая контролирует, как долго другие запросы должны ждать освобождения блокировки. Если блокировка кэша недоступна и период таймаута истекает, последующие запросы могут либо немедленно завершиться с ошибкой, либо, в зависимости от конфигурации, продолжить обращение к backend. Таким образом, директива обеспечивает баланс между требованиями к производительности и управлением ресурсами для динамического контента с использованием uWSGI. Эта директива может применяться в различных контекстах внутри NGINX, включая блоки http, server и location. Она особенно эффективна в условиях высокого трафика, где кэширование критично для снижения нагрузки на backend и улучшения времени отклика.

Пример конфига

uwsgi_cache_lock on;
uwsgi_cache_lock_age 10s;

Установка слишком низкого значения может привести к лавине запросов при одновременных обращениях.

Если не включить `uwsgi_cache_lock`, эта директива станет неэффективной, так как блокировки применяться не будут.

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

uwsgi_cache_revalidate Директива `uwsgi_cache_revalidate` управляет тем, будет ли NGINX повторно проверять кешированные ответы у сервера uWSGI перед их выдачей.
httpserverlocation
Синтаксисuwsgi_cache_revalidate on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_revalidate` используется для управления тем, как обрабатываются кешированные ответы с точки зрения их свежести. Когда эта директива включена, NGINX отправляет запрос на повторную проверку серверу uWSGI для кешированных ответов, считающихся устаревшими. Это означает, что когда время истечения кешированного ответа (определяемое директивой `uwsgi_cache_valid`) прошло, вместо прямой выдачи NGINX проверит у сервера, по-прежнему ли содержимое актуально. Это помогает в ситуациях, когда содержимое часто обновляется, и обеспечивает пользователям максимально точные и актуальные ответы. Эта директива может применяться в разных контекстах, включая http, server и location, что позволяет реализовать гибкие стратегии кеширования для разных частей вашего приложения. Она принимает булев аргумент, включающий или отключающий процесс повторной проверки. Включение этой директивы может добавить некоторую нагрузку, поскольку требует дополнительного запроса к серверу uWSGI, однако обеспечивает согласованность данных и их свежесть для конечных пользователей. Использование `uwsgi_cache_revalidate` особенно полезно в окружениях, где данные приложения часто меняются и должны отражать эти изменения без длительного периода устаревания. Ее можно сочетать с другими директивами кеширования, такими как `uwsgi_cache`, `uwsgi_cache_key` и `uwsgi_cache_valid`, для создания комплексной конфигурации кеширования, отвечающей потребностям приложения.

Пример конфига

uwsgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

location / {
    uwsgi_pass my_uwsgi;
    uwsgi_cache my_cache;
    uwsgi_cache_revalidate on;
    uwsgi_cache_valid 200 1h;
}

Включение повторной валидации может привести к дополнительной задержке из-за дополнительных запросов к серверу uWSGI.

Убедитесь, что ваше uWSGI-приложение способно эффективно обрабатывать запросы повторной валидации, чтобы избежать ухудшения производительности.

Использование `uwsgi_cache_revalidate` без надлежащих стратегий инвалидации кэша может привести к несогласованному поведению приложения при неправильном управлении.

uwsgi_cache_background_update Директива `uwsgi_cache_background_update` управляет тем, будет ли кэш обновляться в фоновом режиме, когда запрос не находит данных в кэше в механизме кэширования uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_cache_background_update on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_cache_background_update` используется в контексте блоков `http`, `server` и `location` в конфигурации NGINX. Если эта директива установлена в `on`, NGINX будет инициировать фоновое обновление кэша, когда для конкретного запроса ответ не найден в кэше. Это особенно полезно для снижения задержки для последующих запросов: первый запрос может столкнуться с промахом кэша, но позволяет прозрачно обновить кэшируемое содержимое, пока клиент взаимодействует с сервером. Эта функция оптимизирует производительность, минимизируя время ожидания для пользователей при генерации нового содержимого. Если `uwsgi_cache_background_update` установлена в `off`, NGINX не будет пытаться обновлять кэш для промахов, что означает, что последующие запросы продолжат получать устаревшие или отсутствующие кэшированные ответы, пока новый ответ вручную не попадёт в кэш. В результате приложениям, требующим данных в реальном времени, может быть полезнее механизм фонового обновления, чтобы обеспечивать актуальные ответы без дополнительных задержек. Директива принимает один параметр — `on` или `off`. При использовании этой директивы важно убедиться, что хранилище кэша и приложение uWSGI эффективно настроены для обработки фоновых операций, чтобы избежать перегрузки сервера или ухудшения производительности из-за одновременных фоновых запросов. Кроме того, стратегии кэширования должны быть чётко определены совместно с другими настройками кэширования в конфигурации NGINX.

Пример конфига

uwsgi_cache_path /path/to/cache levels=1:2 keys_zone=my_cache:10m;

location / {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_cache my_cache;
    uwsgi_cache_background_update on;
}

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

Убедитесь, что ваше приложение uWSGI корректно обрабатывает одновременные запросы, когда обновления кэша выполняются в фоновом режиме.

uwsgi_temp_path Директива `uwsgi_temp_path` задаёт путь к временным файлам, используемым модулем uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_temp_path path [path2 path3 path4];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_temp_path` указывает каталог, в котором NGINX сохраняет временные файлы при обработке запросов, отправленных в uWSGI-приложения. Это особенно полезно в случаях, когда большие ответы могут буферизоваться перед отправкой клиенту. По умолчанию эти временные файлы создаются в указанном пути, что позволяет эффективно обрабатывать буферизацию и снижать нагрузку на бэкенд-приложения. Директива принимает от одного до четырёх аргументов, позволяя задать основной каталог и дополнительные подпапки для организации временных файлов. При настройке `uwsgi_temp_path` необходимо учитывать права файловой системы, чтобы NGINX имел права на запись в указанный каталог. Также важно периодически очищать временные файлы, иначе их чрезмерное накопление может привести к проблемам с дисковым пространством. Правильное управление этими файлами помогает поддерживать оптимальную производительность приложений и предотвращать неожиданные ошибки, связанные с ограничениями хранилища. Эту директиву можно разместить в различных контекстах, таких как http, server и location, что делает её гибкой для разных сценариев маршрутизации в конфигурации NGINX. Тщательная настройка этой директивы важна для эффективного управления ресурсами и высокой доступности ваших веб-приложений.

Пример конфига

uwsgi_temp_path /var/tmp/uwsgi;

Убедитесь, что указанный каталог имеет соответствующие права доступа, чтобы NGINX мог записывать временные файлы.

Рассмотрите возможность настройки механизма очистки старых временных файлов, чтобы избежать проблем с дисковым пространством.

uwsgi_max_temp_file_size Устанавливает максимальный размер временных файлов при обработке запросов uWSGI.
httpserverlocation
Синтаксисuwsgi_max_temp_file_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_max_temp_file_size` в NGINX задаёт максимально допустимый размер временных файлов при сохранении тел запросов для uWSGI. Если этот предел превышается, NGINX отклонит запрос с ошибкой 413 (Request Entity Too Large). Это особенно важно для загрузок и помогает предотвратить исчерпание дискового пространства на сервере из-за чрезмерно больших загружаемых или обрабатываемых файлов. Директива задаётся в байтах и может быть указана в контексте `http`, `server` или `location`, что делает её гибкой для разных частей конфигурации. Установка этой директивы позволяет администраторам эффективнее управлять дисковым пространством, ограничивая размер загрузок для конкретного `location` или блока `server`. Важно задавать это значение в соответствии с ожидаемыми размерами файлов в вашем приложении, чтобы обеспечить и производительность, и надёжность. Типичная конфигурация для этой директивы будет выглядеть примерно так: `uwsgi_max_temp_file_size 10m;`, что ограничит временные файлы максимум до 10 мегабайт. В целом рекомендуется отслеживать пространство, занимаемое временными файлами на сервере, и при необходимости корректировать этот параметр в зависимости от сценариев использования приложения.

Пример конфига

location /upload {
    uwsgi_pass 127.0.0.1:9000;
    uwsgi_max_temp_file_size 10m;
}

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

Не все клиенты корректно обрабатывают ошибки 413; убедитесь, что клиентские приложения способны обрабатывать такие ответы.

uwsgi_temp_file_write_size Задает размер временных файлов, используемых для буферизованных ответов uWSGI.
httpserverlocation
Синтаксисuwsgi_temp_file_write_size size;
По умолчанию8k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_temp_file_write_size` управляет максимальным размером временных файлов, которые NGINX использует для хранения буферизованных ответов uWSGI. Когда NGINX обрабатывает ответ от uWSGI сервера, ему может потребоваться временно записать данные в файл перед отправкой ответа клиенту. Эта директива задает предел размера таких временных файлов, что помогает управлять дисковым пространством и оптимизировать производительность в зависимости от ожидаемых размеров ответов от uWSGI сервера. Она принимает один аргумент, который определяет размер в байтах, килобайтах, мегабайтах и т.д., с использованием стандартных суффиксов размера NGINX, таких как 'k' для килобайтов и 'm' для мегабайтов. Эту директиву можно задавать в контекстах `http`, `server` или `location`, что дает гибкость в зависимости от того, насколько тонко вы хотите контролировать размеры временных файлов.

Пример конфига

uwsgi_temp_file_write_size 16k;

Установка слишком низкого значения может привести к частым записям NGINX на диск и снижению производительности.

Если не задано, NGINX по умолчанию использует 8k, что может быть недостаточно для больших ответов.

uwsgi_next_upstream Директива `uwsgi_next_upstream` определяет условия, при которых сервер NGINX попытается передать запрос следующему серверу в группе, если текущий сервер отказал.
httpserverlocation
Синтаксисuwsgi_next_upstream error | timeout | invalid_header | http_status;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_next_upstream` используется при обработке ошибок, возникающих при взаимодействии с upstream UWSGI-серверами. Она позволяет настроить конкретные коды ответов или условия, которые будут вызывать повторную попытку отправки запроса на следующий сервер в группе upstream. Среди допустимых значений — типичные условия отказа, такие как `timeout`, `invalid_header`, а также диапазон HTTP-кодов состояния, указывающих на ошибки (например, `502`, `503`, `504`). Такая гибкость помогает повысить надёжность веб-приложений, предоставляя резервные варианты на случай проблем с сервером. Когда NGINX сталкивается с ошибкой при обработке UWSGI-запроса, совпадающей с одним из указанных условий отказа, он автоматически попытается перенаправить запрос на следующий сервер, определённый в директиве `uwsgi_pass`. Это значительно повышает устойчивость приложения, предотвращая влияние временных ошибок на конечного пользователя. Параметры директивы можно комбинировать, чтобы обеспечить комплексную стратегию повторных попыток, адаптированную к потребностям конкретного приложения.

Пример конфига

location /app {
    uwsgi_pass backend;
    uwsgi_next_upstream error 502 503 504;
}

Убедитесь, что upstream servers способны обрабатывать те же запросы, что и исходный сервер, чтобы избежать несогласованного поведения.

Директива должна использоваться только в контексте директив `uwsgi`, таких как `uwsgi_pass`, в противном случае она не имеет эффекта.

Если несколько upstream servers недоступны, запросы могут попасть в цикл повторных попыток, если не заданы соответствующие условия выхода.

uwsgi_next_upstream_tries Директива 'uwsgi_next_upstream_tries' определяет количество upstream-серверов, к которым NGINX будет пытаться подключиться в случае ошибки при связи с исходным upstream-сервером в режиме uWSGI.
httpserverlocation
Синтаксисuwsgi_next_upstream_tries number;
По умолчанию0
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_next_upstream_tries' используется для указания того, сколько раз NGINX должен пытаться связаться с альтернативным upstream-сервером перед тем, как отклонить запрос. Эта директива работает совместно с модулем uWSGI и применима в контекстах 'http', 'server' и 'location'. Когда NGINX сталкивается с проблемой подключения к указанному upstream-серверу — например, если сервер недоступен или возвращает HTTP-коды ошибок — он попытается подключиться к следующему серверу в списке доступных upstream-серверов до указанного этой директивой количества попыток. По умолчанию значение директивы равно 0, что означает, что NGINX не будет предпринимать повторных попыток при неудачном подключении к upstream-серверу. Установка значения больше нуля (например, 1, 2 и т.д.) позволяет NGINX более гибко обрабатывать временные проблемы на стороне серверов, давая шанс восстановлению сервиса без немедленного отказа запроса. Это может повысить устойчивость приложений при возникновении кратковременных ошибок у upstream-серверов. Значение должно быть положительным целым числом, обозначающим максимальное число попыток повторного подключения к определённым upstream-серверам. Пользователям следует осторожно применять эту директиву, поскольку чрезмерное число повторных попыток может привести к увеличению задержки и потребления ресурсов, если upstream-серверы постоянно находятся в состоянии ошибки. Кроме того, важно отслеживать состояние upstream-серверов и рассмотреть использование проверок состояния, чтобы NGINX маршрутизировал трафик только на доступные и отзывчивые серверы.

Пример конфига

upstream myapp {
    server backend1.example.com;
    server backend2.example.com;
}

location / {
    uwsgi_pass myapp;
    uwsgi_next_upstream_tries 2;
}

Убедитесь, что значение 'uwsgi_next_upstream_tries' является положительным целым числом; в противном случае NGINX не будет предпринимать повторные попытки.

Чрезмерное число повторных попыток может привести к увеличению задержки; внимательно следите за производительностью вашего upstream-сервера.

uwsgi_next_upstream_timeout Директива 'uwsgi_next_upstream_timeout' задаёт таймаут для следующего upstream-запроса, когда предыдущий запрос завершился неудачно в контексте uWSGI.
httpserverlocation
Синтаксисuwsgi_next_upstream_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_next_upstream_timeout` в основном используется в конфигурациях NGINX, где в качестве бэкендного прикладного сервера используется uWSGI. Эта директива задаёт максимальный период времени, который NGINX должен ждать перед попыткой отправить запрос следующему upstream-серверу, если текущий сервер отказал. Это особенно полезно в средах с балансировкой нагрузки, где запросы распределяются между несколькими серверами uWSGI. Директива должна быть задана значением времени, которое может быть указано в секундах или с суффиксом, таким как 'ms' для миллисекунд, 's' для секунд, 'm' для минут или 'h' для часов. Если запрос к upstream-серверу не удался и указанный таймаут ещё не истёк, NGINX немедленно попытается связаться с другим сервером из группы доступных upstream-серверов. Это может улучшить время отклика в приложениях с высокой нагрузкой, поскольку позволяет быстрее переключаться на другие серверы, которые, возможно, смогут успешно обработать запрос. Крайне важно убедиться, что значение, установленное для этой директивы, согласовано с общими настройками таймаутов в вашей конфигурации NGINX для других связанных директив (например, `uwsgi_read_timeout`), поскольку несогласованные значения могут привести к неожиданному поведению при обработке запросов. Кроме того, увеличение этого таймаута без надлежащего мониторинга может привести к длительному ожиданию по запросам, которые в конечном счёте всё равно завершатся неудачей, что может негативно сказаться на опыте пользователей.

Пример конфига

uwsgi_next_upstream_timeout 30s;

Установка очень короткого timeout может привести к частым попыткам failover и увеличению нагрузки на upstream servers.

Отсутствие настройки этого directive совместно с другими timeout directives может привести к неожиданному request handling behavior.

uwsgi_param Директива `uwsgi_param` определяет параметры, которые будут переданы uWSGI server.
httpserverlocation
Синтаксисuwsgi_param name value; [value is optional]
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_param` используется для задания параметров в uWSGI protocol для запросов, перенаправляемых на uWSGI server. Эти параметры помогают настроить переменные окружения запроса, доступные приложению, выполняющемуся на uWSGI server. Директива принимает два или три аргумента: первый должен быть именем параметра, второй — его значением, и необязательный третий аргумент может указывать, передавать ли исходную серверную переменную. Такая гибкость позволяет настраивать обработку запросов в соответствии с конкретными требованиями приложения. При определении `uwsgi_param` важно учитывать, что параметры чувствительны к регистру и должны совпадать с ожидаемыми значениями в вашем uWSGI application. Кроме того, эти определения можно задавать в различных контекстах, таких как `http`, `server` и `location` блоках, что обеспечивает детальный контроль над тем, как разные части вашего приложения взаимодействуют с uWSGI server. Значения, заданные через `uwsgi_param`, могут влиять на такие аспекты, как маршрутизация, логирование или формирование ответов, в зависимости от логики приложения, определённой в самом uWSGI application.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass unix:/tmp/uwsgi.sock;
    uwsgi_param SCRIPT_NAME /app;
    uwsgi_param YOUR_CUSTOM_PARAM value;
}

Убедитесь, что имена параметров соответствуют ожидаемым значениям в приложении uWSGI; они чувствительны к регистру.

Использование ненужных параметров может привести к дополнительной нагрузке или неожиданному поведению.

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

uwsgi_string Директива `uwsgi_string` позволяет задать конкретную строку, которая будет отправлена на сервер приложений uWSGI.
httpserverlocation
Синтаксисuwsgi_string string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_string` используется для указания строкового значения, которое будет передано серверу uWSGI. Это особенно полезно в сценариях, когда в сервер приложений необходимо отправить определённые настройки или команды. Директиву можно размещать в разных контекстах, например, в `http`, `server` и `location`, что обеспечивает гибкость в соответствии с требованиями конфигурации вашего сервера. При использовании директивы `uwsgi_string` вы указываете один аргумент, представляющий содержимое строки. Эта строка может быть заранее определённой командой или любым другим текстом, ожидаемым приложением. Поведение директивы `uwsgi_string` зависит от контекста её использования, что позволяет более тонко контролировать взаимодействие с uWSGI в разных частях конфигурации NGINX. С точки зрения выполнения, когда приходит запрос, соответствующий контексту директивы `uwsgi_string`, NGINX добавит указанную строку к запросу бэкенда uWSGI. Это помогает эффективно управлять коммуникацией между NGINX и приложением uWSGI, гарантируя, что необходимые параметры корректно передаются в ходе жизненного цикла запроса.

Пример конфига

location /myapp {
    uwsgi_pass 127.0.0.1:8000;
    uwsgi_string "my_custom_command";
}

Убедитесь, что строка не содержит специальных символов, если они не экранированы должным образом.

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

uwsgi_pass_header Директива `uwsgi_pass_header` используется для указания заголовков, передаваемых от приложений uWSGI в ответ клиенту.
httpserverlocation
Синтаксисuwsgi_pass_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_pass_header` — это параметр конфигурации в модуле uWSGI для NGINX, который позволяет указывать определённые заголовки, возвращаемые приложением uWSGI, чтобы они передавались клиенту в ответе. Эту директиву можно задавать в контекстах `http`, `server` или `location`, что обеспечивает гибкую настройку для разных частей сервера NGINX. В качестве аргумента директива принимает одно имя заголовка, которое должно совпадать с именем заголовка, включённого приложением uWSGI в его ответ. При использовании директивы `uwsgi_pass_header` будут пересылаться только указанные заголовки, что помогает контролировать, какая информация раскрывается, и гарантирует, что соответствующие заголовки последовательно возвращаются. Это особенно полезно для заголовков, передающих данные, специфичные для приложения, такие как информация о версии, токены безопасности или пользовательские сообщения о состоянии приложения. Избирательная передача заголовков позволяет администраторам повысить безопасность и сократить ненужную передачу данных. Если необходимо передать несколько заголовков, директиву `uwsgi_pass_header` можно объявлять несколько раз в одном и том же блоке конфигурации, каждый раз указывая другой заголовок для пересылки. Общая работа также зависит от конфигурации сервера uWSGI, чтобы гарантировать, что указанные заголовки действительно присутствуют в ответе до того, как NGINX попытается переслать их клиенту.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass my_app;
    uwsgi_pass_header X-My-Custom-Header;
}

Убедитесь, что указанное имя заголовка точно соответствует тому, как оно появляется в ответе uWSGI, включая учет регистра.

Если заголовок не устанавливается приложением uWSGI, он не будет доступен для передачи через `uwsgi_pass_header`, что может привести к путанице.

uwsgi_hide_header Директива `uwsgi_hide_header` удаляет определённые заголовки, возвращаемые в ответах uWSGI.
httpserverlocation
Синтаксисuwsgi_hide_header header_name;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_hide_header` предназначена для повышения безопасности и настройки заголовков, которые возвращаются клиентам в ответах от приложений uWSGI. Когда эта директива присутствует в конфигурации, она явно указывает заголовки, которые должны быть опущены при формировании ответа. Это особенно полезно для предотвращения раскрытия конфиденциальной информации или сведений о приложении, которые обычно могут передаваться через заголовки. Эта директива может располагаться в различных контекстах, включая `http`, `server` и `location`, что позволяет гибко настраивать поведение в зависимости от потребностей приложения. Она принимает один аргумент: имя заголовка, который вы хотите скрыть. Например, чтобы подавить заголовок `X-Powered-By`, используйте `uwsgi_hide_header X-Powered-By;`. Директива интегрируется в процесс обработки запросов и ответов NGINX, перехватывая заголовки во время формирования ответа и гарантируя, что они не попадут к клиенту. Имейте в виду, что неправильное использование этой директивы может привести к неполному контексту ответа, когда некоторые важные заголовки могут быть необходимы клиентскому приложению или промежуточным компонентам. Поэтому её следует использовать взвешенно, в основном для тех заголовков, которые проверены и содержат лишние данные, не влияющие на общую функциональность.

Пример конфига

server {
    location /api {
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_hide_header X-Powered-By;
    }
}

Сокрытие важных заголовков может привести к непредвиденному поведению клиентских приложений.

Убедитесь, что вы скрываете только те заголовки, которые не влияют на функциональность вашего приложения.

uwsgi_ignore_headers Директива uwsgi_ignore_headers управляет тем, какие заголовки из ответа uWSGI игнорируются NGINX.
httpserverlocation
Синтаксисuwsgi_ignore_headers header1 [header2 ...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива uwsgi_ignore_headers используется в NGINX для исключения определённых заголовков из передачи клиенту при обработке ответа от сервера приложений uWSGI. Эта директива может принимать одно или несколько имён заголовков в качестве аргументов, задавая заголовки, которые следует игнорировать. Когда указанное имя заголовка появляется в ответе uWSGI, NGINX не будет включать его в окончательный ответ, отправляемый клиенту, что позволяет более тонко контролировать, какая информация становится доступна клиентам. Эта директива особенно полезна с точки зрения безопасности и конфиденциальности, поскольку некоторые заголовки могут содержать информацию, которую не следует раскрывать клиенту, например внутренние статусы сервера или метаданные, специфичные для приложения. Использование этой директивы в соответствующих контекстах — включая блоки http, server и location — позволяет системным администраторам настроить поведение NGINX при взаимодействии с приложениями uWSGI, обеспечивая раскрытие только необходимой информации и предотвращая утечки чувствительных данных. Кроме того, применение этой директивы может незначительно улучшить время отклика за счёт уменьшения объёма данных, обрабатываемых и отправляемых клиенту. Тщательный выбор заголовков для игнорирования может исключить избыточную передачу информации, которая не представляет интереса или не имеет значения для конечного пользователя.

Пример конфига

uwsgi_ignore_headers X-Powered-By Set-Cookie;

Убедитесь, что указанные заголовки действительно присутствуют в ответе uWSGI; в противном случае это не будет иметь никакого эффекта.

Будьте осторожны при игнорировании заголовков, которые могут быть важны для взаимодействия с клиентом, например cookies, которые управляют сессиями.

uwsgi_ssl_session_reuse Директива uwsgi_ssl_session_reuse управляет повторным использованием SSL-сессий для запросов uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_ssl_session_reuse on | off;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_session_reuse` используется для включения или отключения повторного использования SSL-сессий для uWSGI-запросов, которые проксируются через NGINX. Когда она включена, директива позволяет NGINX использовать существующие параметры SSL-сессии для последующих запросов к тому же бэкенд-серверу, уменьшая накладные расходы на SSL handshake и повышая производительность. Эта директива принимает флаговое значение, где `on` включает повторное использование сессий, а `off` отключает его. По умолчанию это поведение не задано, то есть оно следует настройкам SSL-сессий, определённым глобально или на уровне сервера. При высокой нагрузке включение повторного использования SSL-сессий может привести к улучшению производительности, особенно в окружениях, где за короткий промежуток времени отправляется множество запросов к одному и тому же uWSGI-бэкенду, поскольку это избегает полного SSL handshake для каждого запроса. Однако, если бэкенд-сервер uWSGI не настроен на корректную обработку или распознавание повторно используемых SSL-сессий, это может привести к непредвиденному поведению. Поэтому важно убедиться, что все части системы одинаково настроены для корректной обработки повторно используемых SSL-сессий. Также рекомендуется протестировать конфигурацию в тестовой среде перед развёртыванием изменений в продакшн.

Пример конфига

uwsgi_pass unix:/var/run/uwsgi/your_app.sock;
uwsgi_ssl_session_reuse on;

Убедитесь, что ваш бэкенд-сервер uWSGI поддерживает повторное использование SSL-сессий для корректной работы.

Использование `off` может быть необходимым, если возникают проблемы с обработкой сессий на бэкенде.

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

uwsgi_ssl_protocols Директива `uwsgi_ssl_protocols` задаёт SSL-протоколы для связи между NGINX и вышестоящими серверами uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_protocols protocol_list;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_protocols` используется для настройки SSL-протоколов, разрешённых при обмене данными по SSL между NGINX и вышестоящими серверами uWSGI. Это особенно важно для гарантии того, чтобы защищённые соединения использовали только версии SSL/TLS, соответствующие требованиям безопасности. Директива принимает один или несколько аргументов, соответствующих SSL-протоколам, например `TLSv1`, `TLSv1.1` или `TLSv1.2`. Указывая требуемые SSL-протоколы, администраторы могут обеспечить использование только безопасных версий и избежать устаревших или небезопасных протоколов. Если протоколы не указаны, поведение по умолчанию может зависеть от версии NGINX и параметров компиляции, поэтому явная конфигурация часто рекомендуется в целях безопасности. Для корректного применения `uwsgi_ssl_protocols` директиву необходимо разместить в одном из следующих контекстов: `http`, `server` или `location`. Это даёт администраторам гибкость задавать разные SSL-протоколы в зависимости от архитектурных требований и конкретной конфигурации сервера.

Пример конфига

http {
    uwsgi_ssl_protocols TLSv1.2 TLSv1.3;
}

Убедитесь, что указанные протоколы поддерживаются версией OpenSSL, используемой с NGINX.

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

uwsgi_ssl_ciphers Директива uwsgi_ssl_ciphers задаёт список шифров для SSL-соединений с серверами uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_ciphers string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

'uwsgi_ssl_ciphers' директива используется в конфигурациях NGINX, которые управляют защищёнными соединениями с uWSGI-приложениями через FastCGI или аналогичные протоколы. Она задаёт набор шифров, который сервер uWSGI должен использовать для SSL-соединений, обеспечивая защищённое и зашифрованное взаимодействие между NGINX и uWSGI backend. Эта директива играет ключевую роль в применении политик безопасности и может помочь смягчить потенциальные уязвимости за счёт ограничения набора допустимых шифров. Поэтому тщательный выбор наборов шифров важен, поскольку он влияет на уровень безопасности данных, передаваемых по SSL-соединениям. Директива 'uwsgi_ssl_ciphers' принимает один аргумент — строку, представляющую список шифров. Этот список может быть задан с использованием формата строки шифров OpenSSL. Важно отметить, что правильно настроенный список шифров повышает общую безопасность и соответствие различным стандартам безопасности. В частности, эта директива может располагаться в различных контекстах, включая http, server или location блоки в конфигурации NGINX, что даёт гибкость в том, как задавать и применять SSL-шифры для разных сайтов или приложений, размещённых на сервере.

Пример конфига

uwsgi_ssl_ciphers 'HIGH:!aNULL:!MD5';

Убедитесь, что установленная библиотека OpenSSL поддерживает указанные ciphers.

Использование устаревших или слабых ciphers может подвергнуть ваше приложение уязвимостям.

Будьте осторожны при применении этой директивы глобально или локально, поскольку при неправильной настройке она может повлиять на весь SSL-трафик.

uwsgi_ssl_name Директива `uwsgi_ssl_name` задаёт имя хоста, используемое для SSL-соединений с сервером uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_name hostname;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_name` используется при настройке NGINX для связи с бэкендом uWSGI по SSL. Эта директива позволяет администраторам указать SSL‑имя хоста, которое NGINX должен предъявлять серверу uWSGI при установлении защищённого соединения. Это особенно полезно в сценариях, когда сервер бэкенда настроен на требование конкретного имени хоста для проверки сертификата или верификации имени хоста. Директива `uwsgi_ssl_name` принимает один аргумент — имя хоста, которое должно использоваться. Она поддерживается в контекстах `http`, `server` и `location`, что позволяет использовать её на разных уровнях иерархии конфигурации NGINX. Она играет важную роль в обеспечении безопасного обмена данными между NGINX и экземплярами uWSGI, способствуя лучшим практикам защиты серверов приложений. При установке указанное значение `uwsgi_ssl_name` включается в сообщение ClientHello как Server Name Indication (SNI) до начала SSL-рукопожатия, что позволяет серверу бэкенда выбрать соответствующий SSL‑сертификат для возврата. Если директива настроена неверно или имя хоста не совпадает с ожидаемым значением на стороне сервера uWSGI, SSL‑соединения могут завершаться ошибкой.

Пример конфига

location /app {
    include uwsgi_params;
    uwsgi_pass backend;
    uwsgi_ssl_name example.com;
}

Убедитесь, что указанный hostname действителен и соответствует настройкам сертификата сервера uWSGI.

Будьте осторожны с опечатками или неправильным регистром в hostname, так как SSL-соединения не будут установлены, если указанное имя не соответствует ожиданиям сервера.

uwsgi_ssl_server_name Директива `uwsgi_ssl_server_name` указывает, отправлять ли имя сервера на сервер uWSGI по SSL.
httpserverlocation
Синтаксисuwsgi_ssl_server_name on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_server_name` применяется в разных контекстах, включая `http`, `server` и `location`. Если она включена, она инструктирует NGINX передавать имя сервера, указанное в заголовке `Host`, в приложение uWSGI при взаимодействии по SSL. Это особенно полезно в случаях, когда сервер uWSGI должен знать исходное имя сервера из-за конфигураций виртуального хостинга. При значении 'on' NGINX будет включать переменную `SERVER_NAME` в uWSGI-запросы, что позволяет более точно маршрутизировать и управлять поведением на основе конфигурации виртуального хоста. Параметр требует только флага без дополнительных аргументов; простая установка директивы включает её функциональность. Важно убедиться, что целевое приложение uWSGI корректно интерпретирует переданное имя сервера, чтобы не было неправильной маршрутизации запросов или ошибок при обработке HTTP-ответов. Эта директива улучшает совместимость и интеграцию между NGINX и uWSGI в случаях SSL-терминации, что делает её полезным вариантом для разработчиков, стремящихся сохранить контекст для своих веб-приложений при использовании защищённых соединений. Регулировка этого параметра может потребоваться, если вы сталкиваетесь с проблемами обработки запросов на основе имени сервера в сценариях, где на одной и той же бэкенд‑среде размещены приложения для нескольких доменов.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;
    # other ssl configurations

    location / {
        uwsgi_pass unix:/path/to/your.sock;
        uwsgi_ssl_server_name on;
        uwsgi_param SCRIPT_NAME '';
        uwsgi_param PATH_INFO $uri;
    }
}

Убедитесь, что ваше приложение uWSGI настроено так, чтобы корректно распознавать переменную SERVER_NAME.

Эта директива применяется только при использовании SSL; убедитесь, что ваш server block настроен для SSL-подключений.

Будьте осторожны при использовании этой директивы с несколькими server blocks, так как при неправильной настройке это может привести к непредвиденным последствиям.

uwsgi_ssl_verify Директива `uwsgi_ssl_verify` настраивает проверку SSL-сертификатов для запросов uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_ssl_verify on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

В NGINX директива `uwsgi_ssl_verify` служит для включения или отключения проверки SSL, когда NGINX выполняет запросы к uWSGI-серверу по SSL. Эта директива принимает логический флаг в качестве аргумента, указывающий, должна ли выполняться проверка SSL-сертификатов. При включённой проверке NGINX проверяет SSL-сертификаты, представленные uWSGI-сервером, чтобы убедиться в их действительности и доверенности, что помогает предотвращать атаки типа «человек посередине» и обеспечивает защищённую связь. Эта директива часто используется вместе с `uwsgi_pass`, когда запросы перенаправляются на uWSGI-бэкенд, настроенный для обработки PHP-приложений, Python-приложений или других фреймворков, использующих протокол uWSGI. Её можно задавать в контекстах `http`, `server` или `location`, что обеспечивает гибкость конфигурации в зависимости от желаемой области действия проверки SSL. Директива особенно важна в производственных средах, где критична защищённая передача данных. Когда проверка включена (`on`), NGINX также требует соответствующий файл центра сертификации (CA) или набор (bundle) для подтверждения действительности SSL-сертификата сервера. Если он установлен в `off`, NGINX не будет проверять SSL-сертификат, что может оставить сервер уязвимым к атакам подмены. Учитывая важность этой настройки, директива должна быть тщательно сконфигурирована в соответствии с требованиями безопасности приложения.

Пример конфига

uwsgi_ssl_verify on;
uwsgi_pass https://backend-uwsgi;

Убедитесь, что файл CA правильно настроен, если включена проверка SSL.

Не устанавливайте его в 'off' в рабочих средах, так как это ставит безопасность под угрозу.

Проверьте SSL-конфигурацию сервера uWSGI, если при включении проверки возникают проблемы.

uwsgi_ssl_verify_depth Директива `uwsgi_ssl_verify_depth` задаёт глубину проверки SSL-сертификатов для связи с uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_verify_depth depth;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_verify_depth` используется для указания глубины проверки SSL-сертификатов, когда NGINX общается с серверами uWSGI по SSL. Эта настройка особенно полезна в сценариях, когда NGINX действует как обратный прокси для приложений uWSGI, оснащённых SSL-сертификатами. Настраивая глубину проверки, вы контролируете, сколько уровней сертификатов будет проверено в цепочке сертификатов. Глубина отражает, через сколько промежуточных сертификатов NGINX пройдет перед достижением доверенного корневого сертификата. Правильная настройка гарантирует, что недействительные промежуточные сертификаты не позволят установить соединение, что способствует более надёжной практике безопасности. Большее значение глубины означает более тщательную проверку, но может усложнить настройку сертификатов, если им не уделено должного внимания. Директиву можно задавать в различных контекстах, включая `http`, `server` и `location`, что даёт гибкость в зависимости от того, на каких уровнях конфигурации требуется защищать SSL-соединения. Установка значения `0` отключает проверку цепочки сертификатов, в то время как значение `1` проверяет до уровня непосредственного сертификата, что, как правило, достаточно для большинства конфигураций без излишней сложности.

Пример конфига

uwsgi_ssl_verify_depth 2;

Установка слишком высокого значения может привести к сбоям соединения, если промежуточные сертификаты отсутствуют.

Значение 0 отключит проверку, что может подвергнуть приложение рискам безопасности.

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

uwsgi_ssl_trusted_certificate Директива 'uwsgi_ssl_trusted_certificate' указывает файл доверенного CA-сертификата для проверки SSL-соединений от серверов uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_trusted_certificate path/to/certificate.crt;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_ssl_trusted_certificate' используется в NGINX для установления защищённого SSL-соединения с серверами uWSGI. Эта директива указывает путь к файлу, содержащему доверенные CA (Certificate Authority) сертификаты. При обработке запросов uWSGI по SSL NGINX должен проверить SSL-сертификат, предоставленный сервером uWSGI. Эта проверка необходима, чтобы убедиться, что клиент взаимодействует с доверенным сервером uWSGI, и что соединение защищено. Параметром этой директивы является один путь к файлу сертификата. NGINX загрузит указанный файл для проверки сертификатов, предоставляемых сервером uWSGI, во время SSL handshake. Этот дополнительный уровень безопасности помогает предотвратить атаки типа «man-in-the-middle» и обеспечивает конфиденциальность данных, передаваемых по сети. 'uwsgi_ssl_trusted_certificate' следует указывать в соответствующем контексте — а именно http, server или location. В рамках настроек SSL-соединений она может сочетаться с другими SSL-директивами для бесшовной конфигурации защищённого обмена.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    uwsgi_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
    # Additional SSL configurations...
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/path/to/uwsgi.sock;
    }
}

Убедитесь, что путь к файлу сертификата указан правильно и доступен процессу NGINX.

Использование неправильного формата или устаревших сертификатов может привести к сбоям SSL‑соединения.

Несколько сертификатов можно поместить в один файл — убедитесь, что они правильно объединены.

uwsgi_ssl_crl Директива 'uwsgi_ssl_crl' указывает файл CRL (Certificate Revocation List), который будет использоваться для SSL-соединений uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_ssl_crl path_to_crl_file;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_ssl_crl' используется в контексте обработки SSL-соединений uWSGI в NGINX. Установив эту директиву, вы можете задать путь к файлу, содержащему список отозванных сертификатов, который используется для проверки сертификатов, представленных клиентами во время SSL-рукопожатий. Это важно для повышения безопасности, поскольку гарантирует, что сертификаты, которые больше не действительны или были отозваны, не принимаются сервером. CRL обрабатывается сервером NGINX для отклонения клиентов с отозванными сертификатами, тем самым поддерживая надёжную SSL-безопасность. Эту директиву можно указывать в контекстах `http`, `server` или `location` — она принимает единственный аргумент, представляющий путь к файлу CRL. Если указанный файл неверен или недоступен для чтения, NGINX зафиксирует ошибку и может некорректно обрабатывать соединения, связанные с отозванными сертификатами. Крайне важно, чтобы файл CRL поддерживался в актуальном состоянии и был доступен процессам сервера NGINX, чтобы избежать проблем с безопасностью. В целом использование директивы 'uwsgi_ssl_crl' обеспечивает дополнительный уровень защиты, контролируя, какие SSL-сертификаты считаются действительными — это критично для приложений, работающих с конфиденциальными данными или требующих высокого уровня доверия и соответствия.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;
    
    uwsgi_ssl_crl /etc/ssl/crl.pem;
    
    location / {
        uwsgi_pass unix:/tmp/uwsgi.sock;
        
        uwsgi_ssl_certificate /etc/ssl/certs/your_cert.pem;
        uwsgi_ssl_certificate_key /etc/ssl/private/your_key.pem;
    }
}

Убедитесь, что файл CRL правильно отформатирован и доступен для NGINX; в противном случае сервер может некорректно проверять сертификаты.

Не забудьте перезагрузить или перезапустить NGINX после обновления файла CRL, чтобы изменения вступили в силу.

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

uwsgi_ssl_certificate Директива `uwsgi_ssl_certificate` указывает SSL-сертификат для соединений uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_ssl_certificate path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_certificate` в NGINX используется для указания SSL-сертификата, который сервер будет использовать при подключении к бэкенду приложения uWSGI по зашифрованному каналу SSL. Эта директива обеспечивает защищённую передачу данных между NGINX и uWSGI, гарантируя сохранность данных при передаче. Директива принимает один аргумент — путь к файлу SSL-сертификата в формате PEM. В контекстах `http`, `server` или `location` директива `uwsgi_ssl_certificate` ожидает корректный путь к файлу сертификата. Если эта конфигурация задана, NGINX будет использовать этот сертификат при инициировании SSL handshake с процессом uWSGI. Важно убедиться, что указанный сертификат корректно отформатирован и доступен процессам-воркерам NGINX; в противном случае SSL-соединения с бэкендом uWSGI могут завершиться ошибкой, например SSL handshake failures. Необходимо сопоставлять директиву `uwsgi_ssl_certificate` с соответствующей директивой `uwsgi_ssl_certificate_key`, которая указывает приватный ключ, соответствующий сертификату. В совокупности эти настройки обеспечивают защищённые соединения от NGINX к uWSGI, способствуя безопасной архитектуре веб-приложений, использующих этот канал связи.

Пример конфига

server {
    listen 443 ssl;
    server_name example.com;

    uwsgi_ssl_certificate /etc/ssl/certs/my_cert.pem;
    uwsgi_ssl_certificate_key /etc/ssl/private/my_key.pem;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/var/run/uwsgi.sock;
    }
}

Убедитесь, что путь к файлу сертификата указан правильно и файл доступен для чтения NGINX.

Не забудьте установить соответствующую директиву `uwsgi_ssl_certificate_key`, иначе SSL-подключения могут не работать.

Использование неправильного формата сертификата или просроченного сертификата может привести к ошибкам SSL handshake.

uwsgi_ssl_certificate_key Настраивает приватный ключ для SSL-сертификата, используемого uWSGI.
httpserverlocation
Синтаксисuwsgi_ssl_certificate_key path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_certificate_key` используется в конфигурациях NGINX для указания пути к файлу, содержащему приватный ключ, связанный с SSL-сертификатом, используемым для связи с приложениями uWSGI по SSL. Эта директива особенно важна, когда требуется обеспечить защищённую связь путём шифрования данных, обмениваемых между NGINX и uWSGI. Обычно она применяется вместе с директивой `uwsgi_ssl_certificate`, которая указывает на сам SSL-сертификат. Директива принимает один аргумент — путь к файлу приватного ключа — и может быть задана в контекстах `http`, `server` или `location`. Когда NGINX обрабатывает запросы для uWSGI, он считывает этот файл с приватным ключом для установления защищённого соединения. Правильные права доступа к файлу ключа необходимы для предотвращения несанкционированного доступа; как правило, файл ключа должен быть читаем только пользователем, выполняющим рабочий процесс NGINX. В случаях, когда приватный ключ указан некорректно или файл недоступен из-за проблем с правами доступа, NGINX не сможет запуститься или перезагрузиться и выдаст ошибку. Поэтому крайне важно убедиться, что путь к файлу указан верно и соблюдены необходимые меры безопасности при настройке SSL для uWSGI.

Пример конфига

uwsgi_ssl_certificate_key /etc/ssl/private/nginx.key;

Убедитесь, что путь к файлу корректен и доступен пользователю NGINX.

Убедитесь, что закрытый ключ соответствует SSL-сертификату, указанному в `uwsgi_ssl_certificate`.

Некорректные права доступа к файлу ключа могут привести к сбоям при запуске или перезагрузке NGINX.

uwsgi_ssl_certificate_cache Директива 'uwsgi_ssl_certificate_cache' задаёт поведение кэширования SSL-сертификатов при использовании протокола uWSGI в NGINX, повышая производительность за счёт сокращения времени SSL-рукопожатий.
httpserverlocation
Синтаксисuwsgi_ssl_certificate_cache size time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'uwsgi_ssl_certificate_cache' позволяет задать, как кэшируются SSL-сертификаты при обработке запросов uWSGI в NGINX. При настройке NGINX кэширует SSL-сертификат на указанный период, что позволяет устанавливать последующие соединения быстрее без повторного согласования SSL. Это может значительно повысить производительность приложения за счёт уменьшения задержек во время SSL-рукопожатий. Параметры этой директивы могут задавать размер кэша, период кэширования и любые дополнительные параметры, необходимые для кэширования. Указание параметров кэша позволяет пользователям оптимизировать использование ресурсов в зависимости от их конкретных требований к производительности и возможностей сервера. Например, больший размер кэша может привести к лучшей производительности, но за счёт увеличения потребления памяти. Директива должна располагаться в соответствующем контексте, таком как http, server или location, и полезна для приложений, которые постоянно используют SSL и требуют частых соединений, например веб-приложений, использующих протоколы uWSGI.

Пример конфига

uwsgi_ssl_certificate_cache 10m 30s;

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

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

uwsgi_ssl_password_file Указывает путь к файлу, содержащему пароль SSL для подключений к uWSGI backend.
httpserverlocation
Синтаксисuwsgi_ssl_password_file path;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_password_file` используется в конфигурациях с участием NGINX, когда он подключается к uWSGI backend по SSL. Эта директива позволяет указать путь к файлу, который содержит пароль, необходимый для расшифровки SSL-сертификата. Это особенно полезно, когда SSL-сертификат защищён паролем, и NGINX нуждается в этом пароле, чтобы установить защищённое соединение с uWSGI server. Параметр этой директивы — одна строка, указывающая путь к файлу. При запуске NGINX читает этот файл, чтобы получить пароль. Крайне важно правильно установить права доступа к файлу пароля, чтобы предотвратить несанкционированный доступ, поскольку раскрытие этого файла может скомпрометировать безопасность ваших SSL-подключений. Директива может использоваться в различных контекстах, включая блоки `http`, `server` и `location`, что обеспечивает гибкость в зависимости от того, как настроены SSL-конфигурации на NGINX server.

Пример конфига

uwsgi_ssl_password_file /etc/ssl/private/uwsgi_pass.key;

Убедитесь, что файл паролей имеет правильные права доступа, чтобы предотвратить доступ неавторизованных пользователей.

Убедитесь, что указанный путь к файлу корректен и доступен пользователю NGINX.

Если файл отсутствует или недоступен для чтения, NGINX может не запуститься или выдавать ошибки во время выполнения.

uwsgi_ssl_conf_command Директива `uwsgi_ssl_conf_command` задаёт команды конфигурации SSL для подключений uWSGI в NGINX.
httpserverlocation
Синтаксисuwsgi_ssl_conf_command directive value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `uwsgi_ssl_conf_command` позволяет отправлять определённые команды конфигурации SSL серверу uWSGI. Эта директива может использоваться в контекстах `http`, `server` и `location`, что даёт гибкость в обеспечении безопасности связи между NGINX и uWSGI. Ожидаются два обязательных аргумента: директива конфигурации SSL и соответствующее ей значение, что позволяет тонко настраивать параметры SSL для каждого блока `server` или `location`. Данная директива непосредственно взаимодействует с настройками соединения uWSGI, и её параметры должны быть оформлены как строки, в соответствии с типичными конфигурациями SSL. Крайне важно убедиться, что значения, передаваемые в качестве аргументов, являются допустимыми SSL-командами, распознаваемыми сервером uWSGI, поскольку неверные настройки могут привести к сбоям соединения или снижению уровня безопасности. Помещение конфигурации SSL непосредственно в контекст NGINX позволяет более интегрированно и упорядоченно управлять SSL-соединениями, особенно в приложениях, требующих защищённой сквозной передачи данных. Поскольку директива может объявляться на разных уровнях конфигурации сервера, разработчики могут применять модульный подход к конфигурации, сохраняя при этом лучшие практики безопасности. Тем не менее тщательная проверка аргументов на соответствие поддерживаемым SSL-командам uWSGI необходима, чтобы избежать возможных эксплуатационных проблем.

Пример конфига

uwsgi_ssl_conf_command "ssl_certificate" "/etc/ssl/certs/cert.pem";

Убедитесь, что предоставленные SSL-команды распознаются сервером uWSGI, чтобы избежать ошибок времени выполнения.

Директиве требуется ровно два аргумента; указание большего или меньшего числа приведет к ошибке конфигурации.

Неправильные пути или некорректные настройки могут привести к сбоям при SSL-рукопожатии между NGINX и uWSGI.

xml_entities Директива 'xml_entities' включает или отключает кодирование сущностей XML в ответах NGINX.
httpserverlocation
Синтаксисxml_entities on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'xml_entities' управляет тем, как сущности XML обрабатываются внутри NGINX, особенно влияя на представление отдельных символов в XML-документах, обслуживаемых сервером. Когда включена, эта директива гарантирует, что специальные символы, такие как `<`, `>` и `&`, правильно кодируются в соответствующие ссылки на сущности XML, что помогает соответствовать стандартам XML. Это особенно важно при выдаче XML-файлов или приложений, использующих XML-структуры данных, чтобы обеспечить сохранность данных и предотвратить некорректное интерпретирование XML-парсерами. При установке любой экземпляр символов, имеющих особое значение в XML, будет заменяться на соответствующие ссылки на сущности всякий раз, когда сервер формирует ответ, включающий XML-контент. Это помогает избегать потенциальных ошибок разбора со стороны клиентов, ожидающих корректно сформированный XML. Директиву можно размещать в разных контекстах, таких как http, server и location, что позволяет тонко настраивать ответы в зависимости от места применения.

Пример конфига

http {
    xml_entities on;

    server {
        location /api {
            xml_entities on;
        }
    }
}

Убедитесь, что это не конфликтует с другими директивами, отвечающими за форматирование вывода.

Не включайте XML-сущности, если вы обслуживаете простой текстовый контент, так как это может привести к ненужным накладным расходам.

xslt_stylesheet Директива `xslt_stylesheet` указывает XSLT-шаблон, который следует применить к XML-ответам в NGINX.
location
Синтаксисxslt_stylesheet path | path;
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива `xslt_stylesheet` используется в NGINX для определения одного или нескольких XSLT-шаблонов, которые будут применяться к XML-ответам при их запросе. Эта директива объявляется внутри блока `location` и может принимать один или несколько аргументов, каждый из которых указывает путь к XSLT-файлам или параметры, которые будут применяться в процессе преобразования. Когда формируется XML-ответ, NGINX использует указанные XSLT-шаблоны для преобразования XML в другой формат, например HTML, прежде чем данные будут переданы в браузер клиента. При использовании `xslt_stylesheet` важно корректно настроить пути к вашим XSLT-файлам и убедиться, что XML-ответы имеют правильный формат для преобразования. Обработка XSLT может также зависеть от других директив, связанных с обработкой XML в NGINX, таких как `xslt_types` и `xslt_last_modified`. Кроме того, успешное преобразование требует наличия в конфигурации NGINX корректного XSLT-процессора, и любые ошибки в XSLT могут привести к сбою преобразования XML-ответа. Директива поддерживает как абсолютные, так и относительные пути, основанные на корневом каталоге NGINX. Директива работает таким образом, что если указано несколько шаблонов, они будут применяться последовательно в том порядке, в котором указаны, что облегчает выполнение сложных манипуляций с XML, требующих нескольких преобразований.

Пример конфига

location /xml {
    xslt_stylesheet /path/to/stylesheet.xsl;
}

Убедитесь, что путь к файлам XSLT указан правильно; в противном случае преобразование не сработает.

Не забудьте проверить файлы XML и XSLT отдельно на наличие синтаксических ошибок перед развертыванием в рабочей среде.

Если указаны несколько файлов XSLT, порядок их применения влияет на итоговый результат.

xslt_param Директива `xslt_param` позволяет задавать параметры для XSLT-преобразований в NGINX.
httpserverlocation
Синтаксисxslt_param name value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `xslt_param` специально разработана для упрощения передачи параметров в таблицы стилей XSLT при их обработке в NGINX. Это может быть особенно полезно для динамической обработки XML-данных во время веб-запросов. Каждый параметр задаётся как пара «имя-значение», где имя соответствует параметру XSLT внутри таблицы стилей, а значение представляет собой данные, которые будут переданы этому параметру. На практике эту директиву можно использовать в контекстах `http`, `server` или `location`, и она может встречаться несколько раз для задания разных параметров для XSLT-процессора. Когда запускается XSLT-преобразование, эти параметры автоматически становятся доступными в таблице стилей, что позволяет получать настраиваемые результаты в зависимости от изменяющихся входных данных или условий. Важно отметить, что параметры, заданные директивой `xslt_param`, являются локальными для контекста, в котором они объявлены. Таким образом, они влияют на любые XSLT-преобразования, происходящие в том же контексте, что позволяет гибко настраивать поведение в зависимости от конкретных маршрутов или условий сервера.

Пример конфига

location /transform {
    xslt_param param1 value1;
    xslt_param param2 value2;
    # other directives...
}

Использование конфликтующих имен параметров может привести к непредвиденному поведению, поскольку более поздние определения перезапишут более ранние.

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

xslt_string_param Директива `xslt_string_param` позволяет задавать параметры для обработки XSLT в конфигурациях NGINX.
httpserverlocation
Синтаксисxslt_string_param parameter_name value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `xslt_string_param` используется в конфигурации NGINX для передачи строковых параметров процессору XSLT. Эта директива применима в контекстах `http`, `server` и `location`. Она принимает два параметра: имя параметра и его значение. Параметры используются в процессе преобразования, когда XSLT применяется к XML-данным, обслуживаемым NGINX. Роль директивы особенно важна, когда необходимо передавать динамические данные в XSLT-шаблоны для генерации персонализированных выходных данных на основе входящих запросов. Например, если у вас есть XSLT-шаблон, которому требуется имя конкретного пользователя для отображения персонализированного содержимого, вы можете использовать эту директиву, чтобы задать параметр имени с соответствующим значением в конфигурации NGINX. Возможность задавать несколько таких параметров позволяет передавать в процесс преобразования различные данные, расширяя динамические возможности доставки контента через XSLT. При использовании `xslt_string_param` необходимо внимательно сопоставлять имена параметров с теми, которые ожидаются XSLT-шаблонами, чтобы обеспечить бесшовную интеграцию и получение ожидаемого результата.

Пример конфига

location /transform {
    xslt_stylesheet /path/to/stylesheet.xsl;
    xslt_string_param user_name "John Doe";
    xslt_string_param display_message "Welcome to our website!";
}

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

Использование значений, не являющихся строками, может привести к непредвиденному поведению при XSLT-преобразовании.

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

xslt_types Директива xslt_types определяет MIME-типы для XSLT-ответов в NGINX.
httpserverlocation
Синтаксисxslt_types type1 [type2 ... typeN];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `xslt_types` используется для указания типов MIME, к которым должны применяться XSLT-преобразования. Эта директива позволяет задать несколько типов MIME в качестве аргументов, которые NGINX затем будет связывать с обработкой XSLT. Когда поступает запрос на ресурс с одним из этих типов MIME, NGINX применяет указанную таблицу стилей XSLT для преобразования содержимого перед отправкой клиенту. На практике это означает, что вы можете настроить конфигурацию NGINX так, чтобы автоматически преобразовывать XML-документы в HTML (или другие форматы) на основе указанных типов MIME. Это особенно полезно для приложений, которые обеспечивают динамическое отображение содержимого. Каждый указанный тип должен быть допустимым типом MIME, используемым в HTTP-ответах. Если клиент запрашивает ресурс, соответствующий типу, определённому в `xslt_types`, сервер выполнит преобразование с использованием заданной таблицы стилей XSLT.

Пример конфига

http {
    xslt_types text/xml application/xml;
}

Убедитесь, что указанные MIME-типы корректно заданы в контексте, где определён `xslt_types`.

Учтите возможное влияние на производительность при преобразовании больших документов или при сложной обработке XSLT.

xslt_last_modified Директива `xslt_last_modified` позволяет серверу отвечать с отметкой времени последнего изменения XML-документа, обработанного с помощью XSLT.
httpserverlocation
Синтаксисxslt_last_modified on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Когда директива `xslt_last_modified` включена, она приказывает NGINX добавлять заголовок `Last-Modified` к ответам, содержащим XML-документы, обработанные с помощью XSLT. Этот заголовок указывает, когда ресурс был изменён в последний раз, что может быть полезно для кэширования и оптимизации. Это особенно актуально в сценариях, когда клиенты могут кешировать такие документы и выигрывать, зная свежесть содержимого. Директива может быть установлена в значения 'on' или 'off' и применяется в различных контекстах, таких как `http`, `server` и `location`. При включении она будет учитывать дату последнего изменения исходных XML-данных, подвергающихся преобразованию, а не только сам XSLT-шаблон. В результате, если XML-файл не изменился со времени предыдущего ответа, клиенты смогут эффективно использовать механизмы кэширования и не будут загружать одни и те же данные повторно. Имейте в виду, что эта директива должна использоваться вместе с настройками обработки XSLT, чтобы иметь эффект. Если преобразований XSLT не происходит, установка директивы в 'on' не даст заметного результата. Поведение директивы полезно для оптимизации производительности и сокращения ненужного расхода полосы пропускания, так как позволяет клиентам принимать обоснованные решения по кэшированию на основе актуальности обслуживаемого ресурса.

Пример конфига

server {
    listen 80;
    location / {
        xslt_last_modified on;
        # additional configurations for XML and XSLT processing
    }
}

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

Если обработка XSLT не настроена, эта директива не будет иметь эффекта.

perl_modules Директива 'perl_modules' указывает модули Perl, которые должны быть загружены в NGINX.
http
Синтаксисperl_modules module_name;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `perl_modules` в NGINX позволяет указать один или несколько модулей Perl, которые должны быть загружены при запуске сервера NGINX. Эта функциональность особенно полезна для веб-приложений, которым требуется Perl для выполнения определённых задач или скриптов при обработке запросов. Включая соответствующие модули Perl, разработчики могут расширять возможности NGINX, позволяя использовать Perl-скрипты и функции в конфигурациях NGINX. Директива принимает один аргумент — имя модуля Perl или модулей, которые требуется загрузить. Несколько модулей можно указать, разделяя их пробелом. Когда NGINX инициализируется, он загружает указанные модули в память, делая их доступными для использования в различных контекстах, например в конфигурациях для location blocks или при обработке определённых запросов. Такой подход обеспечивает большую гибкость и интеграцию Perl-кода с нативными возможностями NGINX. Важно убедиться, что указанные модули установлены и доступны в окружении NGINX. Когда сервер NGINX обрабатывает запросы, он вызывает эти модули Perl в соответствии с конфигурацией, что позволяет динамически выполнять код на Perl. Разработчикам также следует учитывать возможные последствия для производительности, поскольку загрузка большого количества или ресурсоёмких модулей Perl может повлиять на время отклика сервера.

Пример конфига

perl_modules My::Module;  
perl_modules Some::OtherModule;

Убедитесь, что модули Perl установлены правильно и доступны процессу NGINX.

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

Проверьте имена модулей на синтаксические ошибки, поскольку NGINX не предоставляет подробной обратной связи об ошибках при загрузке модулей.

perl_require Директива `perl_require` загружает модуль Perl для использования в конфигурациях NGINX.
http
Синтаксисperl_require module;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `perl_require` позволяет указать модуль Perl, который будет загружен во время выполнения в контексте NGINX. Эта директива полезна, когда вы хотите расширить функциональность NGINX с помощью пользовательского кода на Perl, позволяя управлять различными аспектами конвейера обработки запросов с помощью скриптов. Аргумент, ожидаемый этой директивой, — это путь к модулю Perl, который может быть указан как относительным, так и абсолютным. Процесс загрузки выполняется только один раз, на этапе инициализации сервера NGINX, что гарантирует доступность указанного модуля на протяжении всего жизненного цикла сервера. При задании этой директивы необходимо убедиться, что указанный модуль правильно оформлен и что выполнены все зависимости, требуемые модулем Perl. В случае неудачной загрузки модуля NGINX записывает ошибку и не запускается, поэтому критически важно тестировать и проверять корректность пути и содержимого модуля. Поскольку эта директива работает в контексте `http`, она влияет на весь сервер и все конфигурации, вложенные в этот контекст, позволяя централизованно управлять скриптами на Perl, которые могут помогать в обработке запросов в нескольких location или server blocks.

Пример конфига

http {
    perl_require /path/to/your/module.pm;
}

Путь к Perl-модулю должен быть корректным; в противном случае NGINX не сможет запуститься.

Убедитесь, что необходимые модули Perl установлены на сервере.

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

perl Директива 'perl' позволяет использовать Perl-скрипты внутри NGINX для обработки запросов.
locationlimit_except
Синтаксисperl subroutine_name;
По умолчаниюnone
Контекстlocation, limit_except
МодульNGINX HTTP Core

Описание

Директива 'perl' позволяет встраивать Perl-код непосредственно в конфигурации NGINX для манипуляции запросами по мере их прохождения через сервер. Определяя Perl subroutine, эта директива обеспечивает большую гибкость и контроль при обработке запросов — например, изменение заголовков запросов, генерация динамических ответов или реализация пользовательской логики на основе параметров запроса. Директива может принимать один аргумент, который обычно указывает имя Perl subroutine, которая должна быть выполнена. Такая интеграция особенно полезна для продвинутой маршрутизации, изменения контента или реализации сложной логики приложения без накладных расходов, связанных с внешними скриптами или приложениями. При настройке Perl subroutine выполняется для каждого запроса, соответствующего заданному контексту (location или limit_except), что делает её мощным инструментом для окружений, требующих динамического поведения в зависимости от входящих запросов. Модель обработки допускает синхронное выполнение, то есть пока запрос обрабатывается, другие запросы могут не обрабатываться до завершения выполнения Perl-кода. Это может повлиять на производительность при неправильном управлении, особенно при высокой нагрузке. Кроме того, любые ошибки, генерируемые Perl-кодом, могут привести к ответу 500 Internal Server Error, поэтому важно реализовать корректную обработку ошибок внутри Perl-скрипта.

Пример конфига

location /example {
    perl my_perl_handler;
}

Убедитесь, что модуль Perl установлен и правильно настроен в NGINX.

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

Убедитесь, что имя subroutine совпадает с именем, определённым в вашем Perl-коде.

perl_set Директива `perl_set` позволяет задавать переменную с помощью кода Perl в конфигурации NGINX.
http
Синтаксисperl_set $variable_name 'perl_code';
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `perl_set` предназначена для того, чтобы позволить пользователям определять переменные NGINX на основе произвольных выражений Perl. Эта директива особенно полезна в ситуациях, когда значения нужно вычислять динамически. Директива принимает два параметра: первый — имя переменной, а второй — выражение Perl, которое будет использоваться для установки значения этой переменной. Когда NGINX встречает директиву `perl_set`, он выполняет указанный код Perl во время фазы обработки запроса, что позволяет определить значение указанной переменной непосредственно перед её использованием. Это делает `perl_set` подходящей для создания сложных значений переменных на основе контекста HTTP‑запроса, таких как заголовки, сведения о соединении или динамически генерируемое содержимое. Для использования этой директивы важно, чтобы модуль Perl был включён в NGINX, и рекомендуется провести тщательное тестирование перед развёртыванием в рабочем окружении из‑за возможного влияния на производительность. Параметры `perl_set` включают имя переменной с префиксом `$` и выражение Perl в кавычках. Например, если вы хотите вычислить переменную на основе какого‑то параметра запроса, это требует правильного синтаксиса и работоспособного Perl‑скрипта, который корректно взаимодействует с контекстом NGINX. Поведение этих переменных определяется контекстом, в котором они определены, что может влиять на область видимости и доступность на разных фазах обработки запроса.

Пример конфига

perl_set $dynamic_value 'sub { return "Hello, World!"; }';

Убедитесь, что модуль Perl скомпилирован и загружен в NGINX перед использованием этой директивы.

Некорректный синтаксис в Perl-выражении может привести к ошибкам конфигурации или сбоям во время выполнения.

Производительность может пострадать при чрезмерном использовании или неправильном написании, поскольку Perl-интерпретатор будет оценивать выражение при каждом запросе.

output_buffers Директива output_buffers настраивает количество и размер буферов, используемых для чтения тела ответа от upstream-сервера.
httpserverlocation
Синтаксисoutput_buffers number size;
По умолчанию8 16k;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `output_buffers` задаёт количество и размер буферов, которые NGINX использует для хранения ответа, отправляемого клиенту. Когда формируется ответ, NGINX должен эффективно управлять выводом, особенно для больших ответов. Эта директива помогает оптимизировать такое управление, позволяя администратору указать, сколько буферов и какого размера должен быть каждый буфер в зависимости от ожидаемого размера ответов. Она особенно полезна для настройки производительности: меньшее число больших буферов может снизить накладные расходы, но при этом привести к большему потреблению памяти. Синтаксис директивы требует двух параметров: первый — количество буферов, второй — размер каждого буфера. Например, `output_buffers 2 16k;` настраивает NGINX на использование 2 буферов по 16 килобайт каждый. Такое выделение означает, что до 32 килобайт могут быть буферизированы одновременно до начала отправки данных клиенту. Директиву можно объявлять в контекстах `http`, `server` или `location`, что обеспечивает гибкость для разных частей конфигурации сервера. Необходимо внимательно выбирать подходящие размеры и количество буферов, исходя из шаблонов трафика и размеров ответов. Слишком маленький буфер может привести к частым записям NGINX клиенту, что снижает производительность, тогда как чрезмерно большие буферы могут привести к расточительному использованию памяти. Рекомендуется постоянно мониторить размеры ответов и производительность при тонкой настройке этих значений.

Пример конфига

http {
    output_buffers 4 32k;
}

Использование неподходящих размеров может привести к неэффективному использованию памяти и снижению производительности.

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

variables_hash_max_size Директива 'variables_hash_max_size' задаёт максимальный размер хеш-таблицы, используемой для хранения переменных NGINX.
http
Синтаксисvariables_hash_max_size size;
По умолчанию512
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'variables_hash_max_size' задаёт максимальное количество элементов, разрешённых в хеш-таблице, которая хранит внутренние переменные, используемые NGINX. По умолчанию эта хеш-таблица имеет определённый предел размера, который может влиять на производительность при обработке большого количества динамических переменных, особенно в сложных конфигурациях или когда множество переменных используется в одном контексте. Эта директива задаётся в контексте 'http' и принимает один аргумент, указывающий максимальный размер. Увеличение размера хеша может улучшить производительность за счёт уменьшения количества коллизий и времени поиска при получении переменных. Однако выделение чрезмерно большого размера хеша может привести к напрасному расходованию оперативной памяти. Идеальный размер зависит от конкретного сценария использования и ожидаемых шаблонов использования переменных. Важно найти баланс между использованием памяти и требованиями к производительности для достижения наилучшей настройки. Если эта директива установлена в значение меньше, чем количество фактически используемых переменных, избыточные переменные могут оказаться недоступными, что потенциально приведёт к нежелательным побочным эффектам при обработке запросов. Поэтому после изменения этого параметра рекомендуется провести тщательное тестирование, чтобы убедиться, что критические переменные не отбрасываются.

Пример конфига

http {
    variables_hash_max_size 1024;
}

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

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

variables_hash_bucket_size Директива 'variables_hash_bucket_size' устанавливает размер бакетов хеша, используемых для хранения переменных NGINX.
http
Синтаксисvariables_hash_bucket_size size;
По умолчанию64
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'variables_hash_bucket_size' настраивает размер бакетов хеша, который конкретно используется сервером NGINX для хранения переменных в памяти. Этот параметр имеет решающее значение для оптимизации выделения памяти под хранение переменных: меньший размер бакета может привести к выделению большего числа бакетов, что увеличивает использование памяти и потенциально ухудшает производительность из‑за большего числа коллизий хеша. С другой стороны, больший размер бакета снижает количество требуемых бакетов, но безусловно повышает потребление памяти. Поэтому выбор подходящего размера бакета — это компромисс, зависящий от таких факторов, как число используемых переменных и общая эффективность использования памяти в настройке сервера. Указанное значение обычно бывает степенью двойки и может быть отрегулировано в зависимости от ожидаемой нагрузки сервера и его архитектуры. Директиву можно задавать в контексте `http`, что позволяет ей влиять на все экземпляры переменных, используемые в конфигурации сервера NGINX. Настройка этого параметра может существенно повлиять на производительность разрешения переменных, особенно в сложных конфигурациях или при высокой нагрузке, где обращение к переменным происходит часто. Рекомендуется провести тестирование производительности с разными значениями, чтобы найти наиболее эффективную настройку для конкретной среды.

Пример конфига

http {
    variables_hash_bucket_size 128;
}

Установка слишком малого размера корзины может увеличить количество коллизий хэша, что приведёт к снижению производительности.

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

Чтобы изменения этой директивы вступили в силу, требуется перезагрузка сервера.

server_names_hash_max_size Директива 'server_names_hash_max_size' задаёт максимальный размер таблицы хешей, используемой для хранения имён серверов в NGINX.
http
Синтаксисserver_names_hash_max_size size;
По умолчанию512
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива 'server_names_hash_max_size' в NGINX используется для указания максимального размера таблицы хешей, которая хранит имена серверов. Это важный параметр, поскольку NGINX полагается на хеширование имён серверов для эффективной маршрутизации входящих запросов в соответствующий серверный блок. Когда количество имён серверов превышает этот предел, механизм хеширования может стать менее эффективным, что может привести к ухудшению производительности при обработке запросов. При настройке этой директивы учитывайте, что если количество указанных имён серверов превышает заданный 'server_names_hash_max_size', NGINX автоматически увеличит размер таблицы хешей, что может привести к увеличению использования памяти. Также важно отметить, что хотя эта директива определяет максимальный размер таблицы хешей, фактический размер, используемый NGINX во время работы, может варьироваться в зависимости от числа имён серверов и особенностей алгоритма хеширования. Правильная настройка этого значения может помочь обеспечить оптимальную производительность NGINX, особенно в средах с большим количеством виртуальных хостов или сложными конфигурациями. Эта директива может использоваться в контексте 'http' в конфигурационных файлах NGINX и будет влиять на все серверные блоки в пределах заданной области. Для администраторов, ответственных за сайты с высоким трафиком или имеющих большое количество конфигураций серверов, внимательное рассмотрение этой директивы может минимизировать накладные расходы на поиск при обработке запросов.

Пример конфига

http {
    server_names_hash_max_size 1024;
}

Установка слишком низкого значения может привести к коллизиям server name и к снижению производительности из-за чрезмерной memory reallocation.

Server names должны быть определены до использования этой directive, чтобы hash table имела правильный размер.

server_names_hash_bucket_size Задаёт размер хэш-ячейки для хранения имён серверов.
http
Синтаксисserver_names_hash_bucket_size size;
По умолчанию32
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива "server_names_hash_bucket_size" в NGINX управляет размером хэш-бакетов, используемых для хранения имён серверов в конфигурации. Когда задаётся несколько имён серверов, NGINX хеширует эти имена, чтобы повысить эффективность поиска и скорость сопоставления входящих запросов с определёнными server-блоками. Размер бакетов влияет на эффективность хэш-таблицы: меньшие размеры могут приводить к коллизиям, которые хэш-таблица должна разрешать, что потенциально сказывается на производительности. Директива особенно важна для конфигураций с большим количеством или длинными именами серверов, так как позволяет тонко настраивать потребление памяти и характеристики производительности. Параметр этой директивы задаётся в байтах, и значение, как правило, должно быть степенью двойки. Выбор подходящих значений зависит от конкретной нагрузки сервера и количества определённых имён серверов. В сценариях с большим количеством имён или особенно длинными именами увеличение размера бакета может помочь поддерживать эффективное разрешение хэшей, поскольку каждый бакет в идеале должен содержать меньше записей, чтобы минимизировать время поиска. Важно избегать чрезмерно больших значений, которые могут привести к пустой трате памяти, в зависимости от конфигурации и нагрузки сервера.

Пример конфига

http {
    server_names_hash_bucket_size 64;
}

Установка слишком низкого значения может привести к коллизиям хешей, что негативно скажется на производительности.

Использование значений, не являющихся степенью двойки, может привести к неоптимальному распределению по корзинам.

server Директива `server` определяет блок виртуального сервера в конфигурациях NGINX.
http
Синтаксисserver { ... }
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `server` является фундаментальным элементом конфигураций NGINX и позволяет определить виртуальный сервер, который обрабатывает входящие запросы на основе указанных адресов прослушивания и других параметров конфигурации. Каждый блок `server` может иметь собственный набор директив, включая `listen`, `server_name`, `location` и другие, что даёт тонкую настройку того, как обрабатываются запросы. Задавая разные блоки `server`, один экземпляр NGINX может обслуживать несколько доменов или поддоменов, каждый с отдельными настройками. Внутри блока `server` директивы типа `listen` определяют IP-адрес и порт, на которые будет отвечать сервер, а `server_name` указывает имена доменов, которым должен отвечать этот сервер. Дополнительные параметры конфигурации — например, SSL-настройки в блоке `server`, предназначенном для HTTPS — также могут быть включены для обработки защищённых соединений. Важно отметить, что порядок блоков `server` имеет значение, поскольку NGINX сопоставляет запросы с именами серверов по принципу первого совпадения, если несколько блоков используют один и тот же адрес прослушивания.

Пример конфига

server {
    listen 80;
    server_name example.com;
    location / {
        root /var/www/example;
        index index.html index.htm;
    }
}

Убедитесь, что каждый блок `server` имеет уникальную директиву `server_name` или `listen`, чтобы избежать непреднамеренной обработки запросов несколькими блоками.

Некорректное использование директив SSL без соответствующей настройки `listen` может привести к неправильной работе HTTPS-запросов.

Вложенные директивы `server` не разрешены и вызовут ошибки конфигурации.

connection_pool_size Директива connection_pool_size задаёт размер пула соединений, используемого HTTP-сервером NGINX для обработки клиентских запросов.
httpserver
Синтаксисconnection_pool_size number;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива connection_pool_size в NGINX позволяет задать количество одновременно активных соединений, которые сервер может обслуживать через пул. Этот параметр имеет решающее значение для оптимизации производительности, особенно при высокой нагрузке, так как он определяет, сколько клиентов может обслуживаться одновременно без существенного увеличения задержки или конкуренции за ресурсы. Когда пул соединений исчерпан, новые подключения вынуждены ждать, пока существующие соединения не закроются или не будут возвращены в пул. Эту директиву можно настроить в контексте 'http' или 'server', что даёт гибкость при определении ограничений в зависимости от требований приложения. При установке этого значения важно учитывать системные ресурсы сервера (такие как память и CPU), а также ожидаемую нагрузку. Слишком большое значение может привести к увеличенному потреблению ресурсов, тогда как слишком маленькое ограничит масштабируемость сервера. Директива connection_pool_size обычно используется в сценариях, где ожидается большое количество одновременных соединений. Правильная настройка этого параметра может привести к повышению отзывчивости и пропускной способности сервера под нагрузкой, поскольку она обеспечивает наличие достаточного числа соединений для эффективной обработки входящих запросов.

Пример конфига

http {
    connection_pool_size 256;
    server {
        listen 80;
        server_name example.com;
        location / {
            proxy_pass http://backend;
        }
    }
}

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

Слишком маленький размер пула может привести к увеличению задержек из-за ожидания соединений.

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

request_pool_size Директива `request_pool_size` задаёт размер пулов памяти, выделяемых для обработки запросов.
httpserver
Синтаксисrequest_pool_size size;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `request_pool_size` определяет, сколько памяти выделяется для каждого входящего запроса в NGINX. Настроив эту директиву, администраторы могут оптимизировать использование памяти для запросов в соответствии с потребностями приложения. Это особенно полезно в сценариях с большим количеством одновременных запросов, что позволяет лучше управлять памятью и потенциально повышать общую производительность. Размер, указанный для `request_pool_size`, применяется в процессе обработки запроса, поэтому больший пул может позволить более эффективно обрабатывать ресурсоёмкие операции в рамках одного запроса. Этот параметр имеет ключевое значение, так как влияет на то, как NGINX управляет временными данными, буферами и другими ресурсами, связанными с запросом. Малый пул может привести к увеличению операций выделения и освобождения памяти, что при высокой нагрузке способно вызвать проблемы с производительностью. Важно отметить, что память, выделенная для запросов, отделена от других пулов памяти, используемых NGINX для обработки соединений и буферизации, и поэтому должна настраиваться исходя из ожидаемой нагрузки и типов запросов, обрабатываемых сервером.

Пример конфига

http {
    request_pool_size 32k;
}

Установка `request_pool_size` слишком низко может привести к увеличению выделения памяти и накладных расходов при обработке запросов, что вызовет ухудшение производительности.

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

client_header_timeout Устанавливает таймаут для чтения заголовка запроса клиента.
httpserver
Синтаксисclient_header_timeout time;
По умолчанию60s
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `client_header_timeout` задаёт максимальное время, в течение которого сервер будет ждать, пока клиент отправит заголовки запроса. Значение указывается в секундах; если период таймаута превышен, NGINX закроет соединение и вернёт клиенту ошибку. Эта директива полезна для предотвращения блокировки сервера медленными клиентами, которые не отправляют заголовки вовремя. Значение таймаута можно настроить глобально в контексте http или для конкретных server blocks. Таймаут применяется к чтению полного заголовка запроса, который включает как строку запроса, так и все заголовки, отправленные клиентом. Если запрос превышает этот лимит времени, соединение прерывается, чтобы освободить ресурсы сервера и поддерживать производительность.

Пример конфига

http {
    client_header_timeout 30s;
    server {
        # Server configuration
    }
}

Установка слишком малого значения может привести к преждевременному отключению действительных клиентов.

Эта директива не действует, если сервер также управляет таймаутами на upstream-сервере или на стороне клиента.

Изменения этой директивы требуют перезагрузки NGINX, чтобы вступить в силу.

client_header_buffer_size Устанавливает размер буфера, используемого для чтения заголовков клиентских запросов.
httpserver
Синтаксисclient_header_buffer_size size;
По умолчанию1k;
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `client_header_buffer_size` в NGINX позволяет задать размер буфера, выделяемого для чтения заголовков входящих клиентских запросов. Это важно для управления тем, сколько данных заголовков NGINX может обработать за один раз, прежде чем начнёт сохранять дополнительные данные заголовков в других буферах. Когда клиент отправляет HTTP-заголовки, они обрабатываются NGINX, и если суммарный размер заголовков превышает указанное значение буфера, NGINX будет использовать более крупные буферы для размещения данных. Это помогает предотвратить проблемы с большими заголовками, например те, которые возникают при некоторых схемах аутентификации и конфигурациях cookie. Эта директива особенно важна в сценариях, где ожидаются большие заголовки из‑за увеличенных размеров cookie или других пользовательских заголовков. Если буфер задан слишком маленьким, это может привести к ошибкам, таким как `413 Request Entity Too Large`, или к увеличению задержки при обработке запросов с большими заголовками. Администраторам следует осторожно устанавливать это значение, так как чрезмерное увеличение может привести к ненужному потреблению памяти, особенно при высокой нагрузке или при обработке большого числа одновременных соединений. Директива определяется в контекстах `http` и `server`, что делает её гибкой для использования в глобальной или в специфичных для сервера конфигурациях.

Пример конфига

server {
    listen 80;
    server_name example.com;

    client_header_buffer_size 2k;
}

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

Изменения этой директивы требуют перезапуска NGINX для вступления в силу.

large_client_header_buffers Директива 'large_client_header_buffers' настраивает количество и размер буферов, используемых для чтения больших заголовков запросов клиента в NGINX.
httpserver
Синтаксисlarge_client_header_buffers number size;
По умолчанию4 8k | 4 16k
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'large_client_header_buffers' используется для установки максимального количества и размера буферов, которые выделяются для чтения заголовков запросов клиента, когда они превышают размер по умолчанию. Это особенно полезно при работе с клиентами, отправляющими необычно большие заголовки, например при наличии большого количества файлов cookie или длинных URL. Директива принимает два параметра: первый задаёт количество буферов, а второй — размер каждого буфера. Когда NGINX получает запрос, он пытается считать заголовки в указанные буферы. Если общий размер заголовков превышает ёмкость, выделенную этой директивой, NGINX ответит ошибкой '400 Bad Request'. Администраторы могут корректировать эти значения в зависимости от ожидаемых размеров заголовков от клиентов. Например, если сервер ожидает большие файлы cookie из-за интенсивного отслеживания состояния пользователя, увеличение размера буфера поможет избежать ненужных ошибок и улучшить пользовательский опыт. Для эффективного использования этой директивы важно контролировать реальные размеры заголовков и соответственно настраивать размеры буферов. Также помните, что установка слишком большого размера буфера без необходимости может привести к увеличению использования памяти и потенциальным проблемам с производительностью.

Пример конфига

http {
    large_client_header_buffers 16 32k;
}

Установка слишком большого buffer size может привести к проблемам с памятью, особенно при высокой нагрузке.

Если выделенных buffers недостаточно для header sizes, клиенты получат 400 Bad Request error.

The directive действует глобально в http context или может применяться в конкретных server blocks. Учитывайте conflicting settings.

ignore_invalid_headers Директива `ignore_invalid_headers` управляет тем, будет ли NGINX игнорировать недопустимые заголовки в HTTP-запросах.
httpserver
Синтаксисignore_invalid_headers on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `ignore_invalid_headers` — это параметр конфигурации в NGINX, который позволяет администраторам управлять тем, как сервер обрабатывает недопустимые HTTP‑заголовки, полученные в запросах. Когда значение установлено в 'on', NGINX будет игнорировать любые недопустимые заголовки вместо того, чтобы сразу отклонять запрос. Это может быть полезно в сценариях, когда клиент может отправлять повреждённые заголовки, не соответствующие спецификациям HTTP, что позволяет лучше восстановиться после таких ошибок без отбрасывания всего запроса. Директива принимает флаговый аргумент, либо 'on', либо 'off'. Если установлено 'on', сервер будет обрабатывать запрос нормально, даже если он содержит недопустимые заголовки. Напротив, при значении 'off', которое является поведением по умолчанию, сервер будет отклонять запрос и возвращать ответ с ошибкой при встрече недопустимых заголовков. Эта настройка применима как в блоке HTTP, так и в контекстах `server`, что даёт гибкость в том, как отдельные экземпляры `server` могут обрабатывать запросы с потенциально проблемными заголовками.

Пример конфига

http {
    ignore_invalid_headers on;

    server {
        listen 80;
        location / {
            proxy_pass http://backend;
        }
    }
}

Установка этой директивы в положение 'on' может привести к потенциальным рискам безопасности, если invalid headers могут быть злоумышленно созданы для эксплуатации уязвимостей приложения.

Всегда тщательно тестируйте приложение при изменении этого параметра, поскольку игнорирование invalid headers может привести к непредвиденному поведению или ошибкам приложения.

merge_slashes Директива 'merge_slashes' используется для управления тем, как NGINX обрабатывает несколько подряд идущих косых черт в URI.
httpserver
Синтаксисmerge_slashes on | off;
По умолчаниюon
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'merge_slashes' в NGINX определяет поведение обработки нескольких слэшей ('/') в запрошенном URI. Когда значение установлено в 'on', директива заставляет NGINX объединять последовательные слэши в один, фактически сокращая избыточность в пути URI. Например, запрос '///example' будет преобразован в '/example'. Такое поведение может способствовать более чистым URI и предотвращать потенциальные проблемы, которые могут возникнуть при наличии нескольких слэшей в пути. Напротив, когда 'merge_slashes' установлена в 'off', NGINX сохраняет оригинальный запрос без изменения слэшей, то есть '///example' останется как есть. Это позволяет отдавать определённые URI, где последовательные слэши могут иметь значение. Директива может быть особенно полезна в ситуациях, когда семантика обработки URI требует строгого соблюдения оригинального пути запроса без модификаций. Использование этой директивы особенно актуально в контексте безопасности или при взаимодействии с внешними приложениями, которые интерпретируют слэши по-разному. Она может влиять на маршрутизацию запросов и на возможную интерпретацию URI бэкенд-системами.

Пример конфига

http {
    merge_slashes off;
    server {
        location / {
            # additional configurations
        }
    }
}

Установка 'merge_slashes' в 'off' может привести к неоднозначности при обработке URL, влияя на поведение маршрутизации.

Учтите, что изменение настройки 'merge_slashes' может потребовать тестирования, чтобы гарантировать совместимость с существующими маршрутами приложения.

underscores_in_headers Директива `underscores_in_headers` позволяет использовать символы подчеркивания в именах HTTP-заголовков.
httpserver
Синтаксисunderscores_in_headers on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

По умолчанию NGINX не разрешает использование подчеркиваний в именах HTTP-заголовков по соображениям безопасности, в частности чтобы избежать возможных конфликтов, связанных с поведением парсинга заголовков. Директива `underscores_in_headers` изменяет это ограничение. Она может быть установлена в 'on' или 'off', где 'on' разрешает использование подчеркиваний в именах заголовков. Это особенно полезно при работе с конкретными API или клиентами, которые зависят от наличия подчеркиваний в именах заголовков. Эту директиву можно использовать в контекстах `http` или `server`, что позволяет задавать глобальную или специфичную для сервера конфигурацию. Когда она включена, она применяется ко всем заголовкам, обрабатываемым NGINX, влияя как на входящие заголовки запросов, так и на исходящие заголовки ответов.

Пример конфига

http {
    underscores_in_headers on;

    server {
        location / {
            # server configuration
        }
    }
}

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

Убедитесь, что функциональность, зависящая от подчеркиваний, тщательно протестирована после изменения конфигурации.

location Директива `location` определяет, как NGINX должен обрабатывать запросы на основе URI.
serverlocation
Синтаксисlocation [ = | ~ | ~* | ^~ ] uri { ... }
По умолчаниюnone
Контекстserver, location
МодульNGINX HTTP Core

Описание

Директива `location` в NGINX используется для определения особой обработки конкретных запрошенных URI или шаблонов URI. Она позволяет применять разные конфигурации в зависимости от части URL, которая следует за именем сервера. Директива может располагаться внутри блока `server` или быть вложена в другой блок `location` для создания более специализированного поведения. При определении `location` можно указывать точные совпадения, префиксы или регулярные выражения. Например, `location /images/` соответствует любому запросу, начинающемуся с `/images/`, в то время как `location = /` соответствует только запросам, направленным к корневому пути. Это означает, что запросы к `/images/logo.png` будут обрабатываться `location /images/`, но не `location = /`. Для более сложных требований к сопоставлению также можно использовать регулярные выражения с модификаторами `~` и `~*`, которые обозначают, соответственно, регистрозависимое и регистронезависимое совпадение. Кроме того, внутри блока `location` можно указывать директивы такие как `proxy_pass`, `rewrite` или любые другие директивы NGINX, относящиеся к обработке HTTP. Такая гибкость обеспечивает детальный контроль над тем, как обрабатываются различные запросы, повышая способность сервера NGINX эффективно и адекватно обслуживать разные типы запросов в зависимости от их URI.

Пример конфига

server {
    listen 80;
    server_name example.com;

    location / {
        root /var/www/html;
        index index.html;
    }

    location /images/ {
        root /var/www/images;
    }
}

Использование неправильно вложенных блоков `location` может привести к непредвиденному поведению.

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

Перекрывающиеся locations без корректной специфичности могут вызвать путаницу при обработке запросов.

listen Директива 'listen' задаёт IP-адрес и порт, которые прослушивает серверный блок.
server
Синтаксисlisten [address] [port] [options];
По умолчаниюnone
Контекстserver
МодульNGINX HTTP Core

Описание

Директива 'listen' в модуле HTTP Core NGINX указывает сетевой адрес и порт, на которые будет отвечать серверный блок. Она принимает различные параметры, позволяющие детально настраивать поведение, включая версию IP (IPv4 или IPv6), номера портов и типы сокетов (включая UNIX-доменные сокеты). Типичное использование директивы позволяет NGINX обрабатывать трафик, направленный на заданную комбинацию IP и порта, перенаправляя входящие запросы в соответствующий серверный блок на основе этих параметров. Синтаксис допускает несколько директив 'listen' в одном серверном блоке для указания нескольких пар IP/порт или для настройки одного и того же серверного блока на одновременную обработку трафика IPv4 и IPv6. Например, конфигурация может включать `listen 80;` для обработки стандартного HTTP-трафика на порту 80. Дополнительные опции позволяют задавать такие параметры, как размер очереди (backlog), статус сервера по умолчанию и настройки SSL. При использовании этой директивы пользователям следует учитывать поведение NGINX по умолчанию: при определении нескольких операторов 'listen' NGINX создаёт сервер по умолчанию для любых несопоставленных запросов. Понимание того, как настраивать эти параметры, существенно влияет на то, как NGINX управляет сетевыми соединениями, балансировкой нагрузки и ограничениями безопасности в зависимости от заданных привязок сети.

Пример конфига

server {
    listen 80;
    server_name example.com;
}

server {
    listen 443 ssl;
    server_name secure.example.com;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private.key;
}

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

Только один серверный блок может быть настроен как сервер по умолчанию для данной директивы listen; используйте опцию 'default_server' с осторожностью.

Если вы используете несколько директив 'listen', остерегайтесь возможных конфликтов или непредвиденного поведения при маршрутизации запросов.

server_name Директива 'server_name' определяет доменные имена, за которые отвечает серверный блок в NGINX.
server
Синтаксисserver_name name1 name2 ...;
По умолчаниюnone
Контекстserver
МодульNGINX HTTP Core

Описание

Директива 'server_name' в NGINX используется внутри серверного блока, чтобы указать, на какие доменные имена или IP-адреса сервер должен отвечать. Это особенно полезно для виртуального хостинга, когда несколько доменов могут размещаться на одном сервере. Директива принимает один или несколько аргументов-имен, которые могут включать символы подстановки для соответствия нескольким именам, например `*.example.com` для совпадения с любым поддоменом `example.com`. Важно правильно объявлять эту директиву, поскольку от этого зависит, как NGINX направляет входящие запросы в соответствующий серверный блок. Когда запрос приходит, NGINX проверяет HTTP-заголовок `Host`, чтобы определить, какой 'server_name' соответствует этому запросу. Если хост в запросе соответствует одному из определённых имён в серверном блоке, для обработки запроса используется соответствующая конфигурация этого сервера. Если точного совпадения нет, NGINX попытается использовать серверный блок, в котором указан `default_server`, если определено несколько блоков. При сопоставлении приоритет отдается точным именам перед шаблонами с подстановкой; кроме того, имеет значение порядок серверных блоков, как указано в `nginx.conf`. Если ни одна конфигурация сервера не подходит, клиенту будет возвращена ошибка 404 Not Found.

Пример конфига

server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        root /var/www/example;
        index index.html;
    }
}

Убедитесь, что указано действительное доменное имя; неверное имя приведёт к тому, что NGINX не обработает соответствующий server block.

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

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

types_hash_max_size Устанавливает максимальный размер таблицы хешей для обработки MIME-типов в NGINX.
httpserverlocation
Синтаксисtypes_hash_max_size size;
По умолчанию512
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`types_hash_max_size` директива управляет максимальным размером таблицы хешей, которую NGINX использует для хранения MIME-типов. Она определяет максимально возможное число записей, которые может содержать таблица хешей, что обеспечивает эффективное соответствие расширений файлов их MIME-типам. При установке значения этой директивы NGINX выделяет достаточно памяти для заданного размера, повышая способность обрабатывать широкий набор типов файлов без ухудшения производительности. Аргумент, передаваемый в `types_hash_max_size`, обычно является положительным целым числом. Если размер хеша превышен, NGINX перейдёт к использованию менее эффективного способа хранения. Правильная настройка этого значения с учётом ожидаемого числа MIME-типов может существенно улучшить производительность сервера при обработке запросов к файлам с определёнными типами содержимого. Учтите, что эта директива актуальна в контекстах, таких как `http`, `server` и `location`. Она важна для конфигураций, обслуживающих разнообразные типы файлов, обеспечивая оптимальную производительность в процессе сопоставления. Следует избегать чрезмерно большого значения, так как это может привести к ненужному увеличению использования памяти. Напротив, слишком низкое значение может вызвать узкие места в производительности. Поэтому рекомендуется мониторить приложение и корректировать эту директиву на основе наблюдаемых потребностей.

Пример конфига

http {
    types_hash_max_size 2048;
}

Установка слишком низкого значения может привести к снижению производительности из-за коллизий хэшей.

Установка слишком высокого значения неоправданно увеличивает потребление памяти.

types_hash_bucket_size Директива 'types_hash_bucket_size' задаёт размер корзины хеширования для таблицы соответствия MIME-типов в NGINX.
httpserverlocation
Синтаксисtypes_hash_bucket_size size;
По умолчанию64;
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'types_hash_bucket_size' в NGINX позволяет администраторам указать размер корзин хеширования, используемых для хранения MIME-типов. Эта директива важна для оптимизации производительности, поскольку хеш-таблица используется для хранения отображений расширений файлов в соответствующие MIME-типы, которые определяются при запросах файлов. Если запрашиваемый MIME-тип отсутствует в хеш-таблице, серверу приходится создавать новую запись, что может привести к ухудшению производительности, если корзины слишком малы. Размер каждой корзины обычно указывается в байтах и должен быть установлен в зависимости от ожидаемого числа MIME-типов, используемых приложением. Директива принимает параметр, указывающий размер корзины. Рекомендуемый размер обычно определяется исходя из конкретного варианта использования и ожидаемой сложности отображений MIME-типов в приложении. Если существует большое количество различных MIME-типов, увеличение размера корзины может помочь уменьшить время поиска и количество коллизий в хеш-таблице. Администраторам серверов важно тестировать и профилировать свои конфигурации NGINX, чтобы определить оптимальное значение этой директивы, особенно в средах, где производительность имеет критическое значение.

Пример конфига

http {
    types_hash_bucket_size 128;
    include mime.types;
}

Установка слишком малого размера может привести к коллизиям хэша и снижению производительности.

Чрезмерно большой размер бакетов может привести к перерасходу памяти, особенно если количество MIME-типов невелико.

Изменения этой директивы требуют перезагрузки конфигурации NGINX, чтобы они вступили в силу.

types Директива 'types' в NGINX определяет MIME types на основе расширений файлов.
httpserverlocation
Синтаксисtypes { extension mime-type; ... };
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `types` в NGINX используется для определения MIME types, которые будут назначаться файлам, выдаваемым веб-сервером, на основе их расширений. Эту директиву можно указывать внутри контекстов `http`, `server` или `location`, что позволяет тонко управлять тем, как разные файлы обрабатываются в зависимости от их типа. Каждая запись в директиве `types` состоит из расширения файла, за которым следует соответствующий MIME type, что позволяет серверу точно передавать клиентам тип содержимого файлов. Когда поступает запрос к файлу, NGINX сверяет расширение запрошенного файла с определениями, указанными в директиве `types`. Если совпадение найдено, NGINX включит соответствующий заголовок `Content-Type` в ответ. Это обеспечивает корректную интерпретацию файла браузером или любым другим получающим его клиентом. Например, файл с расширением `.css` обычно будет иметь MIME type `text/css`, тогда как файл `.html` будет отдаваться с MIME type `text/html`. Важно отметить, что директива `types` может быть переопределена на уровнях контекстов `server` или `location`, что позволяет задавать специфическое поведение в разных частях конфигурации. NGINX поставляется с набором MIME types по умолчанию, указанным в файле `mime.types`, который также можно подключить с помощью инструкции `include`, что предоставляет более широкий набор часто используемых MIME types без необходимости ручного определения.

Пример конфига

types {
    text/html html;
    text/css css;
    application/javascript js;
    image/png png;
    image/jpeg jpeg jpg;
};

Убедитесь, что MIME types заданы правильно; неверные типы могут привести к некорректной обработке файлов клиентами.

MIME types, определенные в более специфичном контексте (server или location), переопределяют те, которые определены в более общем контексте (http).

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

default_type Директива `default_type` задаёт тип MIME по умолчанию для файлов и ответов, когда конкретный тип не определён.
httpserverlocation
Синтаксисdefault_type mime_type;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `default_type` в NGINX определяет тип MIME по умолчанию, который должен использоваться для ответов, когда сервер не может определить тип содержимого по расширению файла или другим факторам. Эта директива особенно полезна в ситуациях, когда отдаются файлы без стандартных расширений или когда конфигурация не содержит специальных сопоставлений для некоторых типов файлов. Задав тип по умолчанию, вы гарантируете клиентам получение корректного заголовка Content-Type, что помогает браузерам правильно интерпретировать и обрабатывать данные. Директиву можно определить в нескольких контекстах: `http`, `server` и `location`, что обеспечивает гибкость при её применении в разных областях конфигурации. Аргумент для `default_type` может быть стандартным типом MIME, например 'text/html', 'application/json' или любым другим допустимым типом MIME. Её расположение в конфигурации может определять, будут ли указанный тип применять ко всем запросам или только к тем, которые находятся в конкретном блоке `server` или `location`. Если тип по умолчанию не задан и NGINX не может определить тип файла, он не установит заголовок Content-Type, что может привести к проблемам с некорректной обработкой ответа клиентами. Поэтому часто рекомендуется явно задавать тип по умолчанию, чтобы обеспечить предсказуемое поведение для отдаваемого содержимого.

Пример конфига

http {
    default_type text/html;
    server {
        location / {
            root   /usr/share/nginx/html;
        }
    }
}

Будьте осторожны при переопределении типов по умолчанию в вложенных контекстах; более конкретные директивы будут иметь приоритет.

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

root Директива 'root' указывает корневой каталог файлов, которые NGINX обслуживает для 'location' или 'server block'.
httpserverlocationif in location
Синтаксисroot path;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'root' в NGINX используется для установки пути в файловой системе, из которого файлы будут отдаваться сервером или контекстом 'location'. Когда приходит запрос к ресурсу (например, HTML-файлу или изображению), NGINX формирует итоговый путь к файлу путем конкатенации аргумента, указанного в директиве 'root', с URI запроса. Например, если директива 'root' настроена как `/var/www/html` и пользователь запрашивает `/images/photo.jpg`, NGINX будет искать файл по пути `/var/www/html/images/photo.jpg`. Это позволяет отдавать статические файлы из определённой структуры каталогов на диске. Директиву можно размещать в разных контекстах, включая 'http', 'server', 'location', и даже внутри 'if' в контексте 'location'. Когда в разных контекстах указано несколько директив 'root', приоритет будет у наиболее специфичной директивы. Важно помнить, что если запрос соотносится с директорией, а не с файлом, NGINX добавит завершающий слэш к URI и будет искать файл 'index' (как определено директивой 'index') в этой директории. Кроме того, директива 'root' предназначена для статического контента, поэтому динамический контент, например предоставляемый скриптами или, возможно, проксируемыми запросами, не будет использовать эту директиву для поиска файлов.

Пример конфига

server {
    listen 80;
    server_name example.com;

    root /usr/share/nginx/html;
    index index.html index.htm;

    location /images/ {
        # Specific location
        root /usr/share/nginx/images;
    }
}

Директива 'root' работает только для отдачи файлов; не используйте её для proxy_pass или других динамических ответов.

Обращайте внимание на все активные директивы 'root' в иерархии, так как они могут конфликтовать или переопределять друг друга.

Убедитесь, что указанный путь имеет корректные права доступа для пользователя NGINX, чтобы он мог читать файлы.

alias Директива 'alias' определяет альтернативный путь для NGINX для обслуживания конкретных запросов, фактически сопоставляя URI запроса с локальным путём в файловой системе.
location
Синтаксисalias path;
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива 'alias' используется внутри контекста location, чтобы указать альтернативный путь в локальной файловой системе, к которому должна отображаться URI. Например, когда приходит запрос к URI, который соответствует указанному блоку location, NGINX использует значение 'alias' для дальнейшей обработки и извлечения файлов вместо поведения по умолчанию. Это позволяет гибко настраивать расположение статических файлов, сохраняя при этом осмысленные URL в запросах клиентов. Директива 'alias' принимает один аргумент — путь к каталогу или файлу, который должен быть возвращён в ответ на соответствующие запросы. Важно отметить, что при использовании 'alias' совпадающая часть URI заменяется путём из alias. Это отличается от директивы 'root', при которой request URI добавляется к пути, указанному в 'root'. Поэтому при настройке 'alias' следует проявлять осторожность, чтобы гарантировать корректное сопоставление структуры URI с соответствующей структурой файловой системы. Один распространённый вариант использования 'alias' — обслуживание изображений или статических файлов из каталога, который не следует структуре document root. Например, если у вас изображения хранятся в '/var/www/images', но вы хотите обслуживать их по URI '/images', вы можете использовать директиву 'alias' для реализации такого сопоставления без изменения структуры файловой системы бэкенда.

Пример конфига

location /images {
    alias /var/www/images/;
}

Если request URI не заканчивается trailing slash, это может привести к неожиданному поведению и вызвать 404 error, если это не обработать правильно.

Не забудьте добавить trailing slash к alias path при обслуживании каталогов, чтобы обеспечить корректную работу с NGINX's filesystem lookups.

Неправильное сопоставление location block может привести к неверно настроенным путям и неожиданному поведению при обслуживании.

limit_except Директива 'limit_except' ограничивает HTTP-методы запросов в указанном блоке location.
location
Синтаксисlimit_except method { deny|allow ...; };
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива 'limit_except' в NGINX используется внутри блока location для ограничения допустимых HTTP-методов запросов. При применении она задаёт набор разрешённых методов, а все остальные методы получат ответ 403 Forbidden. Например, если вы укажете 'GET' и 'HEAD' в блоке 'limit_except', все остальные методы, такие как 'POST', 'PUT' или 'DELETE', будут заблокированы. Это полезно для защиты ресурсов, где должны быть разрешены только определённые методы, что повышает контроль доступа и безопасность. Директива принимает в качестве аргумента блок, который содержит один или несколько методов, указанных в соответствующем синтаксисе конфигурации. Каждый метод можно перечислить подряд внутри блока. Например, если у вас есть 'limit_except GET { deny all; }', то будут разрешены только GET-запросы к этому location. Важно понимать, что в контексте защиты URI определённые здесь исключения обеспечивают корректную обработку запрещённых запросов, одновременно гарантируя обслуживание легитимных методов без прерываний.

Пример конфига

location /protected {
    limit_except GET {
        deny all;
    }
}

Убедитесь, что методы, указанные в 'limit_except', поддерживаются вашим приложением; неподдерживаемые методы могут непреднамеренно возвращать ошибку 403.

Помните, что правила 'limit_except' применяются только к указанному location block и не к вложенным location block, если они там явно не определены.

client_max_body_size Ограничивает максимальный размер тела клиентского запроса.
httpserverlocation
Синтаксисclient_max_body_size size;
По умолчанию1m
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `client_max_body_size` в NGINX задаёт максимально допустимый размер тела клиентского запроса, что важно для контроля использования ресурсов и предотвращения злоупотреблений. Эту директиву можно настраивать в трёх контекстах: `http`, `server` и `location`, что позволяет гибко применять ограничение в зависимости от требуемой области действия. Параметр для `client_max_body_size` можно задавать с использованием различных единиц размера, таких как 'k' для килобайт, 'm' для мегабайт или 'g' для гигабайт. Например, указание `client_max_body_size 10m;` ограничивает тело запроса максимум до 10 мегабайт. Если клиент попытается отправить тело запроса больше указанного лимита, NGINX немедленно вернёт ошибку `413 Request Entity Too Large`, тем самым защищая сервер от чрезмерной нагрузки. Важно отметить, что установка этой директивы на разных уровнях может приводить к различному поведению в зависимости от контекста обработки запроса. Например, если в блоке `location` задать `client_max_body_size` меньше, чем на уровне `http`, то при обработке запроса приоритет будет у настройки на уровне `location`. Такой иерархический подход позволяет администраторам реализовывать специфические конфигурации для разных частей приложения по мере необходимости.

Пример конфига

server {
    listen 80;
    server_name example.com;

    client_max_body_size 10m;

    location /upload {
        proxy_pass http://backend;
    }
}

Установка `client_max_body_size` слишком низкого значения может помешать законной загрузке файлов и привести к плохому пользовательскому опыту.

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

Помните, что эта директива не влияет на заголовок `Content-Length`, если он указан клиентом.

client_body_buffer_size Директива `client_body_buffer_size` задаёт размер буфера для чтения тела запроса клиента в память.
httpserverlocation
Синтаксисclient_body_buffer_size size;
По умолчанию16k
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `client_body_buffer_size` указывает максимальный размер буфера, который NGINX будет использовать для чтения тела запроса клиента. Если тело превышает этот размер, NGINX запишет его во временный файл, что помогает управлять использованием памяти и повышать производительность, позволяя загружать большие файлы без исчерпания ресурсов памяти. Директиву можно устанавливать в контекстах `http`, `server` или `location`, что позволяет гибко настраивать её в зависимости от потребностей конкретного приложения. Когда поступает тело запроса, NGINX сравнивает размер запроса с указанным `client_body_buffer_size`. Если размер находится в пределах лимита, тело буферизуется в памяти; в противном случае оно сохраняется в файл на диске. Такое поведение важно для приложений, которые обрабатывают загрузки файлов или большие полезные нагрузки, поскольку правильная настройка размера буфера может оптимизировать как потребление памяти, так и скорость обработки. Значение может указываться в байтах, килобайтах (k), мегабайтах (m) и т.д., что позволяет тонко настроить параметр в зависимости от ожидаемого размера входящих запросов. Эта директива обычно используется вместе с другими связанными настройками, такими как `client_max_body_size`, которая задаёт максимальный допустимый размер тела запроса клиента в целом. Это дополнительно обеспечивает корректное управление ресурсами и предотвращает злоупотребления чрезмерно крупными загрузками.

Пример конфига

http {
    client_body_buffer_size 32k;
}

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

Если `client_max_body_size` меньше, чем `client_body_buffer_size`, это может привести к непредвиденному поведению при обработке больших запросов.

client_body_timeout Директива `client_body_timeout` устанавливает ограничение по времени на чтение тела запроса клиента.
httpserverlocation
Синтаксисclient_body_timeout time;
По умолчанию60s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `client_body_timeout` задаёт значение таймаута, которое определяет, как долго сервер будет ожидать отправки клиентом полного тела запроса. Это включает POST и PUT запросы, где тело запроса может быть объёмным. Если клиент не отправит полное тело в течение указанного времени, NGINX закроет соединение и вернёт ошибку `408 Request Timeout`. Этот таймаут помогает эффективно управлять ресурсами сервера, предотвращая зависшие соединения. Эту директиву можно использовать в различных контекстах: `http`, `server` и `location`, что делает её универсальной для настройки разных областей обработки запросов. Она принимает один аргумент — длительность таймаута, обычно указываемую в секундах или в формате, понятном `ngx_time_t`, например '30s', '1m' и т.д. Правильная настройка таймаута важна, чтобы не допустить монополизации ресурсов сервера медленными клиентами, особенно при высокой нагрузке. Важно отметить, что конфигурации, заданные в более специфичном контексте (например, `location`), переопределяют настройки, заданные в более общем контексте (например, `http`).

Пример конфига

http {
    client_body_timeout 30s;
    server {
        location /upload {
            client_body_timeout 5s;
        }
    }
}

Установка слишком малого таймаута может привести к нежелательным ошибкам `408 Request Timeout` для клиентов с медленным соединением или тех, кто отправляет большие объёмы данных.

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

client_body_temp_path Директива `client_body_temp_path` задаёт путь в файловой системе для временных файлов, связанных с телами клиентских запросов.
httpserverlocation
Синтаксисclient_body_temp_path path [max_size [max_files [timeout]]];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `client_body_temp_path` указывает, где будут храниться временные файлы, содержащие данные тела клиента, во время обработки входящих запросов. Эта директива особенно актуальна при обработке больших тел запроса, типичных для загрузки файлов. В качестве аргумента она может принимать один путь или, опционально, до четырёх параметров: путь для хранения файлов, максимальный размер каждого временного файла, максимальное количество создаваемых временных файлов и необязательное значение тайм-аута для удаления временных файлов после заданного периода. Правильная настройка этой директивы важна для оптимизации процессов загрузки файлов и эффективного управления использованием дискового пространства. Указанный путь должен быть записываемым для пользователя, под которым работают рабочие процессы NGINX. Кроме того, при указании нескольких параметров они должны следовать в порядке, определённом в документации. Если указан только один путь, по умолчанию используется стандартное расположение, например `/tmp` в Unix-подобных системах. Также важно удостовериться, что указанный каталог существует и надлежащим образом защищён, чтобы избежать возможных уязвимостей безопасности.

Пример конфига

client_body_temp_path /var/tmp/nginx/client_body_temp;

Убедитесь, что указанный каталог существует и доступен для записи пользователю NGINX.

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

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

client_body_in_file_only Директива `client_body_in_file_only` управляет тем, сохраняется ли тело запроса только в файл.
httpserverlocation
Синтаксисclient_body_in_file_only on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `client_body_in_file_only` в NGINX используется для управления поведением сохранения тел запросов клиентов, когда `client_body` установлен в файл. Директива позволяет указать, должно ли тело запроса сохраняться исключительно в файл вместо обработки напрямую в оперативной памяти. Директива принимает аргумент `on` или `off`: при `on` тело запроса сохраняется во временный файл, а при `off` файловое хранилище для тела запроса не используется и оно обрабатывается напрямую в памяти. При включении это особенно полезно в сценариях, где ожидаются большие загрузки, так как предотвращает чрезмерное потребление памяти сервером, что может привести к ухудшению производительности. Кроме того, временный файл может служить механизмом для асинхронной обработки больших тел, что позволяет более эффективно использовать ресурсы. Вы можете размещать эту директиву в контекстах `http`, `server` или `location`, обеспечивая гибкость конфигурации в зависимости от архитектурных потребностей вашего приложения. Однако важно убедиться, что для каталога, в котором сохраняются файлы, установлены достаточные права доступа, чтобы избежать неожиданных ошибок. Когда эта директива отключена, любой запрос с телом будет обрабатываться в памяти, что может быть непригодно для запросов с большими телами и повышает риск исчерпания ресурсов сервера в условиях высокой нагрузки.

Пример конфига

location /upload {
    client_body_in_file_only on;
    client_max_body_size 10M;
    # other configurations
}

Использование `client_body_in_file_only on` требует соответствующих прав файловой системы для записи временных файлов, что может привести к ошибкам при неправильной настройке.

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

client_body_in_single_buffer Директива 'client_body_in_single_buffer' управляет тем, читается ли тело запроса клиента в один буфер.
httpserverlocation
Синтаксисclient_body_in_single_buffer on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'client_body_in_single_buffer' используется для оптимизации того, как NGINX обрабатывает тело запроса клиента при обработке запросов. Когда эта директива установлена в 'on', полное тело запроса читается в один буфер, что может снизить накладные расходы на управление несколькими буферами, особенно для небольших тел запросов. Это может привести к повышению производительности в сценариях, когда сервер обрабатывает много небольших запросов. С другой стороны, когда директива установлена в 'off', NGINX может выделять несколько буферов для тела запроса при определённых условиях, что позволяет более гибко обрабатывать большие входящие тела, но может добавить дополнительную нагрузку на управление этими буферами. Использование единого буфера может быть полезно для приложений с низкой задержкой, где критична быстрая обработка тел запросов. При настройке этой директивы важно учитывать требования вашего приложения, особенно в отношении ожидаемых размеров полезной нагрузки и баланса между использованием памяти и производительностью. Параметр этой директивы — простой флаг, который можно включить или отключить, и он может быть определён в контекстах http, server или location. Это простой способ настройки поведения NGINX при обработке тел запросов в соответствии с характеристиками рабочей нагрузки обслуживаемых приложений.

Пример конфига

server {
    listen 80;
    server_name example.com;

    client_body_in_single_buffer on;
    location /submit {
        # additional configuration here
    }
}

Если размер тела запроса превышает настроенный размер буфера, включение этой директивы всё равно может привести к переполнению и к некорректной обработке запросов.

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

sendfile Директива `sendfile` включает или отключает использование системного вызова `sendfile()` для передачи файлов в ответ на запросы клиентов.
httpserverlocationif in location
Синтаксисsendfile on | off;
По умолчаниюoff
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `sendfile` является частью основного HTTP-модуля NGINX и оптимизирует передачу файлов, позволяя серверу отправлять файлы непосредственно с диска в сетевое соединение без необходимости копирования данных между ядром и пользовательским пространством. Это приводит к повышению производительности и снижению загрузки CPU, особенно при отдаче статических файлов, таких как изображения, таблицы стилей или JavaScript-файлы. Эта директива принимает один аргумент — `on` или `off`. При установке в `on` NGINX будет использовать функцию `sendfile()` для передачи файлов клиенту, что особенно полезно при работе с большими файлами. Соответственно, установка в `off` отключает использование этой функциональности и возвращает к более традиционным методам отправки файлов, которые могут быть менее эффективными. Директиву `sendfile` можно включать в разных контекстах, таких как `http`, `server` и `location`, а также внутри директив `if` в контекстах location. Обратите внимание, что хотя включение `sendfile` обычно даёт лучшую производительность, важно убедиться, что конфигурация сервера и логика приложения корректно работают при использовании этой директивы, поскольку это может вызвать сложности в некоторых конфигурациях, например при работе с TLS или в отдельных сценариях логирования.

Пример конфига

http {
    sendfile on;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/html;
            index index.html;
        }
    }
}

Использование `sendfile` с неблокирующим вводом-выводом может привести к неожиданному поведению из-за способа передачи данных.

Некоторые конфигурации, такие как проксирование или определённые модули (например, HTTP/2), могут некорректно взаимодействовать с `sendfile`, поэтому обязательно протестируйте производительность соответствующим образом.

sendfile_max_chunk Директива sendfile_max_chunk задаёт максимальный объём данных, отправляемых с помощью системного вызова sendfile в NGINX.
httpserverlocation
Синтаксисsendfile_max_chunk size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `sendfile_max_chunk` определяет максимальное количество данных в байтах, которое может быть передано с помощью системного вызова `sendfile` за одну операцию. Это особенно полезно для оптимизации отправки файлов на серверах с высокой нагрузкой, когда может потребоваться учесть ограничения базовой операционной системы для оптимизации пропускной способности. При заданном значении директива ограничивает объём данных, который может быть передан в одном вызове `sendfile`, что может помочь контролировать использование памяти и избегать блокировок при передаче больших файлов. Если размер отправляемого файла превышает указанный размер чанка, NGINX разобьёт передачу на несколько вызовов `sendfile`, каждый из которых будет ограничен заданным максимальным размером чанка. Такое поведение обеспечивает эффективное использование ресурсов и может улучшить общую отзывчивость сервера при высокой нагрузке. Директива особенно актуальна при обслуживании статических файлов, таких как изображения или видео, где производительность может ухудшаться при масштабировании без этого ограничения. Настройка этого параметра позволяет администраторам найти баланс между потреблением ресурсов и производительностью приложения, что делает его важным аспектом оптимизации производительности NGINX.

Пример конфига

http {
    sendfile on;
    sendfile_max_chunk 1m;
}

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

В средах с небольшими размерами файлов высокое значение может дать мало преимуществ и необоснованно усложнить управление ресурсами.

subrequest_output_buffer_size Задает размер выходного буфера для вывода субзапросов в NGINX.
httpserverlocation
Синтаксисsubrequest_output_buffer_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `subrequest_output_buffer_size` в NGINX управляет максимальным объёмом данных, которые могут быть буферизованы для вывода субзапросов. Субзапросы инициируются для получения дополнительных данных или ресурсов во время обработки запроса, например при включении другого файла или выполнении другой location на сервере. Указав эту директиву, администратор может тонко настроить использование памяти в зависимости от ожидаемых размеров ответов субзапросов, что может улучшить производительность под нагрузкой. Значение, заданное для директивы, определяет, сколько данных может храниться в буфере для субзапросов. Если вывод, сгенерированный субзапросом, превышает это значение, это приведёт к использованию дополнительных механизмов буферизации или к непосредственной отправке вывода, что может повлиять на производительность и потребление памяти. Подходящая настройка зависит от ожидаемых сценариев использования субзапросов и конфигурации памяти сервера.

Пример конфига

server {
    location /example {
        subrequest_output_buffer_size 16k;
    }
}

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

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

aio Директива 'aio' включает асинхронные операции ввода-вывода в NGINX для повышения производительности.
httpserverlocation
Синтаксисaio on | off | io_uring;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'aio' в NGINX позволяет настраивать асинхронные операции ввода-вывода при чтении и записи файлов. При включении асинхронного ввода-вывода NGINX может обслуживать больше соединений, потому что он не блокируется на операциях ввода-вывода, позволяя продолжать обработку других запросов, пока выполняются файловые операции. Это особенно полезно для приложений, которые раздают статические файлы или выполняют загрузку/выгрузку файлов. Эта директива принимает один аргумент, который указывает метод асинхронного ввода-вывода. Для Unix-подобных операционных систем допустимые варианты: `off` (отключить асинхронный ввод-вывод), `on` (включить его) или `io_uring` (использовать интерфейс io_uring для асинхронных операций ввода-вывода, если он поддерживается). При установке NGINX будет использовать асинхронный ввод-вывод для операций чтения/записи файлов, что значительно увеличивает пропускную способность при высокой нагрузке и снижает задержки.

Пример конфига

http {
    aio on;
    server {
        location /files/ {
            root /data;
        }
    }
}

Убедитесь, что ваша операционная система поддерживает выбранный метод I/O (например, io_uring требует недавней версии Linux kernel).

Будьте готовы к потенциальному увеличению сложности при отладке асинхронных операций по сравнению с традиционным blocking I/O.

aio_write Директива `aio_write` позволяет выполнять асинхронную запись файлов для повышения производительности.
httpserverlocation
Синтаксисaio_write on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `aio_write` в NGINX включает асинхронную запись файлов, что позволяет серверу выполнять операции записи без блокировки обработки других запросов. При включении записи файлов они могут обрабатываться в неблокирующем режиме, освобождая ресурсы и повышая общую пропускную способность. Это особенно выгодно в условиях высокой нагрузки, когда I/O-операции могут становиться узким местом. Директива принимает в качестве аргумента флаг, который может быть установлен в 'on' или 'off'. При значении 'on' сервер использует поддержку асинхронных операций записи на уровне ядра. Для применения этой директивы её можно указать в контексте блоков http, server или location. В зависимости от возможностей и настроек базовой операционной системы директива может задействовать различные асинхронные механизмы (например, AIO в Linux) для улучшения обработки файлов. Тем не менее важно убедиться, что поддерживающие библиотеки и функции ядра правильно настроены для достижения ожидаемого повышения производительности. Когда aio включён, его следует использовать в сочетании с другими конфигурациями NGINX, чтобы максимально повысить эффективность и убедиться, что это подходит для конкретного варианта использования.

Пример конфига

server {
    listen 80;
    location /logs {
        aio_write on;
        root /var/log/nginx;
    }
}

Убедитесь, что нижележащая файловая система поддерживает асинхронные I/O-операции. Не все файловые системы могут вести себя ожидаемым образом.

Использование aio_write может не дать прироста производительности во всех сценариях; лучше измерить производительность до и после применения.

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

read_ahead Директива `read_ahead` задаёт объём данных, читаемых заранее из клиентского соединения для оптимизации буферизации.
httpserverlocation
Синтаксисread_ahead size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `read_ahead` в NGINX влияет на то, сколько данных считывается из клиентского соединения до их обработки. Указывая размер в байтах, эта директива позволяет серверу предварительно читать трафик от клиента, что может повысить отзывчивость и производительность для клиентов, отправляющих данные порывами или в больших объёмах. Это особенно полезно для медленных клиентов или при обработке крупных загрузок, поскольку NGINX может эффективно буферизовать эти данные, снижая вероятность нехватки данных во время обработки. Когда клиентское соединение устанавливается, указанное количество данных считывается заранее (например, 1k, 4k и т.д.) во внутренние буферы NGINX. Если объём доступных данных меньше указанного, сервер прочитает только имеющиеся данные. Если же размер не задан, NGINX использует собственную стратегию управления буферизацией по умолчанию. Количество, задаваемое директивой `read_ahead`, разделяется между всеми принятыми клиентскими соединениями и специально оптимизирует стратегию чтения для данного контекста (http, server или location). Понимание того, как эффективно использовать директиву `read_ahead`, может привести к лучшему использованию ресурсов и повышению производительности, особенно в периоды высокого трафика или при работе с клиентами с переменной скоростью загрузки. Важно тестировать разные значения размера, чтобы подобрать оптимальные параметры под нагрузку приложения и характеристики клиентов.

Пример конфига

http {
    server {
        location /upload {
            read_ahead 1m;
            # other configuration options
        }
    }
}

Установка слишком большого значения `read_ahead` может привести к увеличению потребления памяти, особенно при высокой нагрузке.

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

directio Директива 'directio' включает прямой ввод-вывод для чтения и записи файлов, обходя кэш ОС.
httpserverlocation
Синтаксисdirectio size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'directio' в NGINX используется для настройки операций прямого ввода-вывода при работе с файлами, особенно полезна в случаях, когда требуется высокая производительность при отдаче больших файлов. При включении данные читаются и записываются напрямую между диском и приложением, минуя кэш операционной системы. Это может привести к снижению задержки и увеличению пропускной способности для приложений, которые часто обращаются к большим файлам. Эта директива принимает один аргумент, задающий размер буфера прямого ввода-вывода. Указанный размер выравнивается по размеру блока, используемому базовой файловой системой. Например, если размер блока равен 4 KB, будет уместно установить 'directio 4k;'. При использовании директива помогает оптимизировать обработку данных файлов, особенно в сценариях с высокой производительностью или на системах с ограниченными ресурсами памяти. Директиву 'directio' можно объявлять в контекстах `http`, `server` и `location`, что обеспечивает гибкость конфигурации на разных уровнях иерархии NGINX. Важно помнить, что хотя эта функция может давать существенные преимущества, она не всегда необходима — особенно для нагрузок, которые не предполагают регулярной работы с большими файлами, так как накладные расходы на управление прямым I/O иногда могут перевешивать преимущества по производительности.

Пример конфига

location /downloads {
    directio 4k;
    root /var/www/files;
}

Убедитесь, что файловая система поддерживает direct I/O; в противном случае директива может не иметь никакого эффекта.

Будьте внимательны при выравнивании buffer size с block size используемой файловой системы, чтобы избежать потерь производительности.

Использование direct I/O может обходить kernel page cache, что может привести к снижению производительности при шаблонах доступа, ориентированных на небольшие файлы.

directio_alignment Задает выравнивание для операций direct I/O в NGINX.
httpserverlocation
Синтаксисdirectio_alignment value;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `directio_alignment` в NGINX позволяет настроить выравнивание операций direct I/O, что может повысить производительность для определённых типов нагрузок за счёт оптимизации того, как данные читаются из файловой системы и записываются в неё. Эта директива позволяет задать границу выравнивания для передач данных direct I/O, что полезно для файловых систем, требующих выравнивания данных по определённым байтовым границам. С помощью этой директивы администраторы могут задать единый аргумент, определяющий требование к выравниванию в байтах. При включении NGINX будет обеспечивать выравнивание всех операций чтения и записи в соответствии с указанным значением, что особенно важно в сценариях с высокой производительностью, например при обслуживании больших файлов или работе веб-серверов под большой нагрузкой. Следует заметить, что неверные значения могут привести к снижению производительности или увеличению накладных расходов из-за неправильного выравнивания, поэтому при настройке директивы рекомендуется тщательно подбирать значения и тестировать их. Директива `directio_alignment` может применяться в разных контекстах, таких как `http`, `server` и `location`, что обеспечивает гибкость при использовании в различных областях конфигурации NGINX. Дополнительно важно оценивать нижележащую систему хранения данных, чтобы определить оптимальные значения выравнивания, особенно для систем, чувствительных к проблемам выравнивания.

Пример конфига

http {
    server {
        location /files {
            directio_alignment 4096;
        }
    }
}

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

Использование этой директивы без понимания требований базовой файловой системы может привести к снижению производительности.

Значения должны быть тщательно подобраны с учётом приложения и шаблонов доступа к данным.

tcp_nopush Директива tcp_nopush управляет тем, отправляет ли NGINX данные с использованием опции сокета TCP_CORK в Linux.
httpserverlocation
Синтаксисtcp_nopush on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Когда директива tcp_nopush включена, она инструктирует NGINX использовать опцию TCP_CORK в системах Linux. Эта опция позволяет NGINX оптимизировать передачу ответов, предотвращая преждевременную отправку пакетов. Вместо отправки данных малыми пакетами, TCP_CORK гарантирует, что данные будут отправлены только когда весь ответ готов или когда буфер сокета заполнен. Это может уменьшить количество пакетов в сети и увеличить пропускную способность, особенно для больших ответов или при передаче файлов. По умолчанию эта директива отключена, то есть NGINX не использует TCP_CORK, что может привести к отправке большего числа небольших пакетов. Директива полезна, когда важна производительность передачи данных, например при раздаче больших файлов или при высокой нагрузке. Однако важно отметить, что включение tcp_nopush может ввести задержку в ответах, поскольку сервер будет ждать отправки данных до тех пор, пока не будут выполнены условия для сброса TCP_CORK. Директива принимает флаговый аргумент, который может быть либо "on", либо "off". Установка tcp_nopush on включает поведение TCP_CORK, тогда как установка tcp_nopush off возвращает стандартное поведение отправки пакетов. Она применима в различных контекстах, включая http, server и location блоки, что даёт гибкость в определении оптимального поведения для разных частей конфигурации NGINX.

Пример конфига

http {
    tcp_nopush on;
    server {
        location / {
            # Additional location settings
        }
    }
}

Убедитесь, что сервер работает на системе Linux, поскольку TCP_CORK — функция, специфичная для Linux.

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

tcp_nodelay Директива tcp_nodelay отключает Nagle's algorithm для TCP-соединений, обеспечивая связь с низкой задержкой.
httpserverlocation
Синтаксисtcp_nodelay on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива tcp_nodelay используется в контексте HTTP-, server- и location-блоков в конфигурационных файлах NGINX. Если установить её в 'on', она отключает Nagle's algorithm для TCP-соединений, что означает, что пакеты отправляются немедленно, без ожидания накопления дополнительных данных для передачи. Это может повысить производительность приложений реального времени, где критична низкая задержка, таких как онлайн-игры, VoIP и потоковые сервисы. Когда Nagle's algorithm включён (по умолчанию), небольшие пакеты могут задерживаться, пока система пытается объединить их в большие пакеты для оптимизации использования сети. Это может привести к увеличению задержки для приложений, требующих немедленной передачи данных. Используя tcp_nodelay, администраторы могут обеспечить, что когда данные готовы к отправке, они отправляются немедленно, тем самым снижая задержку ценой возможного увеличения сетевого трафика. При использовании этой директивы важно тщательно оценивать влияние на пропускную способность сети. Директива принимает параметр-флаг; установка в 'on' включает TCP_NODELAY, тогда как 'off' включает поведение по умолчанию. Важно учитывать, что эта директива в большей степени влияет на характеристики производительности, а не на функциональность, поэтому её следует настраивать в соответствии с конкретными потребностями обслуживаемого приложения.

Пример конфига

server {
    listen 80;
    location / {
        tcp_nodelay on;
        proxy_pass http://backend;
    }
}

Установка tcp_nodelay в значение on может увеличить сетевой трафик, поскольку пакеты отправляются немедленно.

Применяйте с осторожностью в приложениях, где эффективность использования пропускной способности важнее низкой задержки.

send_timeout Директива `send_timeout` устанавливает таймаут для передачи ответа клиенту.
httpserverlocation
Синтаксисsend_timeout time;
По умолчанию30s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `send_timeout` в NGINX настраивает максимальное разрешённое время для передачи ответа клиенту. Этот таймаут особенно актуален, когда клиент делает запрос, требующий передачи большого объёма данных, и помогает предотвратить бесконечное потребление ресурсов клиентами, которые могут не получить полный ответ. Параметр для `send_timeout` задаётся как значение времени, которое может быть выражено в секундах (s), минутах (m) или часах (h). Если указанное время ожидания превышено во время передачи данных, NGINX закроет соединение с клиентом. Важно отметить, что этот таймаут применяется только при отправке данных клиенту; он не влияет на другие таймауты, такие как таймауты соединения или приёма. Конфигурация на различных уровнях (http, server, or location) позволяет гибко настраивать поведение, когда требуется более точное управление для разных частей вашего приложения. Эта директива может помочь оптимизировать производительность сервера и управление ресурсами, предотвращая ситуации, когда длительные соединения занимают пропускную способность сервера. Значение времени можно настроить под различные сценарии использования, например увеличить таймаут для больших файлов или уменьшить его для приложений с потоковой трансляцией. Однако настройки следует тестировать под нагрузкой, чтобы убедиться, что они соответствуют требованиям вашего конкретного приложения и не оказывают негативного влияния на ресурсы сервера.

Пример конфига

http {
    send_timeout 60s;
    server {
        location / {
            // other directives
        }
    }
}

Установка слишком малого значения таймаута может привести к преждевременному закрытию соединений для клиентов, которые медленно получают данные.

Таймаут применяется только к фазе отправки, а не ко всему процессу обработки запроса, что может вводить в заблуждение при устранении проблем с соединением.

send_lowat Директива `send_lowat` управляет нижним порогом (low-water mark) для TCP-буферов отправки в NGINX.
httpserverlocation
Синтаксисsend_lowat size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `send_lowat` используется для установки нижнего порога заполнения буфера отправки TCP при обработке HTTP-соединений. Когда количество байтов в буфере отправки сокета опускается ниже указанного значения, NGINX сможет отправить клиенту дополнительные данные. Это особенно полезно в сценариях с высокой пропускной способностью, где оно может помочь оптимизировать передачу данных, предотвращая чрезмерное буферизование на уровне приложения. Установка подходящего нижнего порога помогает управлять потоком данных, балансируя нагрузку на сервер и повышая общую производительность. Значение должно быть больше нуля и интерпретируется как число байтов. Когда внутри буфера отправки достигается это значение, NGINX может начать отправку новых данных по TCP-соединению. Директива `send_lowat` полезна в сочетании с TCP node и применяется в контекстах HTTP, server или location, что даёт гибкость при настройке этого поведения в зависимости от потребностей приложения. Она может эффективно использоваться для снижения задержек и повышения отзывчивости клиентов при переменных сетевых условиях. Тонкая настройка директивы `send_lowat` может привести к повышению производительности в сценариях, где соединения постоянно открываются и закрываются, или когда трафик характеризуется всплесками данных. Требуется внимательный подбор значения для `send_lowat`, так как неправильные значения могут привести к ухудшению производительности или увеличению задержки для клиентов.

Пример конфига

http {
    ...
    send_lowat 4096;
    ...
}

Значение должно быть больше нуля; в противном случае оно будет игнорировано.

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

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

postpone_output The 'postpone_output' directive allows NGINX to delay sending output to the client until necessary, optimizing resource usage.
httpserverlocation
Синтаксисpostpone_output number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

The 'postpone_output' directive is particularly useful in scenarios where a response can be generated but is not immediately required to be sent to the client. This directive informs NGINX that the response body can be postponed, allowing the server to manage memory and processing more effectively by deferring the output. When this directive is enabled, the NGINX worker process does not immediately flush the response data to the client's socket, which can help improve performance by reducing the number of system calls and allowing the server to handle multiple requests simultaneously without excessive output blocking. The directive takes one parameter, which specifies the maximum amount that can be postponed. When a response has been fully constructed but the client is busy or slow to process data, this directive helps ensure that resources are not wasted on output. It operates at the HTTP level, and its effects can be included in the configuration files for the HTTP, server, and location contexts, allowing for flexible application across different scopes of server handling.

Пример конфига

location /example {
    postpone_output 1024;
}

Ensure the postponed output size does not cause buffer overflows.

Using postpone_output in inappropriate contexts may lead to unwanted behaviors.

limit_rate Директива `limit_rate` ограничивает пропускную способность для ответа, отправляемого клиенту.
httpserverlocationif in location
Синтаксисlimit_rate rate;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `limit_rate` позволяет задать ограничение скорости передачи для клиентов, получающих ответ. Это особенно полезно для предотвращения ситуации, когда один пользователь потребляет чрезмерные ресурсы сервера или пропускную способность, что в противном случае могло бы ухудшить производительность для других пользователей. Директива принимает один аргумент, который задаёт максимальную скорость передачи в байтах в секунду. Вы можете указать суффикс, например 'k' для килобайтов или 'm' для мегабайтов, чтобы упростить настройку. При применении `limit_rate` директива влияет на ответ, контролируя объём данных, отправляемых за интервал, фактически реализуя дросселирование исходящего трафика. Это ограничение активно на этапе отправки ответа в процессе обработки запроса, а значит действует в контекстах директив `http`, `server` и `location`, а также внутри `if` в `location`. Это особенно полезно при отдаче больших файлов или в периоды пикового трафика, позволяя обеспечивать справедливое распределение пропускной способности между клиентами. Если текущая скорость загрузки превышает заданное значение `limit_rate`, NGINX приостановит передачу данных, чтобы соблюсти это ограничение, что приведёт к более стабильной работе для всех пользователей, гарантируя, что ни один клиент не сможет монополизировать ресурсы сервера.

Пример конфига

location /downloads {
    limit_rate 100k;
}

Использование `limit_rate` внутри директивы `if` может привести к непредсказуемому поведению из-за сложности обработки конфигурации NGINX.

Ограничение скорости применяется только к передаваемым данным; оно не влияет на обработку входящих запросов.

Чрезмерно строгие лимиты скорости могут привести к увеличению времени отклика для клиентов.

limit_rate_after Директива 'limit_rate_after' позволяет указать определённое количество данных, которое может быть отправлено клиенту перед ограничением скорости.
httpserverlocationif in location
Синтаксисlimit_rate_after size;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива 'limit_rate_after' в NGINX используется для управления пропускной способностью, которую использует клиент при скачивании файла. Она позволяет задать порог, после которого скорость передачи будет ограничена. Директива полезна в сценариях, когда вы хотите предоставить начальный всплеск пропускной способности для улучшения опыта пользователя, но затем ограничить её, чтобы лучше управлять ресурсами. Ее можно задавать на разных уровнях контекста, таких как http, server и location, что обеспечивает гибкость в зависимости от потребностей вашего приложения. Когда клиент запрашивает ресурс, если объём отправленных данных меньше указанного лимита, NGINX передаёт данные без ограничения скорости. Как только общий объём отправленных данных превысит значение, заданное в 'limit_rate_after', NGINX начнёт замедлять скорость передачи на основе директивы 'limit_rate'. Такое поведение позволяет владельцам сайтов и администраторам предоставлять некоторым пользователям или запросам первоначально более высокую скорость, сохраняя при этом контроль за использованием ресурсов, когда их загрузка достигнет порога. Аргумент для 'limit_rate_after' — это лимит в байтах, при достижении которого становится активным это ограничение скорости. Важно заметить, что директива требует тщательной настройки, особенно в сочетании с директивой 'limit_rate', чтобы обеспечить желаемый пользовательский опыт и при этом не перегрузить пропускную способность сервера.

Пример конфига

server {
    location /downloads {
        limit_rate_after 1m;
        limit_rate 256k;
    }
}

Убедитесь, что 'limit_rate' также определён, поскольку 'limit_rate_after' вступает в действие только после срабатывания этой директивы.

Неправильная настройка 'limit_rate_after' без 'limit_rate' может привести к непредсказуемому использованию пропускной способности.

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

keepalive_min_timeout Задаёт минимальное время ожидания для keep-alive соединений между NGINX и клиентами.
httpserverlocation
Синтаксисkeepalive_min_timeout time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `keepalive_min_timeout` задаёт минимальную продолжительность таймаута для keep-alive соединений. Это значение критично, так как определяет, как долго неактивное соединение может оставаться открытым до того, как NGINX его закроет. По умолчанию таймаут keep-alive установлен в 75 секунд, как указано в директиве `keepalive_timeout`, но он может быть больше для сетей с высокой задержкой или при работе с медленными клиентами. Установка `keepalive_min_timeout` задаёт ожидаемый минимальный таймаут, давая некоторый контроль над тем, насколько агрессивно будут завершаться неактивные соединения. Эта директива принимает один аргумент, определяющий минимальную продолжительность таймаута в секундах. Она особенно полезна для оптимизации производительности сервера при высокой нагрузке, позволяя сбалансировать необходимость долгоживущих соединений и потребность оперативно освобождать ресурсы. Учтите, что слишком низкое значение `keepalive_min_timeout` может привести к обрыву соединений и возможному увеличению задержки для последующих запросов от того же клиента, поэтому эта настройка является критически важной для веб-приложений, использующих постоянные соединения. Эта директива может быть определена в контекстах `http`, `server` или `location`, что даёт гибкость для применения различных настроек таймаута keep-alive в зависимости от потребностей вашего приложения. При правильной конфигурации вы сможете обеспечить эффективную обработку TCP-соединений сервером без лишней нагрузки из-за чрезмерного количества простаивающих соединений.

Пример конфига

keepalive_min_timeout 10s;

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

Эта директива может переопределить настройки времени ожидания keepalive по умолчанию; при необходимости убедитесь, что она настроена вместе с keepalive_timeout.

keepalive_disable Директива `keepalive_disable` отключает HTTP keep-alive для указанных строк User-Agent.
httpserverlocation
Синтаксисkeepalive_disable user_agent_string;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `keepalive_disable` используется в NGINX для управления поведением HTTP keep-alive соединений на основе строки User-Agent клиента, отправляющего запрос. При указании эта директива позволяет перечислить одну или несколько строк User-Agent, которым будет отказано в преимуществе постоянных соединений. Отключение keep-alive может привести к увеличению задержки, поскольку каждый запрос будет требовать установки и разрыва нового TCP-соединения вместо повторного использования существующего. Директива принимает один или несколько аргументов — строк, задающих подстроки User-Agent. Если User-Agent клиента совпадает с любой из указанных подстрок, клиент не будет использовать keep-alive соединения. Это может быть полезно при работе с проблемными клиентами, у которых известны проблемы с постоянными соединениями, например старые браузеры или отдельные боты. Директива может применяться в контекстах `http`, `server` или `location`, что даёт гибкость в выборе места её использования в зависимости от требуемого сценария. Если директива определена без параметров, она фактически не влияет на поведение и сохраняет поведение по умолчанию — разрешение keep-alive. Напротив, если указана одна или несколько строк, создаётся правило, которое сравнивает входящие запросы с указанными User-Agent и определяет, следует ли отключать keep-alive. Эта директива полезна для тонкой настройки производительности сервера и управления ресурсами, особенно в сценариях, где некоторые клиенты могут вызывать проблемы с производительностью или когда ресурсы ограничены.

Пример конфига

http {
    keepalive_disable "MSIE";
    keepalive_disable "Opera";
}

server {
    location / {
        keepalive_disable "FacebookExternalHit";
    }
}

Будьте осторожны с точными строками User-Agent; частичные совпадения могут привести к непредвиденным результатам.

Добавление слишком большого количества строк User-Agent может ухудшить производительность для этих клиентов, если keep-alive игнорируется.

satisfy Директива 'satisfy' управляет тем, как предоставляется доступ к ресурсам на основе нескольких методов контроля доступа.
httpserverlocation
Синтаксисsatisfy all | any | none;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'satisfy' позволяет комбинировать различные механизмы контроля доступа, чтобы определить, должен ли запрос быть разрешён или отклонён. Она принимает один аргумент, который может быть 'all', 'any' или 'none' — это определяет, как оцениваются правила доступа. Если задан 'all', все правила доступа должны быть удовлетворены, чтобы доступ был предоставлен. При 'any' достаточно удовлетворить хотя бы одно из правил доступа, что даёт более мягкую политику доступа. Наоборот, опция 'none' фактически отключает любые предопределённые механизмы контроля доступа, позволяя неограниченный доступ там, где другие правила не применяются. Эта директива особенно полезна в сложных сценариях авторизации, где должно быть выполнено несколько условий, например при объединении ограничений по IP через директивы 'allow' и 'deny' и дополнительных методов, таких как аутентификация. Следует уделять внимание чёткой и корректной формулировке правил, поскольку неправильная настройка директив может привести к непреднамеренным проблемам с доступом. Важно учитывать, что если применимых правил не определено, применяется доступ по умолчанию к ресурсу, который может различаться в зависимости от конфигурации сервера.

Пример конфига

location /secure {
    allow 192.168.1.0/24;
    deny all;
    satisfy any;
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/.htpasswd;
}

Убедитесь, что логические условия AND/OR, задаваемые с помощью 'all' и 'any', не противоречат друг другу ради ясности и безопасности.

Использование 'satisfy none' без указания дополнительных директив может привести к непреднамеренному публичному доступу к чувствительным областям.

auth_delay Директива auth_delay вводит настраиваемую задержку в ответах на запросы аутентификации.
httpserverlocation
Синтаксисauth_delay time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `auth_delay` предназначена для введения заданной задержки при обработке запросов аутентификации. Ввод задержек помогает смягчить атаки перебором и повысить безопасность, делая сложнее для злоумышленников подобрать учётные данные за короткий промежуток времени. Директива может принимать значения времени в различных форматах (например, в секундах или минутах), что обеспечивает гибкость конфигурации. Например, можно настроить её так, чтобы после каждой неудачной попытки аутентификации вводилась задержка в 5 секунд. При использовании `auth_delay` её можно указывать в различных контекстах, включая `http`, `server` и `location`. Это означает, что задержку можно применять глобально или на более детализированных уровнях, что позволяет адаптировать меры безопасности для отдельных частей приложения. Хотя введение задержки аутентификации может повысить безопасность, оно также может повлиять на удобство пользователей при чрезмерно большой задержке; поэтому при настройке директивы важно найти правильный баланс. Кроме того, при использовании `auth_delay` администраторам следует учитывать возможное увеличение времени ответа для легитимных запросов; поэтому критически важно отслеживать и при необходимости корректировать настройки на основе наблюдаемых моделей трафика и уровня угроз. Обычно рекомендуется начинать с минимальных задержек и постепенно увеличивать их в зависимости от чувствительности защищаемых ресурсов и типов обнаруживаемых угроз.

Пример конфига

http {
    auth_delay 5s;
}

server {
    location /login {
        auth_delay 3s;
    }
}

Установка слишком большой задержки может раздражать добросовестных пользователей.

Эта директива применяется только к запросам аутентификации; она не повлияет на действия, не связанные с аутентификацией.

internal Директива `internal` помечает блок location как доступный только изнутри самого NGINX, предотвращая прямой доступ внешних клиентов.
location
Синтаксисinternal;
По умолчаниюnone
Контекстlocation
МодульNGINX HTTP Core

Описание

Директива `internal` в NGINX используется внутри блоков location, чтобы задать, что указанный location может быть доступен только изнутри самого NGINX и не доступен внешним клиентам. Это особенно полезно для защиты определённых ресурсов или маршрутов, которые не должны быть напрямую доступны пользователям, например серверных скриптов или внутренних API, обрабатывающих конфиденциальные данные. Когда запрос к `internal` location поступает извне, NGINX ответит ошибкой 404 Not Found, эффективно блокируя неавторизованный доступ. Когда директива `internal` применяется к блоку location, любая попытка обратиться к этому блоку напрямую со стороны клиента приведёт к ответу с ошибкой, что сохраняет целостность и безопасность приложения. Такое поведение помогает эффективно структурировать приложение, позволяя использовать определённые пути исключительно для внутренних перенаправлений, ссылок или location, 'скрытых' от конечных пользователей, и может сочетаться с другими директивами, такими как `rewrite` или `error_page`, чтобы управлять тем, что происходит при попытке неавторизованного доступа. Директива не принимает аргументов, что отражает её функциональность включения/выключения (включена при объявлении). Поэтому она органично вписывается в типичную парадигму конфигурации NGINX, где блоки могут быть чётко разграничены по назначению и функционалу. Правильное использование этой директивы может значительно повысить уровень безопасности приложений, размещённых в NGINX, гарантируя, что только предусмотренная сервер‑к серверная коммуникация происходит через контролируемые конечные точки.

Пример конфига

location /private {
    internal;
    # additional configurations
}

Размещение директивы internal внутри вложенных locations может привести к непредвиденному поведению; убедитесь, что она используется в правильном логическом контексте.

Помните, что все internal requests должны маршрутизироваться через настроенные error pages или redirects для обратной связи с пользователем.

lingering_close Директива `lingering_close` включает или отключает задержанное закрытие для HTTP-соединений в NGINX.
httpserverlocation
Синтаксисlingering_close on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `lingering_close` в NGINX управляет поведением задержанного закрытия клиентских соединений. Когда она установлена в 'on', она позволяет соединениям оставаться открытыми в течение заданного периода после того, как клиент отправил запрос, давая возможность клиенту прочитать оставшиеся данные до полного закрытия соединения. Это особенно полезно при работе с медленными клиентами или теми, кто может не прочитать все данные своевременно, что позволяет предотвратить возможную потерю данных. Когда она установлена в 'off', NGINX закроет соединение сразу после отправки ответа, не ожидая клиента, что может повысить производительность сервера в условиях высокой нагрузки, но сопряжено с риском потери непрочитанных данных. Директива принимает один аргумент, который может быть 'on' или 'off'. В состоянии 'on' NGINX выполняет задержанное закрытие, позволяя соединению оставаться открытым. Если директива установлена в 'off', функция задержанного закрытия отключается, и соединения закрываются сразу. Эта директива может использоваться в различных контекстах, включая http, server и location, что делает её гибкой для разных приложений. При тонкой настройке производительности администраторы NGINX могут использовать эту директиву для оптимизации обработки данных с учётом конкретных сценариев использования и поведения клиентов.

Пример конфига

server {
    listen 80;
    server_name example.com;
    lingering_close on;
}

Установка lingering_close в 'on' может привести к исчерпанию ресурсов при слишком большом количестве медленных клиентов.

Отключение lingering_close может привести к потере данных, если клиенты не потребляют весь ответ.

lingering_time Директива 'lingering_time' в NGINX задаёт период ожидания запросов перед закрытием соединения.
httpserverlocation
Синтаксисlingering_time seconds;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'lingering_time' используется для управления тем, как долго NGINX будет ждать дополнительных запросов от клиента перед закрытием соединения, предоставляя временной буфер для улучшения удобства пользователя за счёт учёта запоздалых запросов. Эта функция может быть полезна в ситуациях, когда клиент может отправить дополнительные запросы сразу после получения предыдущего. Параметр 'lingering_time' задаётся в секундах и определяет длительность этого периода ожидания. Когда клиент закрывает соединение (например, закрывается вкладка браузера), NGINX всё ещё может поддерживать соединение открытым в течение заданного 'lingering_time', если эта директива установлена. В течение этого времени, если от того же клиента поступит новый запрос, NGINX сможет обработать его без установления нового соединения, что улучшит время отклика и снизит потребление ресурсов. Директива может быть полезна в условиях высокой нагрузки, где поддержание открытых соединений может привести к снижению задержек и улучшению общей производительности.

Пример конфига

http {
    lingering_time 10;
    server {
        listen 80;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

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

Если параметр не задан правильно, клиенты могут столкнуться с внезапным разрывом своих соединений из-за ограничений ресурсов сервера.

Эта директива может быть менее эффективна для соединений HTTP/2, которые имеют собственные принципы управления соединениями.

lingering_timeout Устанавливает период ожидания для отложенного закрытия подключений.
httpserverlocation
Синтаксисlingering_timeout seconds;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `lingering_timeout` в NGINX задаёт длительность (в секундах), в течение которой сервер будет ждать после того, как клиент закрыл соединение, прежде чем полностью закрыть сокет. Это особенно полезно в сценариях, когда сервер хочет позволить завершиться дополнительным операциям чтения или записи, не разрывая соединение немедленно. Когда соединение находится в состоянии ожидания, сервер будет держать сокет открытым в течение указанного времени, чтобы дать клиенту возможность отправить или получить оставшиеся данные. Если таймаут истечёт без какой-либо активности, соединение принудительно закрывается. Установка `lingering_timeout` полезна в условиях высокой нагрузки, где управление соединениями критично, так как это может помочь сократить количество внезапных разрывов соединений. Эта директива может применяться в разных контекстах: http, server и location, что позволяет гибко управлять обработкой соединений в разных разделах конфигурации NGINX. При указании таймаута важно помнить, что значение должно быть положительным целым числом, представляющим секунды. Слишком короткие значения могут привести к частым разрывам соединений, тогда как слишком длинные — бессмысленно занимать системные ресурсы.

Пример конфига

http {
    lingering_timeout 10;
}
server {
    lingering_timeout 5;
}
location / {
    lingering_timeout 3;
}

Установка lingering_timeout на очень низкое значение может привести к резким отключениям, особенно в средах с высокой задержкой.

Слишком высокие значения могут привести к исчерпанию ресурсов, поскольку открытые соединения остаются неактивными в течение длительного времени.

reset_timedout_connection Директива `reset_timedout_connection` позволяет NGINX сбрасывать соединения, у которых истёк тайм-аут, чтобы освободить ресурсы.
httpserverlocation
Синтаксисreset_timedout_connection on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `reset_timedout_connection` используется в контекстах HTTP, server и location для управления бездействующими соединениями, которые превысили допустимый период неактивности. При включении эта директива гарантирует, что NGINX не оставляет соединения открытыми бесконечно, что может необоснованно расходовать ресурсы сервера. Сбрасывая такие соединения, NGINX может поддерживать лучшую производительность при высокой нагрузке и повышать отзывчивость за счёт освобождения ресурсов, которые могут быть выделены новым запросам вместо поддержания «спящих» соединений. Директива принимает один аргумент — флаг, который указывает, активировать ли это поведение. При установке в 'on' NGINX будет систематически проверять соединения с истёкшим тайм-аутом и принудительно их закрывать. Эта настройка особенно полезна в средах с высоким трафиком, где соединения могут оставаться в полувскрытом состоянии из‑за неактивности на стороне клиента. Внутренние параметры таймаута соединений будут определять, как быстро такие простые соединения будут выявлены и закрыты, поэтому директива часто используется совместно с другими директивами таймаута для тонкой настройки управления соединениями. Важно отметить, что хотя эта директива полезна для управления использованием ресурсов, её неправильная настройка может привести к преждевременному завершению соединений, что потенциально ухудшит пользовательский опыт, если соединения сбрасываются слишком агрессивно. Директива служит дополнительной мерой безопасности, повышающей устойчивость обработки соединений на серверах NGINX.

Пример конфига

server {
    listen 80;
    server_name example.com;

    location / {
        reset_timedout_connection on;
        proxy_pass http://backend;
    }
}

Убедитесь, что настройки таймаутов (например, `keepalive_timeout`) настроены правильно, чтобы не прерывать важные соединения.

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

absolute_redirect Директива `absolute_redirect` управляет тем, использует ли NGINX абсолютные URI при перенаправлении запросов.
httpserverlocation
Синтаксисabsolute_redirect on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `absolute_redirect` в NGINX определяет, следует ли использовать абсолютные URI в перенаправлениях. По умолчанию NGINX генерирует перенаправления с относительными URI, что может приводить к несоответствиям в приложениях, где требуются полные URL с указанием протокола и имени хоста. При включении NGINX формирует ответы перенаправления с полным URL, включая схему (http или https) и информацию о хосте. Директива принимает флаговый аргумент, который может быть `on` или `off`: `on` означает, что для ответов перенаправления следует использовать абсолютные URI, а `off` — что не следует. Эта настройка особенно полезна при развёртывании NGINX за другими прокси или при обработке сложных сценариев маршрутизации, когда клиенту нужно явно сообщать точный целевой URI для обеспечения корректной работы. Директива может быть задана в блоках конфигурации, таких как http, server или location, что позволяет тонко настраивать поведение перенаправлений в разных частях приложения. Неправильная конфигурация может привести к битым ссылкам или неожиданному поведению перенаправлений веб-приложения.

Пример конфига

server {
    listen 80;
    server_name example.com;

    absolute_redirect on;

    location /old-path/ {
        return 301 /new-path/;
    }
}

Убедитесь, что директива задана в правильном контексте (http, server или location), чтобы избежать неожиданных последствий.

Использование absolute_redirect on может раскрыть внутреннюю структуру сервера при неправильной настройке, поэтому проверьте шаблоны URI.

server_name_in_redirect Директива server_name_in_redirect управляет тем, будет ли имя сервера включено в перенаправления.
httpserverlocation
Синтаксисserver_name_in_redirect on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива server_name_in_redirect при включении изменяет поведение NGINX при формировании перенаправлений (например, ответов HTTP 301 или 302) для запросов, обрабатываемых сервером. Конкретно она определяет, будут ли URL перенаправлений включать `server_name`, указанный в конфигурации блока server. По умолчанию при перенаправлении NGINX может использовать заголовок `Host` из запроса для построения URL перенаправления, но включение этой директивы принудительно заставляет NGINX использовать вместо этого `server_name`. Эта директива особенно полезна в случаях, когда сервер NGINX обслуживает несколько доменных имён (т.е. виртуальные хосты) и вы хотите, чтобы перенаправления всегда отражали один конкретный домен. Например, если запрос приходит на `example.com`, но вы настроены перенаправлять на `www.example.com`, установка `server_name_in_redirect` в `on` гарантирует, что все перенаправления последовательно будут использовать `www.example.com`. Директива принимает флаг: значение может быть `on` для включения поведения или `off` для его отключения, что позволяет легко и гибко настраивать её в разных контекстах, таких как http, server и location блоки.

Пример конфига

server {
    listen 80;
    server_name example.com www.example.com;
    server_name_in_redirect on;

    location / {
        return 301 https://www.example.com$request_uri;
    }
}

Отсутствие установки этой директивы в соответствующем контексте может привести к непоследовательному поведению перенаправлений.

Если вы используете несколько серверных блоков, убедитесь, что в каждом задан правильный `server_name`, чтобы избежать неожиданных результатов.

port_in_redirect Директива `port_in_redirect` управляет тем, включается ли номер порта запроса в перенаправления, генерируемые NGINX.
httpserverlocation
Синтаксисport_in_redirect on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `port_in_redirect` используется для определения того, как NGINX обрабатывает номер порта в ответах с перенаправлением, генерируемых сервером. При установке этой директивы в `on` NGINX включает номер порта в заголовок Location любых ответов с перенаправлением, которые он генерирует, если сервер прослушивает нестандартный порт. Это особенно полезно для точного направления клиентов на правильный хост и порт в случаях, когда веб‑сервер работает не на стандартных портах HTTP (80) или HTTPS (443). Напротив, при установке в `off` номер порта опускается из URL перенаправления, что означает, что клиенты при переходе по перенаправлению могут использовать стандартные порты по умолчанию. С практической точки зрения эта директива может быть критически важна для обеспечения корректного перенаправления клиентов при доступе к службам, настроенным на использование нестандартных портов, поскольку отсутствие номера порта в перенаправлении может привести к путанице или к сбоям запросов. Она применима в контекстах `http`, `server` и `location`, что обеспечивает гибкость в зависимости от требований конкретного сервера или пути. Настройка `port_in_redirect` помогает устранить неоднозначности, которые могут возникать из‑за сложных конфигураций сервера с несколькими службами, работающими на разных портах.

Пример конфига

server {
    listen 8080;
    port_in_redirect on;
    location / {
        return 301 http://example.com;
    }
}

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

Если ваш сервер работает на стандартных портах, установка этой директивы в `on` может необоснованно раскрыть порт в ответах.

Будьте осторожны при сочетании с конфигурациями HTTPS и нестандартными портами.

msie_padding Управляет тем, как NGINX заполняет HTTP-ответы для Internet Explorer.
httpserverlocation
Синтаксисmsie_padding on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `msie_padding` используется для управления добавлением заполнения ответа специально для браузеров Internet Explorer (IE). Когда функция включена, она добавляет заполнение в тело ответа, чтобы улучшить совместимость с некоторыми версиями IE, которые могут некорректно отображать страницы при обработке chunked responses или при отправке определённых типов контента, таких как gzip. Эта директива гарантирует, что клиенты IE получают корректно сформированные ответы, учитывающие особенности браузера, тем самым избегая проблем, таких как нарушение верстки или неполное содержимое. Директива принимает один флаговый аргумент, который может включать или отключать добавление заполнения. При установке в `on` NGINX применит необходимое заполнение; установка в `off` отключает эту функцию, что может привести к снижению совместимости и проблемам с отображением в старых версиях IE. Поведение этой директивы особенно важно для сайтов, которые всё ещё обслуживают устаревших клиентов, поэтому перед изменением её состояния следует тщательно оценить последствия.

Пример конфига

http {
    msie_padding on;
    server {
        location / {
            # serve your content here
        }
    }
}

Использование `msie_padding on` в современных браузерах может привести к ненужным накладным расходам, поскольку новые браузеры не требуют этой функции.

Учтите последствия для производительности при включении padding на сайтах с высоким трафиком, поскольку это может добавить дополнительные байты к каждому ответу.

msie_refresh Директива `msie_refresh` управляет поведением HTTP-ответов для браузеров Internet Explorer, чтобы обеспечить корректное обновление кэшированного содержимого.
httpserverlocation
Синтаксисmsie_refresh on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `msie_refresh` специально разработана для помощи в обработке кэширования контента в Internet Explorer. При включении эта директива принудительно добавляет заголовок HTTP-ответа, который помогает IE распознавать необходимость обновления кэшированного содержимого. Это может быть особенно полезно, когда ресурсы часто обновляются и вы хотите, чтобы пользователи сразу видели самую актуальную версию при использовании IE. Директива может принимать значение flag, которое указывает, следует ли включать или отключать эту функцию. С точки зрения реализации, `msie_refresh` обычно используется в контекстах HTTP, server или location. Принятый аргумент — flag, который задаёт, следует ли включать поведение обновления для Internet Explorer. Когда flag установлен в 'on', в исходящих ответах будут добавлены необходимые заголовки; в противном случае поведение по умолчанию — не отправлять эти заголовки. Важно учитывать, где применяется директива, так как это может существенно повлиять на то, как пользователи воспринимают ваш сайт в этом конкретном браузере.

Пример конфига

server {
    listen 80;
    server_name example.com;

    location / {
        msie_refresh on;
    }
}

Убедитесь, что директива `msie_refresh` установлена в правильном контексте (http, server или location), чтобы она вступила в силу.

Проверьте совместимость с версиями Internet Explorer, поскольку более старые версии могут по-разному вести себя в отношении кэширования.

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

log_not_found Директива log_not_found контролирует, записывать ли в журнал запросы к отсутствующим файлам.
httpserverlocation
Синтаксисlog_not_found on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `log_not_found` в NGINX используется, чтобы указать, должен ли сервер записывать в журнал запросы к файлам, которых не существует. Эта директива может быть чрезвычайно полезна для веб-администраторов, поскольку помогает отслеживать доступ к несуществующим ресурсам на сервере, что может выявлять неработающие ссылки, проблемы с конфигурацией или попытки доступа к неавторизованному контенту. Она может быть активирована на уровнях контекста `http`, `server` или `location`, что позволяет обеспечить гибкий и детализированный контроль ведения журналов.

Пример конфига

server {
    log_not_found on;
}

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

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

log_subrequest Директива `log_subrequest` управляет тем, регистрируются ли подзапросы в журналах ошибок NGINX.
httpserverlocation
Синтаксисlog_subrequest on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `log_subrequest`, используемая в контекстах `http`, `server` и `location`, позволяет указать, должны ли регистрироваться подзапросы, выполняемые сервером. Подзапрос — это внутренний запрос, создаваемый NGINX, обычно генерируемый такими директивами, как `include` или `try_files`. По умолчанию записи этих подзапросов могут захламлять основной журнал ошибок, затрудняя обнаружение важных проблем. Эта директива позволяет подавлять такие записи, гарантируя, что основной журнал содержит только значимую информацию о верхнеуровневых запросах. Когда включено (установлено в `on`), подзапросы будут регистрироваться с уровнем error, то есть любые проблемы, возникающие во время этих внутренних запросов, будут записаны в журналы ошибок NGINX. Соответственно, установка значения `off` отключает логирование этих подзапросов, уменьшая объём записываемых данных. Это особенно полезно в сценариях с высоким трафиком, где подзапросов может быть много, и логирование каждого из них может повлиять на производительность и привести к большим и неудобным для работы файлам журналов. Синтаксис этой директивы прост — она принимает флаговое значение, поэтому её легко интегрировать в существующие конфигурации с минимальными усилиями. Рекомендуется обоснованно использовать её, исходя из потребностей мониторинга и ограничений по объёму файлов или производительности; директиву можно применять в отдельных контекстах, чтобы точнее регулировать, какая информация попадает в журналы.

Пример конфига

http {
    log_subrequest on;

    server {
        location /example {
            try_files $uri /subrequest;
        }
    }
}

Имейте в виду, что логирование большого количества подзапросов может привести к большим файлам журналов, что повлияет на производительность и усложнит управление журналами.

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

recursive_error_pages Директива `recursive_error_pages` управляет тем, обрабатываются ли страницы ошибок рекурсивно.
httpserverlocation
Синтаксисrecursive_error_pages on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `recursive_error_pages` может быть установлена в 'on' или 'off', позволяя пользователям включать или отключать рекурсивную обработку страниц ошибок. Когда эта директива установлена в 'on', если запрос сталкивается со страницей ошибки (например, 404 Not Found), NGINX попытается обработать эту страницу ошибок в рамках той же конфигурации, что потенциально позволит отдавать дополнительные страницы ошибок, если они сами встретят ошибки. Эта директива полезна для упрощения обработки ошибок в сложных конфигурациях сайта, где сами страницы ошибок могут зависеть от дополнительных настроек конфигурации. Например, если страница ошибки также неправильно настроена, вместо немедленного возврата ошибки NGINX попытается обработать её в том же контексте конфигурации, что может привести к более понятному отображению ошибок для пользователей. Однако следует быть осторожным, чтобы не создавать циклы, когда страницы ошибок постоянно ссылаются друг на друга без разрешения. Директиву можно размещать в любом контексте `http`, `server` или `location`, что даёт широкий контроль над тем, как управляются различные уровни обработки ошибок. Следует отметить, что включение рекурсивной обработки страниц ошибок может привести к дополнительным накладным расходам и усложнению в сценариях, где обработка ошибок может увеличить нагрузку на сервер.

Пример конфига

http {
    recursive_error_pages on;

    server {
        error_page 404 /custom_404.html;
    }
}

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

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

server_tokens Директива 'server_tokens' управляет тем, включает ли NGINX версию сервера в HTTP-заголовки ответа.
httpserverlocation
Синтаксисserver_tokens on | off | build;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'server_tokens' в NGINX используется для управления отображением информации о версии в HTTP-заголовках ответа. По умолчанию, когда 'server_tokens' установлена в 'on', в заголовке ответа 'Server' показывается версия сервера NGINX. Это может потенциально раскрыть информацию, полезную злоумышленникам. Для повышения безопасности сервера установка этой директивы в 'off' предотвратит включение деталей версии NGINX и вместо этого будет возвращать просто 'nginx' в качестве идентификатора сервера. Кроме того, директива может принимать параметр 'build', который будет показывать информацию о версии только на страницах ошибок, скрывая её в обычных ответах. Такое поведение помогает минимизировать поверхность атаки, не позволяя злоумышленникам легко определить версию сервера для эксплуатации известных уязвимостей.

Пример конфига

http {
    server_tokens off;
}

Установка 'server_tokens off' не предотвращает отображение версии на страницах ошибок, если параметр 'build' указан некорректно.

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

Эта директива должна находиться в контексте 'http', 'server' или 'location'. Если она размещена неверно, она не вступит в силу.

if_modified_since Директива 'if_modified_since' контролирует, как NGINX отвечает на запросы на основе метки времени Last-Modified указанного ресурса.
httpserverlocation
Синтаксисif_modified_since on | off | exact;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `if_modified_since` используется в NGINX для управления кэшированием содержимого на основе заголовка Last-Modified, отправляемого клиентами. Эта директива может принимать одно из трёх значений: `off`, `on` или `exact`. При значении `on` NGINX проверяет, был ли запрашиваемый ресурс изменён после времени, указанного в заголовке If-Modified-Since запроса клиента. Если ресурс не изменился, NGINX отвечает статусом 304 Not Modified, что указывает клиенту, что он может использовать свою кэшированную версию. Опция `exact` уточняет сравнение, требуя точного совпадения метки времени. Если метка времени If-Modified-Since в запросе совпадает с меткой Last-Modified ресурса, NGINX вернёт ответ 304 Not Modified. Это может быть полезно для более строгой валидации кэша. Напротив, при значении `off` директива отключает такое поведение проверки, и NGINX всегда будет возвращать ресурс, независимо от состояния кэша на стороне клиента. Это может быть полезно в сценариях, где обновления содержимого происходят часто и кэширование не приносит пользы.

Пример конфига

server {
    location /images/ {
        if_modified_since on;
    }
}

Не забудьте проверить, что ваш бэкенд или статические файлы корректно устанавливают заголовок Last-Modified; в противном случае директива не будет работать должным образом.

Опция `exact` не вернёт ответ 304, если метки времени не совпадают точно, в отличие от опции `on`, которая считает любой неизменённый ресурс валидным.

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

max_ranges Директива 'max_ranges' ограничивает количество HTTP-диапазонных запросов, которые сервер NGINX обработает для одного ответа.
httpserverlocation
Синтаксисmax_ranges number;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

`max_ranges` директива в NGINX используется для ограничения максимального числа диапазонных HTTP-запросов, которые сервер будет обслуживать в одном ответе. Диапазонный запрос позволяет клиентам запрашивать определённые части ресурса, что полезно для возобновления загрузок или потоковой передачи мультимедиа. Ограничивая количество запрашиваемых диапазонов, можно сэкономить ресурсы сервера и смягчить влияние сложных запросов диапазонов на производительность. Директива определяется в контекстах `http`, `server` и `location`, что делает её универсальной для различных сценариев конфигурации. Если клиент отправляет запрос с несколькими диапазонами, превышающими значение, заданное в `max_ranges`, NGINX вернёт HTTP-ошибку, указывающую, что запрос не может быть выполнен. Это помогает предотвратить потенциальные атаки типа отказ в обслуживании через чрезмерные запросы диапазонов и улучшает устойчивость сервера под нагрузкой. Параметр для `max_ranges` — это целое число, обозначающее максимальное число принимаемых диапазонов. Например, если установить его в 5, сервер будет обрабатывать не более 5 диапазонов одновременно и отклонять все последующие. Такая настройка особенно важна для медиа-серверов или приложений, отдающих большие файлы, где клиенты могут попытаться запрашивать обширные диапазоны байтов одновременно, что приводит к возрастанию накладных расходов.

Пример конфига

http {
    max_ranges 4;
}

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

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

chunked_transfer_encoding Директива 'chunked_transfer_encoding' включает или отключает передачу чанками для HTTP-ответов в NGINX.
httpserverlocation
Синтаксисchunked_transfer_encoding on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Когда директива chunked_transfer_encoding установлена в 'on', NGINX будет использовать передачу чанками для отправки ответов клиентам, вместо указания общего размера содержимого в HTTP-заголовках. Передача чанками особенно полезна для динамически генерируемого содержимого, когда общий размер содержимого неизвестен в начале ответа. Используя этот метод, NGINX может начинать отправку данных клиенту сразу после их появления, что может улучшить воспринимаемую производительность приложения и снизить задержку. Директива принимает флаговый аргумент, который может быть 'on' или 'off'. При значении 'on' NGINX включает передачу чанками, а 'off' её отключает. Положение этой директивы гибкое; она может использоваться в контекстах http, server или location, позволяя применять её глобально или в конкретном контексте в соответствии с потребностями. Как правило, включение передачи чанками более полезно для ответов, которые генерируются динамически, например создаваемых CGI-скриптами или при обратном проксировании к серверу приложений, когда окончательная длина содержимого заранее неизвестна.

Пример конфига

http {
    server {
        location / {
            chunked_transfer_encoding on;
            proxy_pass http://backend;
        }
    }
}

Отключение chunked transfer encoding при использовании dynamic content может привести к увеличению задержки, поскольку NGINX будет вынужден узнать общий размер содержимого перед отправкой ответа.

Смешивание chunked responses с buffer settings может вызвать непредвиденное поведение; убедитесь, что buffer configurations совместимы с chunked encoding при их включении.

etag Директива 'etag' управляет генерацией заголовков ответа ETag в NGINX.
httpserverlocation
Синтаксисetag on | off;
По умолчаниюon
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'etag' в NGINX используется для включения или отключения генерации ETag в заголовках HTTP-ответов. ETags, или теги сущностей, применяются для проверки кэшированных ответов браузерами и прокси‑серверами, что позволяет эффективно управлять кэшем. Когда директива 'etag' установлена в 'on', NGINX будет генерировать ETags на основе содержимого ресурса, которые будут добавлены в заголовки ответа. Напротив, при установке в 'off' NGINX не будет включать ETags в ответ, что может быть желательным в случаях, когда управление ETag осуществляется в другом месте или когда дополнительная нагрузка на генерацию ETag не нужна. На практике включение ETags может улучшить проверку кэша, но не всегда оказывается полезным. Например, если ваш бэкенд‑сервис уже обрабатывает ETags, добавление их повторно в NGINX может привести к несоответствиям. Кроме того, ETags иногда могут раскрывать детали версий ресурсов, которые могут считаться конфиденциальными. Администраторам необходимо оценить стратегию кэширования приложения, чтобы определить, стоит ли эффективно использовать эту директиву. В целом использование директивы 'etag' должно учитывать конкретные механизмы кэширования и архитектуру приложения.

Пример конфига

http {
    server {
        location / {
            etag off;
        }
    }
}

Включение ETags может привести к несоответствиям, если backend также генерирует ETags.

Убедитесь, что вы учитываете последствия раскрытия версионирования ресурсов через ETags.

early_hints Директива `early_hints` позволяет NGINX отправлять HTTP 103 Early Hints ответы до окончательного ответа.
httpserverlocation
Синтаксисearly_hints ...;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `early_hints` в NGINX разработана для HTTP/3 и может отправлять предварительные HTTP 103 ответы, позволяющие серверу предоставлять клиенту подсказки до окончательного ответа. Это особенно полезно для предварительной загрузки ресурсов — указаний таких ресурсов, как таблицы стилей или скрипты, которые клиент может захотеть загрузить в ожидании рендеринга страницы. Директиву можно настроить глобально в блоке `http`, либо конкретно для контекстов `server` или `location`; она требует по крайней мере одного аргумента, который обычно включает заголовок 'link', указывающий ресурсы для предзагрузки. При использовании `early_hints` можно значительно ускорить загрузку веб-страниц за счёт предварительного информирования браузера о необходимых ресурсах. После настройки этой директивы ссылки, указанные в ответе, позволят браузерам начать загрузку этих ресурсов, пока они всё ещё ожидают окончательного ответа, что сокращает время, блокирующее отрисовку. Однако для эффективного использования этой функции приложение также должно быть спроектировано с учётом обработки таких ранних ответов, и следует проверить поддержку в браузерах, поскольку не все браузеры одинаково обрабатывают early hints.

Пример конфига

http {
    server {
        location / {
            early_hints 'Link: ; rel=preload';
        }
    }
}

Не все клиенты и браузеры корректно поддерживают ответы HTTP 103, что может приводить к непоследовательному поведению.

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

error_page Директива `error_page` настраивает пользовательские страницы ошибок для указанных HTTP кодов состояния.
httpserverlocationif in location
Синтаксисerror_page code1 [code2 ...] uri;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `error_page` используется в конфигурациях NGINX для определения пользовательских ответов при ошибках для конкретных HTTP кодов состояния. Эту директиву можно применять в разных контекстах, таких как `http`, `server`, `location` или внутри блока `if` в пределах блока `location`. Вы можете указать два или более аргумента: первый — это HTTP код состояния или диапазон (например, `404` или `500 502 503 504`), а второй — это URI, который будет использоваться как страница ошибки и может указывать либо на статический файл, либо на другой блок `location`.\n\nКогда происходит ошибка, например файл не найден (`404`) или ошибка сервера (`500`), NGINX проверяет директивы `error_page`, определённые для этого кода. Если найден соответствующий код ошибки, NGINX отобразит содержимое, соответствующее указанному URI, что позволяет формировать индивидуальные ответы для конечного пользователя. Страница ошибки может быть либо файлом на диске, либо другим `location`, который далее обрабатывает запрос. Кроме того, может использоваться внутренняя переадресация для более гибкой обработки сложных ответов об ошибках.\n\nЭффективное использование `error_page` может улучшить пользовательский опыт, предоставляя более информативные или эстетически привлекательные страницы ошибок по сравнению со стандартными сообщениями об ошибках, генерируемыми сервером. Кроме того, разработчики могут привязывать пользовательские страницы ошибок к более детальной аналитике или ресурсам по устранению неполадок, привязанным к конкретным кодам ошибок. Такая гибкость помогает улучшить как удобство использования, так и отладку веб-приложений и статических сайтов.

Пример конфига

http {
    error_page 404 /custom_404.html;
    location = /custom_404.html {
        root /usr/share/nginx/html;
    }
}

Указание несуществующего URI может привести к рекурсивной обработке ошибок.

Страницы ошибок с блоком `location` сами не должны возвращать 404, иначе это вызовет следующий обработчик ошибок.

Не все HTTP-коды состояния можно использовать; убедитесь, что проверили документацию NGINX на предмет допустимых кодов.

post_action Директива `post_action` задаёт обработчик, который выполняется после отправки ответа клиенту.
httpserverlocationif in location
Синтаксисpost_action uri;
По умолчаниюnone
Контекстhttp, server, location, if in location
МодульNGINX HTTP Core

Описание

Директива `post_action` в NGINX позволяет указать дополнительное действие, которое должно выполняться после обработки запроса. Эту директиву можно определить на разных уровнях конфигурации NGINX, таких как http, server, location, или внутри 'if' выражений в пределах location block, что обеспечивает гибкость в соответствии с различными потребностями при обработке HTTP-запросов. Основная цель этой директивы — позволить выполнять последующие задачи обработки, которые не влияют на немедленный ответ клиенту, такие как логирование, уведомления или дополнительная фоновая обработка.\n\nКогда вы используете директиву `post_action`, указанный URI будет запрошен после выполнения основного запроса, потенциально отправляя фоновый запрос к другой конечной точке. Однако важно убедиться, что эта конечная точка обрабатывается должным образом, поскольку NGINX не ждёт завершения `post_action`; он лишь запускает её после обработки основного ответа. Это позволяет выполнять операции, которые не критичны для опыта пользователя, но могут быть важны для аудита или обслуживания системы.\n\nДиректива принимает один аргумент — URI, который будет запрошен post-action. Учтите, что URI может включать параметры запроса и должен напрямую относиться к действительному location block, определённому в конфигурации NGINX.

Пример конфига

location /example {
    post_action /post-handler;
}

Убедитесь, что URI, указанный в `post_action`, существует и доступен для NGINX, иначе это может привести к непредвиденному поведению.

`post_action` не ожидает завершения обработки на бэкенде; любые необходимые операции очистки должны выполняться внутри самого `post_action`.

open_file_cache Директива `open_file_cache` включает кэширование дескрипторов файлов для улучшения производительности отдачи файлов.
httpserverlocation
Синтаксисopen_file_cache max=number [inactive=time] | none;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `open_file_cache` в NGINX используется для управления кэшированием дескрипторов файлов, что позволяет NGINX повторно использовать файловые дескрипторы для часто запрашиваемых файлов. Это снижает накладные расходы на открытие и закрытие дескрипторов файлов, тем самым повышая производительность отдачи файлов в сценариях с большим трафиком. Директива может принимать один или два аргумента; первый аргумент задаёт максимальное количество дескрипторов файлов для кэширования, тогда как необязательный второй аргумент определяет период времени (в секундах), в течение которого кэш остаётся действительным перед проверкой изменений файлов. Эта функциональность может быть критически важна для оптимизации доставки статических файлов, так как минимизирует влияние операций ввода/вывода файловой системы.

Пример конфига

http {
    open_file_cache max=1000 inactive=30;
}

Установка `max` слишком высокого значения может привести к чрезмерному использованию памяти сервера, если кэшируется много дескрипторов файлов, что может вызвать снижение производительности.

Если `inactive` задано некорректно, это может привести к использованию устаревших дескрипторов файлов и к выдаче устаревшего содержимого.

open_file_cache_valid Директива open_file_cache_valid задаёт, как долго информация о кэшированных файлах считается действительной.
httpserverlocation
Синтаксисopen_file_cache_valid time;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `open_file_cache_valid` используется для настройки срока действия кэшированных атрибутов файлов в NGINX. Она принимает один аргумент, который указывает длительность, в течение которой информация о кэшированных файлах считается действительной, прежде чем NGINX попытается проверить файловую систему на наличие обновлений. Эта функциональность особенно полезна для оптимизации производительности доступа к файлам за счёт сокращения ненужных проверок файловой системы и, как следствие, улучшения времени отклика при обслуживании статических файлов. Вы можете устанавливать эту директиву в контекстах `http`, `server` или `location`, что даёт гибкость в зависимости от конфигурации сервера. Аргумент — это значение времени (например, `30s`, `5m`, `1h`), указывающее длительность, в течение которой статус файла (например, время модификации) должен считаться действительным. NGINX будет обходить проверки файловой системы для файлов, которые всё ещё находятся в пределах этого периода действия, полагаясь на кэшированную информацию при обслуживании запросов. После истечения указанного периода NGINX повторно проверит кэшированную информацию, обеспечивая распознавание изменений файлов в файловой системе. Важно тщательно выбирать длительность действия, чтобы найти баланс между производительностью (сокращением проверок файловой системы) и точностью (актуальной информацией с диска).

Пример конфига

open_file_cache active; 
open_file_cache_valid 30s;

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

Убедитесь, что файловый кэш включён с помощью 'open_file_cache', чтобы 'open_file_cache_valid' вступил в силу.

open_file_cache_min_uses Задает минимальное количество обращений, после которых файл кэшируется в памяти.
httpserverlocation
Синтаксисopen_file_cache_min_uses number;
По умолчанию1
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `open_file_cache_min_uses` задаёт минимальное количество обращений к файлу, после которого файл допускается к кэшированию в кеше открытых файлов. Эта функция оптимизирует производительность, гарантируя, что в памяти сохраняются только часто запрашиваемые файлы, что снижает накладные расходы на системные вызовы файловой системы для редко используемых файлов. Когда файл открывается, NGINX сравнивает число обращений к нему со значением этой директивы. Если число обращений файла больше или равно заданному порогу, файл добавляется в кэш; в противном случае он остаётся некэшированным. Такой подход может привести к заметному повышению эффективности, особенно в сценариях, где одни файлы запрашиваются часто, а другие — редко. Директива принимает целое число в качестве аргумента, которое обозначает минимальное требуемое количество обращений. Она особо полезна в окружениях с большим количеством статических файлов, так как предотвращает переполнение кэша редко используемыми файлами. Поведение кэширования может существенно улучшить время отклика и снизить дискoвую нагрузку, поддерживая оптимальный набор файлов в памяти. Важно балансировать `open_file_cache_min_uses` с другими директивами кэширования, чтобы настроить параметры под шаблоны доступа вашего приложения.

Пример конфига

http {
    open_file_cache         max=1000 inactive=20s;
    open_file_cache_min_uses 5;
}

Слишком высокое значение этого параметра может помешать кэшированию полезных файлов.

Если шаблоны доступа к файлам существенно изменятся, значение директивы может потребовать корректировки.

Убедитесь, что общее число кэшируемых файлов не превышает установленные лимиты в других настройках `open_file_cache`.

open_file_cache_errors Директива 'open_file_cache_errors' контролирует, следует ли кэшировать статусы ошибок при открытии файлов в NGINX.
httpserverlocation
Синтаксисopen_file_cache_errors on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'open_file_cache_errors' — это функция оптимизации производительности в NGINX, которая определяет, должен ли сервер кэшировать ответы с ошибками при попытках доступа к файлам. Когда она включена, NGINX будет кэшировать статусы ошибок, связанные с попытками доступа к файлам, что может улучшить время отклика при повторных запросах к одним и тем же файлам, которые могут не существовать или быть недоступны для чтения. Это предотвращает необходимость NGINX проверять файловую систему при каждом запросе файла, снижая дисковые операции ввода-вывода и улучшая производительность при высокой нагрузке. Директива принимает в качестве аргумента флаг: "on" для включения кэширования этих ошибок и "off" для его отключения. По умолчанию директива отключена, то есть статусы ошибок не кэшируются, и каждый запрос доступа к файлу повторно проверяет файловую систему, что может привести к большей задержке, особенно если несколько запросов направлены к одним и тем же отсутствующим или недоступным файлам. В сценариях, где критична достоверность статусов ошибок (например, при динамически генерируемом контенте), используйте с осторожностью, так как это может приводить к отдаче устаревших ошибок при неправильной настройке.

Пример конфига

http {
    open_file_cache_errors on;
}

server {
    location / {
        open_file_cache_errors on;
    }
}

Caching errors могут привести к устаревшим ответам, если статус файла изменится и cache не будет обновлён.

Если включено, длительно выполняющиеся ответы с ошибкой могут привести к ненужному disk I/O, если ошибки не cached должным образом.

open_file_cache_events Директива open_file_cache_events управляет поведением кэширования событий открытия файлов в NGINX.
httpserverlocation
Синтаксисopen_file_cache_events on | off;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива open_file_cache_events является частью NGINX HTTP Core module и позволяет указать, следует ли кэшировать события, связанные с открытием файлов. Когда включено, NGINX будет отслеживать события доступа к файлам, такие как открытие или закрытие файла, что может значительно повысить производительность за счёт уменьшения частоты обращений к файловой системе и, следовательно, снижения I/O operations. Эта директива принимает единственный флаг в качестве аргумента, который может быть 'on' или 'off', указывая, включено или отключено кэширование событий открытия файлов соответственно. Использование этой директивы может значительно повысить отзывчивость вашего NGINX‑сервера, особенно в сценариях, где файлы часто открываются и закрываются при обработке запросов. Однако включение этой директивы может привести к получению устаревших данных, если файлы изменяются вне процесса NGINX без его уведомления, поэтому важно выбрать правильный баланс в зависимости от потребностей вашего приложения. При использовании open_file_cache_events следует учитывать, что она располагается в контексте http, server или location. У этой директивы нет параметра по умолчанию, и она должна быть явно установлена в блоке конфигурации, где требуется кэширование файлов.

Пример конфига

http {
    open_file_cache_events on;
    location / {
        open_file_cache max=2000 inactive=60s;
    }
}

Включение open_file_cache_events может привести к устаревшей информации о файлах, если файлы изменены и не кэшируются заново.

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

resolver Директива resolver определяет DNS-серверы, используемые для разрешения имён доменов.
httpserverlocation
Синтаксисresolver address [address...];
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `resolver` используется в конфигурации NGINX для указания одного или нескольких DNS-серверов (IP-адресов), которые применяются для разрешения имён доменов в серверных запросах. Это особенно важно, когда кэширующие слои или бекенды используют доменные имена, IP-адреса которых могут меняться, и серверу требуется динамически разрешать эти имена по требованию. Директиву можно задавать в контекстах `http`, `server` и `location`, что обеспечивает гибкость в разрешении DNS в зависимости от области действия конфигурации. Синтаксис директивы `resolver` включает один или несколько IP-адресов, разделённых пробелами. Примечательно, что NGINX будет опрашивать указанные DNS-серверы в том порядке, в котором они перечислены. Если DNS-сервер недоступен, NGINX перейдёт к следующему серверу в списке, что фактически обеспечивает резервирование при разрешении DNS. В случае отказа, если все настроенные серверы не ответят, произойдёт ошибка разрешения, из-за чего запросы, зависящие от этих разрешённых доменных имён, завершатся неудачей. Кроме того, директива `resolver` может включать необязательные параметры, такие как настройка таймаута (в секундах) и параметр `valid`, который определяет, как долго разрешённый адрес считается актуальным. Это позволяет NGINX динамически управлять поведением кэша для разрешённых адресов в зависимости от потребностей приложения.

Пример конфига

http {
    resolver 8.8.8.8 8.8.4.4;
}

Ошибки разрешения DNS могут привести к сбоям запросов в конфигурациях NGINX, которые зависят от динамических имён хостов.

Убедитесь, что указанные DNS-серверы доступны из сети сервера NGINX.

Использование недопустимого формата IP-адреса может привести к ошибкам конфигурации.

resolver_timeout Директива resolver_timeout задает максимальное время разрешения DNS в NGINX.
httpserverlocation
Синтаксисresolver_timeout time;
По умолчанию30s
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `resolver_timeout` в NGINX используется для указания предела времени для разрешения DNS-имён. Этот таймаут является важным параметром для приложений, которые зависят от внешних DNS-записей, например при использовании директивы `proxy_pass` для пересылки запросов к upstream-серверам, указанным по имени хоста. Задав эту директиву, администраторы могут контролировать, как долго NGINX будет ждать завершения разрешения DNS, прежде чем произойдёт тайм-аут и, возможно, будет зафиксирована ошибка или обработка запроса завершится неудачей. Директива принимает один аргумент, задающий длительность таймаута, которую можно указать в секундах (по умолчанию) или с использованием единиц времени, таких как 'm' для минут, 'h' для часов и т. п. Этот таймаут не только помогает управлять ресурсами в условиях высокой нагрузки, но и способствует повышению устойчивости приложения к задержкам, связанным с DNS-запросами. Директиву можно использовать на уровнях контекстов `http`, `server` и `location`, что даёт гибкость для настройки на разных уровнях маршрутизации. Крайне важно установить соответствующее значение таймаута в зависимости от конкретных потребностей приложения. Слишком короткий таймаут может привести к сбоям при доступе к сервисам, которые из-за сетевых проблем отвечают медленно, тогда как слишком длинный таймаут может необоснованно занять рабочие процессы, что приведёт к ухудшению производительности во время проблем с разрешением DNS.

Пример конфига

resolver 8.8.8.8;
resolver_timeout 5s;

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

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

Директива влияет только на задержки разрешения DNS и не затрагивает другие таймауты сетевых операций.

gzip_vary Директива `gzip_vary` управляет тем, включается ли заголовок ответа `Vary: Accept-Encoding` для контента, сжатого с помощью gzip.
httpserverlocation
Синтаксисgzip_vary on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_vary` в NGINX используется для включения или отключения добавления HTTP-заголовка `Vary: Accept-Encoding` в ответах, где применяется сжатие gzip. Этот заголовок важен для поведения кэширования у прокси и CDN, так как он указывает, что ответ может различаться в зависимости от заголовка запроса `Accept-Encoding`, отправляемого клиентом. Когда `gzip_vary` установлен в `on`, это гарантирует, что агенты пользователей, поддерживающие разные кодировки контента, будут получать корректно закэшированные версии ресурсов в зависимости от поддерживаемой ими кодировки. При использовании `gzip_vary`, если gzip включён и эта директива активирована, NGINX добавит заголовок `Vary: Accept-Encoding` в ответ. Это позволяет промежуточным системам кэширования понимать, что содержимое ответа может отличаться в зависимости от того, принимает ли клиент данные, сжатые gzip. Если установлено в `off`, этот заголовок добавляться не будет, что может привести к нежелательным эффектам кэширования, особенно для пользователей, которые не запрашивают сжатие gzip. Эту директиву можно определить в различных контекстах, включая `http`, `server` и `location`, что делает её гибкой для разных конфигураций. Это особенно полезно, когда разные типы клиентов могут требовать разных представлений одного и того же ресурса в зависимости от их возможностей по поддержке кодировок.

Пример конфига

http {
    gzip on;
    gzip_vary on;
}

Убедитесь, что ваш механизм кэширования (например, proxy или CDN) распознаёт заголовок `Vary`.

Установка `gzip_vary` в положение `on` без включения gzip может ввести в заблуждение, так как заголовок будет отправляться без какого-либо эффекта.

gzip_http_version Директива gzip_http_version задаёт минимальную версию HTTP, необходимую для применения gzip-сжатия в NGINX.
httpserverlocation
Синтаксисgzip_http_version version;
По умолчанию1.0
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива gzip_http_version в NGINX определяет минимальную версию HTTP, которую клиент должен поддерживать, чтобы получать gzip-сжатые ответы. Эта настройка важна для оптимизации использования полосы пропускания и сокращения времени загрузки для клиентов, способных обрабатывать сжатые данные. Настроив эту директиву, администраторы гарантируют, что только те клиенты, которые умеют обрабатывать gzip-ответы, будут их получать, что помогает избегать проблем несовместимости со старыми версиями HTTP, которые могут не поддерживать сжатие. Параметром этой директивы является строка версии, которая может быть либо "1.0", либо "1.1". Если установлено значение "1.0", gzip-сжатие будет включено только для клиентов, использующих HTTP/1.0 или выше, тогда как установка "1.1" позволяет отправлять gzip-ответы только клиентам, использующим HTTP/1.1 или выше. Такая детализация позволяет лучше контролировать использование сжатия в зависимости от возможностей клиента, обеспечивая избегание лишних вычислительных затрат для пользователей старых протоколов. Эту директиву можно поместить в контексты http, server или location, что делает её гибкой для различных сценариев применения в конфигурациях сервера. Учитывая типы клиентов, обращающихся к серверу, администраторы сервера могут оптимизировать поведение сжатия для улучшения общей производительности без внесения возможных ошибок или осложнений.

Пример конфига

gzip on;
gzip_http_version 1.1;

Установка gzip_http_version в 1.1 может привести к отсутствию сжатия для клиентов HTTP/1.0, что потенциально увеличит размер ответа для этих пользователей.

Убедитесь, что gzip включён с помощью директивы 'gzip on;', чтобы эта директива вступила в силу.

При настройке версии HTTP следует учитывать совместимость со старыми клиентами. Чрезмерное ужесточение может оттолкнуть некоторых пользователей.

gzip_proxied Директива `gzip_proxied` управляет сжатием gzip для проксированных запросов на основе указанных условий.
httpserverlocation
Синтаксисgzip_proxied parameter [parameter ...];
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `gzip_proxied` в NGINX используется для настройки сжатия gzip для ответов, получаемых от проксируемых серверов. Установив эту директиву, вы можете указать, какие запросы должны иметь сжатые ответы, на основе условий, таких как код статуса HTTP или наличие конкретных заголовков в запросе. Директива принимает аргументы, такие как `off`, `expired`, `no-cache`, `no-store`, `private`, `no_last_modified` и `undispositioned`, среди прочих. Эти аргументы позволяют тонко управлять моментом применения сжатия gzip, оптимизируя пропускную способность и сокращая время загрузки для клиента в зависимости от характеристик ответа и запроса. Когда директива включена, она помогает повысить производительность веб-приложений, особенно в сценариях с большими размерами ответов. Условное поведение означает, что вы можете избежать сжатия ответов для некоторых кодов статуса (например, 4xx или 5xx) или для запросов, которым сжатие не принесет пользы. Включение сжатия может значительно уменьшить объём данных, передаваемых по сети, тем самым улучшая пользовательский опыт, особенно для клиентов с более медленным соединением. Однако важно правильно настроить её, чтобы избежать сжатия ненужного или уже сжатого содержимого.

Пример конфига

http {
    gzip on;
    gzip_proxied expired no-cache no-store private;
}

Убедитесь, что gzip включён глобально или на уровне сервера, чтобы эта директива вступила в силу.

Не используйте gzip с уже сжатыми файлами или ответами, так как это может привести к увеличению накладных расходов и ненужной обработке.

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

gzip_disable Директива gzip_disable контролирует отключение Gzip-сжатия на основе указанных значений user-agent.
httpserverlocation
Синтаксисgzip_disable user_agent | regex;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива gzip_disable позволяет администраторам управлять случаями, когда Gzip-сжатие не должно применяться, исходя из user-agent запроса. Это особенно полезно для оптимизации производительности — можно исключить определённых клиентов из получения сжатого содержимого, которое они могут не поддерживать, или которое может отрицательно влиять на функциональность, например некоторые краулеры или браузеры. Директива ожидает один или несколько аргументов, которые могут быть строками user-agent или регулярными выражениями. Если user-agent входящего запроса совпадает с любым из указанных аргументов, Gzip-сжатие для этого запроса отключается. Директива может применяться в контекстах http, server или location, что делает её универсальной для различных областей конфигурации в установке сервера NGINX. К использованию этой директивы следует подходить с осторожностью, внимательно учитывая user-agents, которые, вероятнее всего, получат выгоду от gzip-сжатия, и те, которые не получат. Неправильные настройки или слишком общие шаблоны user-agent могут привести к тому, что совместимым клиентам будут отправлены неоптимальные ответы.

Пример конфига

gzip on;
gzip_disable "msie6";
gzip_disable "Mozilla/5.0";

Использование слишком широких шаблонов user-agent может привести к отключению Gzip для непредназначенных клиентов.

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

disable_symlinks Директива `disable_symlinks` определяет, разрешены ли символические ссылки на уровне файловой системы при обработке запросов.
httpserverlocation
Синтаксисdisable_symlinks on | off | directive;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `disable_symlinks` в NGINX может быть настроена так, чтобы ограничивать поведение символических ссылок: она может либо разрешать, либо запрещать использование символических ссылок для файлов в определённых контекстах, таких как http, server и location. При установке эта директива может повысить безопасность, предотвращая доступ к файлам, на которые указывают символические ссылки, находящиеся за пределами предполагаемого document root или location block. Эта директива принимает один или два аргумента. Когда указан только один аргумент, он обозначает, отключены ли символические ссылки или нет. Можно указать второй аргумент, чтобы задать директорию или тип поведения символических ссылок, который разрешён. Этот дополнительный параметр повышает точность управления, позволяя относиться к конкретным файлам или каталогам иначе, чем к остальным в отношении символических ссылок. В результате системные администраторы могут защитить свои реализации NGINX, тщательно настроив эту директиву, чтобы предотвратить возможные уязвимости, возникающие из-за непреднамеренного доступа через символические ссылки. Также важно следовать принципу наименьших привилегий, разрешая доступ только к необходимым файлам.

Пример конфига

location /files {
    disable_symlinks on;
}

Неправильная конфигурация может привести к ошибкам 403 Forbidden, если symlinks используются непреднамеренно.

Если вы включите обработку symlink для каталога, убедитесь, что не раскрываете конфиденциальные файлы.

upstream Директива `upstream` определяет группу бэкенд-серверов для балансировки нагрузки.
http
Синтаксисupstream name { server address [parameter]; ... }
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `upstream` в NGINX создаёт именованный блок, в котором можно определить несколько бэкенд-серверов, обрабатывающих запросы в режиме балансировки нагрузки. В пределах блока `upstream` можно указать данные о нескольких серверах, включая их адреса и необязательные веса. NGINX поддерживает различные методы балансировки нагрузки, такие как round-robin, least connections и IP hash, которые также могут быть настроены в контексте `upstream`. Синтаксис директивы `upstream` позволяет указывать несколько серверов в рамках именованного контекста. Например, можно создать группу `upstream` с именем `backend`, которая включает несколько блоков server, каждый из которых представляет отдельный экземпляр приложения. Каждый сервер можно задать с его IP-адресом и необязательными параметрами, такими как `max_fails` и `fail_timeout`, чтобы управлять поведением NGINX при отказах серверов. Кроме того, вы можете настроить метод балансировки нагрузки в соответствии с потребностями вашего приложения, указав, например, `least_conn`, `ip_hash` и т.д. Директива `upstream` не имеет значений по умолчанию; её необходимо явно определить в конфигурационном файле. После настройки она служит точкой ссылки для других директив, таких как `proxy_pass`, которые могут использовать эту определённую группу для эффективного распределения входящего трафика по указанным бэкенд-серверам.

Пример конфига

upstream backend {
    server backend1.example.com;
    server backend2.example.com weight=2;
    server backend3.example.com max_fails=3 fail_timeout=30s;
}

Убедитесь, что блок upstream определён в контексте `http`, поскольку он недопустим в контекстах `server` или `location`.

Будьте осторожны с health checks и логикой failover, так как неправильная конфигурация может привести к отправке трафика на неотзывчивые серверы.

Weighting в upstream blocks влияет на распределение нагрузки; убедитесь, что оно соответствует вашим ожиданиям по управлению нагрузкой.

http2 Включает поддержку HTTP/2 в указанном контексте конфигурации NGINX.
httpserver
Синтаксисhttp2;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'http2' включает протокол HTTP/2 для входящих запросов, обрабатываемых NGINX. Эту директиву можно указывать в контекстах 'http' или 'server'; она особенно полезна при использовании вместе с директивой 'listen' для обозначения того, что блок server должен поддерживать HTTP/2. При включении становятся доступными возможности протокола HTTP/2, такие как мультиплексирование, сжатие заголовков и приоритизация запросов, что повышает производительность и эффективность доставки содержимого. Директива 'http2' принимает в качестве аргумента флаг, который указывает, включён ли HTTP/2 ('on') или выключен ('off'). По умолчанию эта директива установлена в 'off', то есть поддержка HTTP/2 отключена, если она явно не включена в блоке server или http. При включении клиенты, поддерживающие HTTP/2, могут согласовать использование этого протокола при обращении к серверу, что позволяет лучше использовать ресурсы и ускоряет загрузку веб-страниц, обслуживаемых NGINX. Важно отметить, что для использования HTTP/2 сервер должен быть настроен на использование TLS/SSL, так как большинство браузеров требует зашифрованного соединения для разрешения HTTP/2. Поэтому часто эту директиву используют вместе с SSL-related директивами в блоке server для обеспечения защищённых подключений.

Пример конфига

server {
    listen 443 ssl http2;
    server_name example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
}

Убедитесь, что на сервере включён SSL, поскольку большинство браузеров требует HTTPS для HTTP/2.

Избегайте использования HTTP/2 в серверных блоках, которым достаточно HTTP/1.1, поскольку это может вызвать ненужные сложности при согласовании.

Убедитесь, что ваши upstream‑серверы и прокси также поддерживают HTTP/2, если критична совместимость функций.

http2_recv_buffer_size Задает размер буфера приёма для HTTP/2-соединений в NGINX.
http
Синтаксисhttp2_recv_buffer_size size;
По умолчаниюnone
Контекстhttp
МодульNGINX HTTP Core

Описание

Директива `http2_recv_buffer_size` в NGINX используется для указания размера буфера, выделяемого для обработки входящего трафика HTTP/2. Эта директива критически важна для оптимизации способности сервера обрабатывать разные типы запросов, особенно при работе с множеством одновременных соединений, характерных для HTTP/2. По умолчанию значение не задано, что может привести либо к низкой производительности под высокой нагрузкой, либо к чрезмерному использованию памяти при слишком большом значении. Поэтому важно подобрать размер буфера с учётом ожидаемых шаблонов трафика и ресурсов сервера. При задании этой директивы она принимает один аргумент — размер, который можно указывать в байтах, килобайтах или мегабайтах (например, 1m для 1 мегабайта). Буфер используется преимущественно при чтении входящих данных от клиента, создавая контролируемую среду для управления HTTP/2-фреймами, передаваемыми по соединению. Установка слишком маленького буфера может привести к падению производительности или увеличению задержки, поскольку серверу потребуется более частое чтение из сокета. Напротив, чрезмерно большой буфер может привести к расточительному использованию оперативной памяти сервера, особенно при большом числе соединений. Следовательно, следует внимательно определить оптимальный размер буфера для каждого сервера в зависимости от ожидаемой нагрузки и доступных ресурсов.

Пример конфига

http {
    http2_recv_buffer_size 256k;
}

Убедитесь, что размер буфера правильно установлен в соответствии с ожидаемым объёмом трафика; слишком маленький может привести к проблемам с производительностью, слишком большой — к избыточному расходу памяти.

Неправильная конфигурация может привести к непредсказуемому поведению сервера или исчерпанию ресурсов под нагрузкой.

http2_pool_size Директива http2_pool_size задаёт размер пула соединений HTTP/2 в NGINX.
httpserver
Синтаксисhttp2_pool_size size;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива http2_pool_size используется для настройки размера пула соединений HTTP/2, что помогает управлять количеством одновременных соединений для клиентов HTTP/2. Оптимизируя размер пула, NGINX может эффективно обрабатывать параллельные соединения, снижая накладные расходы и повышая пропускную способность для трафика HTTP/2. Значение, указанное для этой директивы, обозначает размер в байтах разделяемой памяти, используемой для хранения данных соединений, связанных с потоками HTTP/2. Когда размер пула установлен слишком малым, это может привести к исчерпанию ресурсов соединений при высокой нагрузке, что потенциально вызовет у клиентов задержки или ошибки соединения. Напротив, чрезмерное выделение ресурсов может привести к ненужному потреблению памяти и повлиять на производительность сервера. Рекомендуется анализировать шаблоны трафика и при необходимости корректировать директиву http2_pool_size для оптимальной производительности в рабочих средах. Поведение этой директивы зависит от ожидаемой нагрузки и числа одновременных потоков, которые необходимо обработать. Корректный мониторинг и настройка могут привести к значительному улучшению отзывчивости сервера и опыта пользователей, особенно при обработке множества параллельных запросов, характерных для современных веб-приложений.

Пример конфига

http {
    http2_pool_size 64k;
    server {
        # server configuration
    }
}

Установка слишком малого размера пула может привести к исчерпанию ресурсов при высоком трафике.

Выделение слишком большого объёма памяти может негативно сказаться на производительности сервера.

Изменения этой директивы вступают в силу только после перезагрузки конфигурации NGINX.

http2_max_concurrent_streams Устанавливает максимальное количество параллельных потоков, которые могут быть установлены в рамках одного соединения HTTP/2.
httpserver
Синтаксисhttp2_max_concurrent_streams number;
По умолчанию128
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http2_max_concurrent_streams` используется для определения максимального числа одновременных потоков, которые могут быть открыты в любой момент в рамках одного соединения HTTP/2. Эту директиву можно задавать как в контексте `http`, так и в контексте `server`, что позволяет тонко контролировать, сколько одновременных запросов может обрабатываться по одному соединению с сервером. Указывая целочисленное значение для этой директивы, вы можете управлять нагрузкой и поведением производительности HTTP/2-трафика, обрабатываемого NGINX. Установка более высокого предела может повысить пропускную способность за счёт обработки большего числа одновременных запросов, но также может увеличить нагрузку на ресурсы сервера, особенно при высокой нагрузке. И наоборот, более низкий предел может предотвратить перегрузку сервера, но привести к увеличению задержки у конечных пользователей, поскольку запросам придётся ждать свободных потоков. Параметр представляет собой целое число, задающее количество одновременных потоков. Важно отслеживать производительность сервера и при необходимости корректировать это значение на основе нагрузочного тестирования и реальных шаблонов трафика.

Пример конфига

http {
    http2_max_concurrent_streams 64;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    http2_max_concurrent_streams 100;
}

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

Если клиент этого не поддерживает, увеличение числа потоков не окажет никакого эффекта; убедитесь в совместимости клиента с HTTP/2.

http2_max_concurrent_pushes Ограничивает максимальное количество одновременных HTTP/2 server push-ответов, которые может выполнять NGINX.
httpserver
Синтаксисhttp2_max_concurrent_pushes number;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

`http2_max_concurrent_pushes` директива настраивает максимальное количество одновременных серверных push-ответов, которые могут быть инициированы сервером NGINX при использовании протокола HTTP/2. Эта директива применима как в контекстах `http`, так и `server`, позволяя администраторам сервера тонко настраивать интенсивность отправки контента клиентам. Когда директива установлена, если число push-ответов превышает настроенное значение, дополнительные запросы на отправляемый контент будут помещены в очередь до тех пор, пока количество активных push-ответов не опустится ниже этого порога. Аргумент этой директивы — положительное целое число, задающее максимальное количество одновременных push-ответов. Это помогает предотвратить перегрузку сервера и управлять использованием ресурсов, особенно при высокой нагрузке, когда многочисленные запросы на push могут превысить возможности сервера. Настройка этой директивы может быть критичной в сценариях, где серверы отправляют ресурсы проактивно, улучшая время загрузки при навигации пользователя по ожидаемым ресурсам. По умолчанию, если значение не задано, оно установлено в `none`, что означает отсутствие ограничения со стороны этой директивы и позволяет столько одновременных push-ответов, сколько способен обработать сервер или клиент. Администраторы серверов рекомендуется выбирать значения с учётом возможностей их инфраструктуры и конкретных потребностей приложения, чтобы добиться оптимальной производительности без чрезмерной нагрузки или задержек.

Пример конфига

http {
    http2_max_concurrent_pushes 10;
}

server {
    listen 443 ssl http2;
    http2_max_concurrent_pushes 15;
}

Установка этого значения слишком низким может ухудшить производительность из-за чрезмерного накопления очереди push requests.

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

http2_max_requests Директива http2_max_requests настраивает максимальное количество одновременных HTTP/2-запросов, которые могут обрабатываться для одного соединения.
httpserver
Синтаксисhttp2_max_requests number;
По умолчанию100
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива http2_max_requests используется в NGINX для установки ограничения на число одновременных HTTP/2-запросов, которые могут обрабатываться по одному соединению. Это особенно полезно в условиях высокой нагрузки, где применяется мультиплексирование HTTP/2, позволяющее отправлять несколько запросов и ответов по одному соединению. Определяя эту директиву, администраторы могут контролировать использование ресурсов и избегать перегрузки сервера слишком большим количеством одновременных запросов, что потенциально предотвращает исчерпание ресурсов или другие проблемы с производительностью. Директива действует в контексте секции `http` или `server` конфигурации NGINX, что позволяет тонко настраивать поведение на разных уровнях. Значение, заданное для http2_max_requests, должно быть положительным целым числом и определять предел одновременных запросов. Если этот лимит достигается, последующие запросы будут поставлены в очередь до тех пор, пока число активных запросов не опустится ниже заданного порога, после чего обработка возобновится. Важно выбирать это значение с осторожностью: слишком низкое значение может приводить к недоиспользованию возможностей сервера, тогда как слишком высокое — к повышенной нагрузке на сервер. Поведение директивы соответствует архитектуре NGINX, ориентированной на высокую производительность и низкое потребление ресурсов, обеспечивая беспрепятственную работу HTTP/2 при сохранении стабильности сервера.

Пример конфига

http {
    http2_max_requests 50;
}

server {
    http2_max_requests 200;
}

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

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

http2_max_field_size Директива `http2_max_field_size` задаёт максимальный размер полей заголовков HTTP/2.
httpserver
Синтаксисhttp2_max_field_size size;
По умолчаниюdefault is 16k;
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http2_max_field_size` определяет максимальный размер отдельных полей заголовков HTTP/2, которые сервер NGINX будет принимать. Этот параметр имеет решающее значение для контроля объёма данных, который может быть отправлен в одном поле заголовка; это помогает смягчить атаки, приводящие к исчерпанию памяти, и обеспечивает соответствие конкретным требованиям приложения. Ограничение размера указывается в байтах и непосредственно влияет на то, как NGINX обрабатывает входящие запросы и управляет полями заголовков. При задании этой директивы, если поле заголовка превышает установленный предел размера, NGINX может отклонить запрос с ошибкой, обеспечивая таким образом защиту от чрезмерно крупных заголовков, которые потенциально могут использоваться в злоумышленных целях. Это особенно важно в условиях с высоким трафиком, где критичны эффективность и надёжность. Правильная настройка этой директивы позволяет администраторам системы эффективно балансировать между производительностью приложения и защитой ресурсов. Чтобы использовать директиву `http2_max_field_size`, просто укажите максимальный размер в байтах при её определении в контекстах `http` или `server` конфигурации NGINX. Такая гибкость позволяет администраторам вносить корректировки в зависимости от потребностей приложения — будь то стандартные размеры или необходимость в увеличенных значениях для конкретных случаев.

Пример конфига

http {
    http2_max_field_size 32k;
}

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

Имейте в виду, что эта директива применяется только к соединениям HTTP/2.

http2_max_header_size Директива http2_max_header_size устанавливает ограничение на максимальный размер заголовков в HTTP/2-запросах и ответах.
httpserver
Синтаксисhttp2_max_header_size size;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'http2_max_header_size' используется для контроля максимального размера заголовков HTTP/2, которые NGINX готов обрабатывать. Эта директива помогает снижать риск потенциальных атак типа отказа в обслуживании, предотвращая ситуацию, когда чрезмерно большие заголовки расходуют ресурсы сервера. Значение этой директивы указывается в байтах, и его корректная настройка важна для того, чтобы сервер мог эффективно обрабатывать типичные запросы, сохраняя при этом производительность и безопасность. Если заголовок превышает этот предел, NGINX вернёт клиенту ошибку, таким образом предотвращая перегрузку сервера из-за больших заголовков.\n\nДирективу можно настраивать в контекстах 'http' и 'server', что позволяет тонко регулировать параметры на разных уровнях конфигурации сервера. Она принимает один аргумент, который обозначает максимально допустимый размер заголовков. Имейте в виду, что слишком маленькие значения могут привести к отклонению легитимных запросов, а слишком большие — оставить сервер уязвимым к проблемам с производительностью или эксплуатации через искажённые запросы.

Пример конфига

http {
    http2_max_header_size 4096;
}

server {
    http2_max_header_size 8192;
}

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

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

http2_body_preread_size Директива http2_body_preread_size задаёт максимальный размер тела запроса HTTP/2, который может быть предварительно прочитан и буферизирован перед обработкой.
httpserver
Синтаксисhttp2_body_preread_size size;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http2_body_preread_size` используется для настройки максимального размера тела запроса HTTP/2, который может быть прочитан и временно сохранён в памяти (буферизирован) перед передачей его обработчику запроса в NGINX. Это особенно полезно для приложений, где требуется ранняя проверка тела запроса до его полной обработки. Когда запрос поступает по протоколу HTTP/2, буферизация части тела запроса позволяет NGINX анализировать или проверять содержимое, например проверять определённые заголовки или убеждаться, что тело соответствует ожидаемым форматам данных. Установка подходящего значения для `http2_body_preread_size` помогает оптимизировать использование памяти и производительность: слишком большое значение может привести к избыточному потреблению памяти, тогда как слишком маленькое может ограничить возможность эффективного чтения больших запросов. Директива принимает значение размера в качестве аргумента, которое можно указать в байтах (например, 1k, 2m), чтобы определить максимальное количество данных для буферизации. Настройка этого значения в соответствии с требованиями приложения и ожидаемыми размерами запросов важна для оптимальной производительности и управления ресурсами NGINX.

Пример конфига

http {
    http2_body_preread_size 64k;
}

Убедитесь, что заданный размер буфера соответствует ожидаемым размерам запросов, поскольку его недостаточность может привести к ошибкам обработки.

Учтите ограничения ресурсов: установка слишком большого размера может привести к увеличению использования памяти и потенциально вызвать нестабильную работу приложения.

http2_streams_index_size Директива 'http2_streams_index_size' задает размер индекса потоков HTTP/2 в NGINX.
httpserver
Синтаксисhttp2_streams_index_size size;
По умолчанию128
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'http2_streams_index_size' используется для настройки размера индекса, применяемого для управления потоками HTTP/2 в NGINX. Этот индекс помогает серверу эффективно управлять состоянием и данными при множественных одновременных соединениях HTTP/2. Заданное значение определяет, сколько потоков может быть проиндексировано, прежде чем сервер начнет иначе управлять этими соединениями. Больший размер индекса потенциально может улучшить производительность, позволяя большему числу одновременных потоков HTTP/2, но при этом потребует больше памяти. Кроме того, если индекс заполнится, старые потоки могут быть выгружены из памяти, что может привести к задержкам или потере запросов. При изменении этого параметра следует тщательно продумать решение, особенно на системах с ограниченной памятью или при высокой нагрузке.

Пример конфига

http2_streams_index_size 256;

Установка слишком малого размера индекса может привести к задержке или сбросу HTTP/2-запросов, если на сервере закончатся доступные слоты потоков.

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

http2_recv_timeout Директива http2_recv_timeout задаёт максимальное время ожидания получения данных от клиента по соединению HTTP/2 перед тайм-аутом.
httpserver
Синтаксисhttp2_recv_timeout time;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http2_recv_timeout` применима в контекстах `http` и `server` и определяет, сколько времени сервер будет ожидать получения дополнительных данных от клиента по соединению HTTP/2. Если указанное время истекает и данные не поступают, сервер завершит соединение, закрыв socket. Это важно для контроля использования ресурсов и предотвращения того, чтобы соединения оставались открытыми бесконечно из-за отсутствия активности со стороны клиента. Параметром этой директивы является значение времени, которое можно задавать в секундах или в более мелких единицах, что позволяет точно регулировать длительность тайм-аута. При настройке этого значения следует учитывать характер клиентских запросов и ожидаемые модели соединений. Если значение установить слишком коротким, это может привести к преждевременному разрыву соединений у клиентов, которым требуется больше времени для отправки данных; наоборот, слишком большое значение может вызвать истощение ресурсов из-за длительно простаивающих соединений. На практике директива `http2_recv_timeout` дополняет другие параметры конфигурации, связанные с тайм-аутами, позволяя администраторам тонко настраивать отзывчивость сервера и управление ресурсами в зависимости от требований приложения и ожидаемых шаблонов трафика.

Пример конфига

server {
    listen 443 ssl http2;
    http2_recv_timeout 10s;
}

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

Эта директива применяется только к соединениям HTTP/2; убедитесь, что её не путают с другими директивами таймаута для разных протоколов.

http2_idle_timeout Задает время, в течение которого неактивное соединение HTTP/2 остается открытым.
httpserver
Синтаксисhttp2_idle_timeout time;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http2_idle_timeout` задает максимальное время, в течение которого соединение HTTP/2 может оставаться неактивным, прежде чем сервер закроет его. Этот таймаут особенно полезен в сценариях, когда клиенты могут держать соединения открытыми без необходимости, потребляя ресурсы сервера без передачи данных. Установив подходящий таймаут простоя, администраторы сервера могут освободить ресурсы и улучшить производительность для других клиентов. Эта директива принимает один аргумент — значение времени в секундах, с необязательными суффиксами, такими как 'm' для минут и 'h' для часов. Например, указание `http2_idle_timeout 10s;` устанавливает таймаут простоя в 10 секунд. Если клиент не отправляет никаких запросов в течение указанного интервала, сервер закроет соединение, что может привести к более эффективному использованию ресурсов и улучшению общей производительности сервера. Важно подобрать сбалансированное значение, которое учитывает ожидаемые шаблоны использования клиентами, поскольку чрезмерно строгие ограничения могут слишком агрессивно разрывать соединения с клиентами.

Пример конфига

http2_idle_timeout 5s;

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

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

http2_chunk_size Директива 'http2_chunk_size' задаёт максимальный размер полезной нагрузки фрейма ответа HTTP/2, который может быть отправлен сервером.
httpserverlocation
Синтаксисhttp2_chunk_size size;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива 'http2_chunk_size' в NGINX задаёт предел размера полезной нагрузки фреймов ответа, передаваемых по протоколу HTTP/2. Эта директива позволяет администраторам контролировать максимальный размер фрагментов данных, отправляемых сервером клиенту. Отрегулировав этот параметр, вы можете оптимизировать сетевую производительность и потенциально снизить задержку: меньшие фрагменты могут обеспечить более быструю передачу за счёт увеличения числа фреймов и связанных с этим накладных расходов. Когда эта директива включена и настроена, NGINX будет разбивать большие тела ответов на фреймы, соответствующие указанному размеру фрагмента. Это особенно полезно в сценариях, где выдаются большие файлы или потоки данных, так как обеспечивает отправку данных управляемыми частями. Однако чрезмерно малый размер фрагмента может привести к повышенной загрузке CPU и увеличению накладных расходов из‑за дополнительной обработки фреймов, тогда как слишком большое значение может снизить эффективность механизмов мультиплексирования и приоритизации HTTP/2. Директива 'http2_chunk_size' применима в различных контекстах, включая 'http', 'server' и 'location', что позволяет обеспечить детальный контроль в зависимости от вашей архитектуры и требований. В целом следует внимательно подбирать это значение в соответствии с конкретным случаем использования и сетевыми характеристиками клиентов, получающих ответы.

Пример конфига

http2_chunk_size 16k;

Установка слишком малого chunk size может увеличить накладные расходы и использование CPU из-за увеличения количества обрабатываемых frames.

Не все browser clients могут эффективно обрабатывать маленькие chunk sizes, что может привести к проблемам с производительностью.

Если используется с upstream servers, убедитесь, что настройка согласована во всех связанных конфигурациях.

http2_push_preload Включает серверный push HTTP/2 для динамически предварительно загружаемых ресурсов.
httpserverlocation
Синтаксисhttp2_push_preload on | off;
По умолчаниюoff
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива `http2_push_preload` используется для указания того, что сервер должен проактивно отправлять ресурсы клиенту в контексте HTTP/2, не дожидаясь запроса со стороны клиента. Эта функция особенно полезна для оптимизации скорости загрузки страниц и улучшения пользовательского опыта за счёт доставки необходимых ресурсов в тот момент, когда они требуются. При установке в `on` директива позволяет серверу автоматически отправлять связанные ресурсы, помеченные для предварительной загрузки, на основе текущей запрашиваемой клиентом страницы. Эту директиву можно указать в контекстах `http`, `server` или `location` в конфигурационном файле NGINX. Включив `http2_push_preload`, администраторы сервера могут улучшить производительность загрузки приложений, особенно для сайтов с большим объёмом контента и множеством зависимостей ресурсов. Однако ненужные отправки могут расходовать пропускную способность и приводить к ухудшению производительности, если их не настроить правильно. Поэтому следует тщательно выбирать ресурсы, помечаемые для отправки, чтобы избежать отправки слишком большого количества ответов, которые клиенту не нужны.

Пример конфига

server {
    listen 443 ssl http2;
    server_name example.com;

    http2_push_preload on;

    location / {
        root /var/www/html;
        index index.html;
        add_header Link "/styles/main.css; rel=preload; as=style";
    }
}

Чрезмерное использование server push может привести к увеличению использования полосы пропускания.

Не все браузеры поддерживают HTTP/2 server push, поэтому поведение может отличаться у разных пользователей.

Всегда убеждайтесь, что pushed resources действительно полезны клиенту, чтобы не тратить ресурсы впустую.

http2_push Директива http2_push включает server push для конкретных ресурсов в NGINX.
httpserverlocation
Синтаксисhttp2_push URI;
По умолчаниюnone
Контекстhttp, server, location
МодульNGINX HTTP Core

Описание

Директива http2_push используется в NGINX для инициирования server push для ресурсов, которые следует отправлять клиенту проактивно, улучшая время загрузки веб-приложений. При определении в контекстах http, server или location эта директива приказывает NGINX отправлять указанные ресурсы всякий раз, когда поступает соответствующий запрос к указанному URI. Это особенно эффективно в HTTP/2, который позволяет серверу одновременно отправлять несколько ответов на один и тот же запрос клиента. Директива http2_push принимает один аргумент, который определяет ресурсы, отправляемые принудительно. Как правило, это статические файлы, такие как таблицы стилей или скрипты, которые клиенту понадобятся для полного отображения страницы после её получения. Предварительная отправка этих файлов позволяет снизить воспринимаемое время загрузки, поскольку клиенту не требуется делать дополнительные запросы за этими ресурсами. Правильное управление такими отправками крайне важно, так как отправка ненужных ресурсов может привести к потере полосы пропускания и снижению производительности. При использовании директивы http2_push важно убедиться, что отправляемые ресурсы действительно необходимы для начального рендеринга страницы на стороне клиента. Это не только улучшает производительность, но и предотвращает чрезмерное использование ресурсов на стороне сервера. Кроме того, необходимо убедиться, что клиент поддерживает HTTP/2, поскольку откат на более старые версии HTTP не позволит эффективно использовать эту директиву.

Пример конфига

http2_push /static/style.css;
http2_push /static/script.js;

Ресурсы следует тщательно выбирать, чтобы избежать лишних накладных расходов при передаче по сети.

Убедитесь, что клиент поддерживает HTTP/2 для эффективного использования возможностей server push.

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

http3 Директива http3 включает поддержку протокола HTTP/3 в NGINX.
httpserver
Синтаксисhttp3 on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http3` позволяет NGINX поддерживать протокол HTTP/3, который является третьей основной версией Hypertext Transfer Protocol. HTTP/3 построен поверх QUIC, сетевого протокола транспортного уровня, изначально разработанного Google. Эта директива, если она установлена в 'on', позволяет серверу обрабатывать запросы по HTTP/3, используя мультиплексирование потоков и обеспечивая повышенную производительность по сравнению с традиционными протоколами HTTP/2 и HTTP/1.1. При включении NGINX взаимодействует с клиентами, поддерживающими HTTP/3, предоставляя им преимущества уменьшенной задержки и большей устойчивости соединения благодаря уникальным возможностям QUIC, таким как установление соединения с 0RTT и лучшее восстановление при потере пакетов. Директиву можно разместить как в контекстах `http`, так и `server`, что позволяет задать конфигурацию глобально или для конкретного сервера. Установив директиву в 'on', сервер будет пытаться использовать HTTP/3 для поддерживающих клиентов, одновременно продолжая обслуживать остальных с помощью старых протоколов. Это делает переход на новые версии протоколов более плавным, не полностью прерывая поддержку существующих протоколов. Кроме того, требуется корректная настройка TLS/SSL, поскольку HTTP/3 опирается на зашифрованные соединения, поэтому перед развертыванием этой директивы важно установить соответствующие сертификаты.

Пример конфига

server {
    listen 443 ssl;
    http3 on;
    ssl_certificate /etc/nginx/ssl/example.crt;
    ssl_certificate_key /etc/nginx/ssl/example.key;
}

Убедитесь, что QUIC правильно включён на сервере и что необходимые порты открыты (обычно UDP 443).

Убедитесь, что сертификаты SSL настроены правильно, поскольку HTTP/3 требует зашифрованных соединений.

Проверьте, что ваши клиенты поддерживают HTTP/3, так как старые клиенты перейдут на HTTP/2 или HTTP/1.1.

http3_hq Включает поддержку HTTP/3 в NGINX.
httpserver
Синтаксисhttp3_hq on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http3_hq` — это параметр конфигурации в NGINX, который включает или отключает поддержку HTTP/3, третьей крупной версии протокола передачи гипертекста. Эту директиву можно разместить в контексте `http` или `server`, что позволяет выполнять настройку как на глобальном уровне, так и для конкретного сервера. При включении NGINX будет слушать соединения QUIC, которые HTTP/3 использует в качестве транспортного уровня, и обрабатывать запросы по этому протоколу. Использование этой директивы может существенно улучшить время отклика и обеспечить более устойчивую обработку потерь пакетов, поскольку HTTP/3 построен на QUIC, который предоставляет такие возможности, как мультиплексирование и миграция соединений. Когда директива `http3_hq` установлена в `on`, NGINX будет обрабатывать запросы HTTP/3 соответствующим образом, а при установке в `off` будет возвращаться к традиционным протоколам HTTP/1.1 или HTTP/2 для обслуживания веб-контента. Важно убедиться, что серверные сертификаты соответствуют необходимым требованиям, поскольку QUIC и HTTP/3 обычно используются совместно с HTTPS. Административная осведомленность имеет важное значение, поскольку включение HTTP/3 может потребовать специальных дополнительных настроек, например использования UDP для трафика QUIC и соответствующих правил файрвола, чтобы избежать блокировки запросов HTTP/3.

Пример конфига

server {
    listen 443 ssl http3;
    http3_hq on;
    ssl_certificate /etc/ssl/certs/example.com.crt;
    ssl_certificate_key /etc/ssl/private/example.com.key;
}

Убедитесь, что ваша система поддерживает QUIC и UDP; в противном случае HTTP/3 не сможет работать должным образом.

Может потребоваться настроить брандмауэры, чтобы разрешить UDP-трафик, который критически важен для HTTP/3.

Сертификаты должны быть корректно настроены для работы с QUIC; недействительный сертификат приведёт к сбоям при установлении HTTP/3-соединений.

http3_max_concurrent_streams Задает максимальное количество одновременных потоков HTTP/3, разрешённых для одного соединения.
httpserver
Синтаксисhttp3_max_concurrent_streams number;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http3_max_concurrent_streams` задаёт максимальное количество одновременных потоков, которые могут быть открыты в одном соединении HTTP/3. Эта директива необходима для оптимизации использования ресурсов и производительности, особенно в сценариях с высокой нагрузкой или при подключении к клиентам, которые могут одновременно открывать множество потоков. Она позволяет настроить ёмкость сервера в соответствии с ожидаемыми нагрузками и управлять отзывчивостью приложения, контролируя, сколько одновременных запросов может обрабатываться в любой момент по HTTP/3. По умолчанию, если директива явно не установлена, NGINX регулирует уровень параллелизма согласно своей внутренней логике. Когда значение установлено в виде предела, это гарантирует, что дополнительные потоки сверх этого числа будут поставлены в очередь или отклонены до завершения существующих потоков, что помогает предотвратить исчерпание ресурсов. Этот параметр принимает положительное целое число, которое представляет количество потоков, что позволяет чётко контролировать поведение в соответствии с возможностями сервера и ожидаемыми шаблонами трафика. Тщательная настройка этой директивы критически важна для обеспечения оптимальной производительности в средах, где используется HTTP/3, поскольку чрезмерно низкое значение может привести к узким местам в производительности, тогда как слишком высокое значение без достаточных ресурсов может привести к ухудшению производительности или сбоям.

Пример конфига

http {
    http3_max_concurrent_streams 100;
    server {
        listen 443 ssl http3;
    }
}

Установка этой директивы на слишком высокое значение может привести к исчерпанию ресурсов сервера.

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

http3_stream_buffer_size Директива 'http3_stream_buffer_size' задаёт размер буфера для данных QUIC-потока в NGINX.
httpserver
Синтаксисhttp3_stream_buffer_size size_in_bytes;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `http3_stream_buffer_size` используется в NGINX для указания максимального размера буфера, используемого для каждого QUIC-потока, что позволяет оптимизировать выделение памяти и управление данными при обслуживании трафика HTTP/3. Путём настройки этой директивы администраторы сервера могут влиять на характеристики производительности QUIC-соединений, особенно при изменяющихся нагрузках и шаблонах потоков. Директива принимает один параметр, задающий размер буфера в байтах, что позволяет тонко настраивать значение в зависимости от ожидаемого числа одновременных потоков и характера обслуживаемого контента. Один из ключевых аспектов этой директивы — её роль в управлении использованием пропускной способности и общей эффективностью использования ресурсов. Больший размер буфера может улучшить производительность потоковой передачи для соединений с высокой пропускной способностью, тогда как меньший буфер может быть полезен для серверов с ограниченными ресурсами или при низком уровне трафика, способствуя более быстрому освобождению ресурсов. Таким образом, определение оптимального значения требует понимания конкретных потребностей приложения и ожидаемых схем использования в отношении QUIC-потоков.

Пример конфига

http {
    http3_stream_buffer_size 16k;
    server {
        listen 443 quic;
        ...
    }
}

Установка слишком малого размера буфера может привести к частым опустошениям буфера или задержкам в передаче потока.

Недостаточное тестирование может привести к непредвиденным проблемам с производительностью при изменении значений по умолчанию.

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

quic_retry Директива `quic_retry` включает или отключает повторные попытки соединения QUIC в NGINX.
httpserver
Синтаксисquic_retry on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `quic_retry` используется для управления поведением протокола QUIC в отношении повторных попыток установления соединения. Когда она включена, NGINX будет отвечать входящим запросам на соединение, не содержащим действительного connection ID, пакетом retry. Этот механизм особенно важен, когда клиенты недавно установили соединение, которое может быть ещё не полностью завершено. Используя повторные попытки соединения, NGINX помогает справляться с ситуациями, когда у клиентов происходят обрывы соединения или переключения между сетями, позволяя им переподключаться без длительных задержек. Директива может принимать в качестве аргумента булев флаг: 'on' означает, что повторные попытки QUIC разрешены, а 'off' — что они запрещены. Такая гибкость позволяет системным администраторам включать или отключать функциональность повторных попыток QUIC в зависимости от конкретной сетевой среды или требований приложений. В контекстах `http` и `server` администраторы могут тонко настраивать реализацию QUIC, улучшая производительность и надёжность для пользователей, подключающихся по протоколу QUIC.

Пример конфига

http {
    quic_retry on;
}

server {
    listen 443 quic;
    quic_retry on;
}

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

Имейте в виду, что включение `quic_retry` может увеличить нагрузку на ваш сервер, если клиенты часто прерывают соединения.

quic_gso Директива 'quic_gso' включает или отключает использование Generic Segmentation Offload для QUIC-подключений в NGINX.
httpserver
Синтаксисquic_gso on | off;
По умолчаниюoff
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'quic_gso' используется в контекстах 'http' и 'server' в конфигурациях NGINX для управления поведением QUIC (Quick UDP Internet Connections) в отношении segmentation offloading. Эта функция позволяет NGINX более эффективно обрабатывать крупные пакеты, используя нижележащий сетевой стек для разделения данных на более мелкие пакеты перед отправкой. Это особенно полезно для приложений с высокой пропускной способностью, поскольку может снизить нагрузку на CPU и улучшить общую производительность при обслуживании QUIC-подключений. Когда директива 'quic_gso' включена, трафик QUIC будет использовать GSO там, где это поддерживается операционной системой и сетевым интерфейсом. Это означает, что вместо генерации множества мелких пакетов для одного QUIC-соединения сетевой стек будет разбивать крупные пакеты на необходимые размеры для передачи. За это поведение отвечает булев флаг — установка 'quic_gso on;' включает эту функцию, тогда как 'quic_gso off;' отключает её. По умолчанию функция фактически выключена, если явно не указано иное, поэтому администраторам важно учитывать эту директиву при оптимизации производительности приложений, интенсивно использующих QUIC. Время включения 'quic_gso' следует подбирать с учётом результатов тестов производительности для рабочих нагрузок приложений. Неправильные настройки могут привести к увеличению задержки или потере пакетов, особенно в сетях, которые не полностью поддерживают GSO. Рекомендуется проводить корректные тесты, чтобы обеспечить совместимость и улучшение производительности для конкретных сценариев использования.

Пример конфига

http {
    server {
        listen 443 ssl http2; 
        quic_gso on;
        # other configurations...
    }
}

Убедитесь, что ваш сетевой стек поддерживает GSO для оптимальной производительности.

Отключение GSO может привести к увеличению использования CPU и снижению пропускной способности для трафика QUIC.

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

quic_host_key Директива 'quic_host_key' задаёт ключ, используемый для соединений по протоколу QUIC в блоке server NGINX.
httpserver
Синтаксисquic_host_key key;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива 'quic_host_key' используется для указания уникального ключа хоста для каждого блока server при включении поддержки QUIC в NGINX. Этот ключ имеет решающее значение для установления защищённых соединений по протоколу QUIC, который работает поверх UDP, что отличает его от традиционных протоколов TCP. Директиву можно размещать либо в контексте 'http', либо в контексте 'server', что обеспечивает гибкость конфигурации. Указав ключ, NGINX включает обработку QUIC для назначенного сервера, что позволяет ускорить установление соединений и улучшить производительность для пользователей с совместимыми клиентами. QUIC, будучи сетевым протоколом транспортного уровня, использует этот ключ совместно с TLS (Transport Layer Security) для повышения безопасности при сохранении высокой скорости. Директива принимает один аргумент, который представляет собой ключ хоста, обычно это строка или путь к файлу криптографического ключа. Важно обеспечить безопасность выбранного ключа и сделать его доступным только для процесса NGINX, чтобы предотвратить утечку информации. Эта возможность необходима для сайтов, которые хотят воспользоваться преимуществами производительности, которые может дать QUIC, особенно для приложений, чувствительных к задержкам, и при доставке насыщенного контента.

Пример конфига

server {
    listen 443 quic;
    quic_host_key /etc/nginx/ssl/quic_host_key.pem;
    # additional server configurations...
}

Убедитесь, что файл ключа доступен процессу NGINX для чтения.

Неверный формат ключа может помешать корректной работе QUIC и привести к сбоям соединения.

Директива требует надлежащей настройки SSL/TLS и должна сопровождаться действительным сертификатом.

quic_active_connection_id_limit Управляет максимальным количеством активных connection IDs, используемых для QUIC-соединений.
httpserver
Синтаксисquic_active_connection_id_limit number;
По умолчаниюnone
Контекстhttp, server
МодульNGINX HTTP Core

Описание

Директива `quic_active_connection_id_limit` в NGINX задаёт предел числа активных connection IDs, которые могут использоваться для протокола QUIC (Quick UDP Internet Connections). QUIC разработан для более быстрого и эффективного управления соединениями в сети Интернет, устраняя некоторые ограничения TCP. Установив эту директиву, администраторы могут определить, сколько различных идентификаторов подключений QUIC может чередовать для конкретного `server` или контекста, повышая устойчивость к истощению connection IDs в сценариях, когда клиенты часто меняют сети. Значение этой директивы должно быть положительным целым числом и применяется как в контексте `http`, так и в контексте `server`. Когда клиент инициирует общение с использованием QUIC, он может несколько раз менять свои connection IDs по причинам производительности и безопасности. Эта директива гарантирует, что сервер поддерживает управляемое количество используемых connection IDs, предотвращая излишнюю трату ресурсов и возможные сценарии отказа в обслуживании (DoS). Установка слишком малого значения может ограничивать производительность при одновременном большом количестве сменяющихся подключений, тогда как слишком большое значение может привести к увеличению потребления ресурсов на уровне сервера.

Пример конфига

http {
    server {
        listen 443 quic;
        quic_active_connection_id_limit 100;
    }
}

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

Установка слишком высокого предела может неоправданно использовать ресурсы сервера.

Убедитесь, что QUIC правильно настроен и поддерживается сервером, чтобы эффективно использовать эту директиву.

auth_http Директива `auth_http` в NGINX Mail Core настраивает внешний сервер для аутентификации почтовых пользователей посредством HTTP-запроса.
mailmail server
Синтаксисauth_http URL;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `auth_http` используется в модуле NGINX Mail Core для обеспечения аутентификации почтовых пользователей через внешний HTTP-сервис. Когда она настроена, NGINX будет взаимодействовать с указанным HTTP-сервером для проверки учётных данных пользователей в процессе аутентификации. Это позволяет использовать существующие механизмы аутентификации на основе HTTP и предоставляет гибкость при интеграции NGINX с внешними поставщиками удостоверений. Директива принимает один аргумент — URL HTTP-сервера, который будет обрабатывать запросы аутентификации. Параметры задаются в определённом контексте почтового сервера, что позволяет адаптировать конфигурацию для разных экземпляров почтового сервера, поддерживаемых NGINX. Например, она может использоваться для интеграции с REST API, управляющим аутентификацией пользователей, что дополнительно расширяет возможности NGINX по управлению почтовыми сервисами. Директива `auth_http` особенно полезна в средах, где требуется централизованная аутентификация, и она поддерживает различные схемы аутентификации. В зависимости от ответа HTTP-сервера NGINX может либо предоставить доступ, либо отказать в нём на основе учётных данных, предоставленных пользователями при попытке подключиться к почтовому сервису.

Пример конфига

mail {
    server {
        listen 25;
        auth_http http://auth-server/auth;
    }
}

Убедитесь, что URL правильно отформатирован и доступен с сервера NGINX.

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

Убедитесь, что внешний HTTP-сервер отвечает быстро, чтобы избежать задержек в аутентификации почтовой службы.

auth_http_timeout Устанавливает таймаут для HTTP-запросов авторизации в почтовом модуле NGINX.
mailmail server
Синтаксисauth_http_timeout time;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `auth_http_timeout` задаёт таймаут для обмена с HTTP‑сервером, используемым для аутентификации в почтовом модуле NGINX. Это особенно важно при интеграции со внешними системами аутентификации, когда получение ответа может занимать больше времени, чем хочется или ожидается. Параметр для `auth_http_timeout` задаётся в формате времени и может включать единицы измерения, такие как секунды (s), минуты (m), часы (h) и т.д. Если указанный таймаут превышается, почтовый сервер вернёт клиентам ответ с ошибкой. Это помогает предотвратить бесконечную блокировку почтовых транзакций из‑за медленных ответов на аутентификацию. Администраторам важно выбрать значение, которое балансирует между предоставлением достаточного времени для законных процессов аутентификации и ограничением времени ожидания, чтобы обеспечить отзывчивость для пользователей. Во многих случаях достаточно таймаута в несколько секунд. Эту директиву можно помещать в контекст `mail` или `mail server`, то есть она должна быть определена внутри соответствующего блока в конфигурационном файле NGINX, относящегося к почтовым службам. В рамках настройки конфигурации крайне важно правильно настроить эту директиву, чтобы обеспечить оптимальную работу почтового сервера, особенно в средах, где аутентификация пользователей происходит через внешний сервис.

Пример конфига

mail {
    auth_http_timeout 5s;
    server {
        listen 110;
        protocol pop3;
    }
}

Убедитесь, что значение таймаута разумно, чтобы не отклонять легитимные попытки аутентификации.

Проверьте, что внешний HTTP-сервер аутентификации отвечает в течение заданного времени ожидания.

Проверьте валидацию формата времени; использование недопустимых форматов может привести к ошибкам конфигурации.

auth_http_header Директива auth_http_header задаёт HTTP-заголовки, используемые для аутентификации в модуле NGINX Mail.
mailmail server
Синтаксисauth_http_header header_name header_value;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `auth_http_header` используется в NGINX Mail Core для определения конкретных HTTP-заголовков, которые будут отправляться для целей аутентификации при подключении клиентов. Эта директива особенно полезна в сценариях, когда механизмы аутентификации требуют специальных заголовков для корректной обработки вышестоящими серверами. Указывая соответствующие заголовки, директива обеспечивает беспрепятственное выполнение процессов аутентификации во время почтовых транзакций. Эта директива принимает два аргумента: первый аргумент задаёт имя заголовка, а второй — ожидаемое значение этого заголовка. Когда клиент пытается пройти аутентификацию, NGINX включит эти заголовки в коммуникацию для проверки пользователей с удалённым сервисом аутентификации. Это критично в средах, где интегрированные системы требуют специальных форматов входных данных для эффективного управления аутентификацией. В составе конфигурации почтового сервера эта директива должна использоваться в контексте блоков почтового сервера, чтобы гарантировать её корректное применение к целевым почтовым сервисам. Правильная настройка этой директивы необходима для того, чтобы внешние сервисы аутентификации могли корректно распознавать и обрабатывать указанные заголовки, обеспечивая тем самым успешный поток аутентификации.

Пример конфига

mail {
    auth_http_header "X-Auth-User" "$remote_user";
}

Убедитесь, что имена заголовков написаны правильно, чтобы избежать ошибок аутентификации.

Убедитесь, что задаваемые заголовки не конфликтуют с уже существующими заголовками, используемыми сервером NGINX или почтовым клиентом.

auth_http_pass_client_cert Директива `auth_http_pass_client_cert` настраивает, следует ли передавать сертификат клиента на HTTP-сервер аутентификации.
mailmail server
Синтаксисauth_http_pass_client_cert on | off;
По умолчаниюoff
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `auth_http_pass_client_cert` является частью модуля Mail Core для NGINX и управляет пересылкой клиентского сертификата во время процессов HTTP-аутентификации. При установке в `on` NGINX пересылает сертификат клиента на внешний HTTP-сервер аутентификации, который затем может проверить или валидировать его по необходимости. Это особенно полезно в конфигурациях, где клиентские сертификаты являются частью механизма аутентификации и требуется проверка на централизованном сервере. Директива может принимать два значения: `on` и `off`. По умолчанию директива установлена в `off`, то есть сертификат клиента не будет пересылаться. Если функция необходима, операторы должны явно указать её в почтовой конфигурации NGINX. При значении `on` передаётся соответствующая информация о клиентском SSL, что важно для корректной проверки идентификации пользователя с помощью сертификатов. В практическом использовании следует провести соответствующие тесты, чтобы убедиться, что конфигурация работает как задумано, особенно в окружениях, где клиентские сертификаты требуются для доступа к определённым ресурсам. Неправильная настройка этой директивы может привести к отказам аутентификации или уязвимостям в безопасности, если сертификаты будут некорректно обработаны или станут доступны тогда, когда этого не должно происходить.

Пример конфига

mail {
    auth_http_pass_client_cert on;
    # additional configuration...
}

Убедитесь, что внешний сервер HTTP-аутентификации правильно настроен для обработки поступающих клиентских сертификатов.

Неправильное понимание последствий установки этой директивы в `on`, поскольку это может привести к раскрытию клиентских сертификатов, если HTTP-сервер не обрабатывает это должным образом.

protocol Директива 'protocol' указывает тип протокола для подключения к почтовому серверу в NGINX Mail Core module.
mail server
Синтаксисprotocol {imap | pop3 | smtp};
По умолчаниюnone
Контекстmail server
МодульNGINX Mail Core

Описание

Директива 'protocol' используется в контексте почтового сервера для определения протокола обмена, который почтовый сервер NGINX будет использовать для взаимодействия с клиентами. Эта директива особенно важна, так как она определяет, как клиенты будут подключаться и как сервер будет интерпретировать входящие данные. Поддерживаемые протоколы включают 'imap', 'pop3' и 'smtp'. Каждый протокол имеет свои специфические функции и поведение, что позволяет серверу NGINX обеспечивать разные типы почтовых операций в зависимости от требований.

Пример конфига

mail {
    server {
        listen 10.0.0.1:25;
        protocol smtp;
        # additional configuration
    }
}

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

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

timeout Директива 'timeout' задает максимальное время, в течение которого почтовый сервер ожидает обмена данными с клиентом перед закрытием соединения.
mailmail server
Синтаксисtimeout time;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива 'timeout' в модуле NGINX Mail Core имеет решающее значение для управления жизненным циклом соединений. Она определяет продолжительность бездействия до завершения соединения, предотвращая удержание сервером устаревших соединений, которые могут привести к исчерпанию ресурсов. Значение этого параметра задается в единицах времени, таких как секунды, минуты или часы, что позволяет гибко настраивать, как долго NGINX будет ждать активности клиента перед инициированием таймаута. При внедрении директивы 'timeout' в конфигурациях, связанных с почтой, необходимо учитывать конкретную среду и ожидаемые шаблоны взаимодействия клиентов. Например, в средах, где пользователи обычно остаются неактивными дольше, установка более высокого значения timeout может улучшить удобство использования, предотвращая преждевременные отключения. Напротив, установка более низкого значения timeout помогает поддерживать производительность сервера, быстро освобождая ресурсы, занятые неактивными соединениями. Директива влияет как на контекст почтового сервера, так и на общую стабильность почтового сервиса, особенно при большом трафике, когда число одновременных соединений может достигать максимальных порогов. Администраторам следует отслеживать показатели производительности после настройки timeout, чтобы оптимизировать значения по мере необходимости, балансируя между удобством пользователя и управлением ресурсами сервера.

Пример конфига

mail {
    server {
        timeout 5m;
    }
}

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

Убедитесь, что значение timeout соответствует потребностям вашего приложения, чтобы избежать недовольства пользователей.

max_errors Директива `max_errors` задаёт максимальное число ошибок, допускаемых при подключении к почтовым серверам.
mailmail server
Синтаксисmax_errors number;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

`max_errors` — директива, определённая в модуле NGINX Mail Core, которая указывает максимальное число ошибок подключения к почтовому серверу, которое экземпляр NGINX должен терпеть. Когда количество ошибок подключения превышает заданный лимит, NGINX перестаёт пытаться подключаться к этому почтовому серверу. Это полезно для предотвращения постоянных попыток NGINX подключиться к неотвечающему серверу, что могло бы привести к пустой трате ресурсов и снижению производительности. Директива принимает целочисленный аргумент, указывающий максимальное число ошибок. Например, если вы зададите `max_errors 3;`, то после трёх последовательных неудачных попыток подключения NGINX прекратит попытки подключиться к проблемному почтовому серверу, пока он не будет вручную повторно включён или служба NGINX не будет перезапущена. Этот параметр может быть критически важен для поддержания работоспособности и отзывчивости почтового сервиса, особенно в средах с несколькими почтовыми серверами, так как он позволяет эффективно использовать другие рабочие серверы, не перегружаясь постоянными проблемами с одним конкретным сервером.

Пример конфига

mail {
    server {
        listen 25;
        # Define the maximum errors
        max_errors 3;
        # Additional configurations here...
    }
}

Директива `max_errors` применяется только к подключениям к почтовым серверам и не влияет на другие типы подключений.

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

Обязательно отслеживайте журналы; в противном случае вы можете не заметить повторяющиеся сбои подключений.

imap_client_buffer Директива `imap_client_buffer` задаёт размер буфера для IMAP-клиентских подключений в NGINX Mail.
mailmail server
Синтаксисimap_client_buffer size;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `imap_client_buffer` в модуле NGINX Mail позволяет задать размер буфера, выделяемого для каждого IMAP-клиентского подключения. Этот буфер используется для хранения данных, полученных от клиента, перед их обработкой. Указав больший буфер, вы можете учесть клиентов, отправляющих более крупные команды или ответы, что может повысить производительность за счёт уменьшения количества операций чтения. Директива принимает один аргумент — размер буфера, который можно задавать в байтах или с суффиксами вроде `k` для килобайт и `m` для мегабайт. При настройке этой директивы важно сбалансировать использование памяти и требования к производительности, особенно на серверах, обрабатывающих много одновременных IMAP-подключений. Адекватно подобранный размер буфера может помочь предотвратить замедления, вызванные частыми операциями выделения памяти в периоды высокого трафика. Эту директиву следует использовать внутри контекстов `mail` или `mail server`, чтобы она применялась к нужной конфигурации почтового сервиса. Если она не задана, это может привести к неэффективности, особенно в средах, где несколько IMAP-клиентов активно взаимодействуют с сервером.

Пример конфига

mail {
    imap_client_buffer 512k;
}

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

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

imap_capabilities Директива `imap_capabilities` настраивает возможности IMAP-сервера в модуле NGINX Mail.
mailmail server
Синтаксисimap_capabilities capability1 [capability2 ...];
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `imap_capabilities` используется в контексте `mail` для указания списка возможностей, которые IMAP-сервер может предоставить почтовым клиентам. Этот список имеет решающее значение, так как информирует клиентов о функциях, поддерживаемых IMAP-сервером, таких как `IMAP4rev1`, `UIDPLUS` или `IDLE`, позволяя им принимать обоснованные решения о том, как взаимодействовать с сервером. \n\nКаждая возможность задаётся в виде строкового аргумента и может указываться несколько раз, при этом каждая следующая запись добавляется к списку возможностей, объявляемых сервером. Это обеспечивает возможность клиентам, выполняющим согласование возможностей при установлении соединения, распознавать и использовать функции, которые предоставляет ваш IMAP-сервер. Поэтому при заполнении этой директивы следует внимательно подбирать точные возможности, чтобы обеспечить корректную работу клиент-серверного взаимодействия и функциональность.\n\nПри использовании `imap_capabilities` рекомендуется включать распространённые возможности IMAP, что повышает совместимость с более широким спектром почтовых клиентов. Кроме того, любые неправильно сформированные записи могут привести к проблемам в процессе рукопожатия, поэтому важно строго соблюдать стандарты IMAP.

Пример конфига

mail {
    imap_capabilities IMAP4rev1 UIDPLUS IDLE;
}

Убедитесь, что названия возможностей написаны правильно и соответствуют стандартам IMAP, чтобы избежать ошибок рукопожатия с клиентами.

Определение конфликтующих возможностей может привести к непредсказуемому поведению или отключению отдельных функций.

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

imap_auth Директива imap_auth задаёт механизмы аутентификации, используемые для IMAP‑соединений в NGINX Mail.
mailmail server
Синтаксисimap_auth method1 [method2 ...];
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `imap_auth` играет ключевую роль в настройке методов аутентификации для IMAP‑соединений в модуле NGINX Mail. Она позволяет указывать один или несколько механизмов аутентификации, которые могут включать такие варианты, как 'PLAIN', 'LOGIN' или 'SCRAM-SHA-256'. Каждый механизм можно задавать отдельно, а порядок их перечисления определяет предпочтение при попытках аутентификации. Когда клиенты подключаются к IMAP‑серверу, они могут согласовать используемый метод аутентификации, и эта директива гарантирует, что сервер поддерживает запрошенный механизм. В реализации при установлении соединения с IMAP‑сервером NGINX оценит указанные механизмы и попытается провести аутентификацию в соответствии с последовательностью, определённой этой директивой. Если клиент запрашивает метод аутентификации, который не указан, соединение завершится с ошибкой, что гарантирует использование только поддерживаемых методов и повышает безопасность. Эту директиву следует размещать в контексте секции `mail`, конкретно в блоке `server`, который обрабатывает IMAP‑соединения. Дополнительные настройки могут также касаться прав пользователей и требований к TLS, и их следует внимательно интегрировать для создания надёжной системы аутентификации почты. Также важно понимать все последствия с точки зрения безопасности выбранных методов аутентификации, особенно при работе с нешифрованными (plain text) и зашифрованными методами.

Пример конфига

mail {
    server {
        listen 0.0.0.0:143;
        protocol imap;
        auth_http localhost:9000/auth;
        imap_auth plain login;
    }
}

Убедитесь, что указанные методы аутентификации поддерживаются как сервером, так и клиентами.

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

Пренебрежение настройкой связанных директив, таких как `auth_http`, может привести к неудачным попыткам аутентификации.

pop3_capabilities Директива 'pop3_capabilities' указывает возможности, поддерживаемые POP3-сервером в NGINX Mail Core.
mailmail server
Синтаксисpop3_capabilities capability_string;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива 'pop3_capabilities' используется в конфигурации почтового сервера NGINX для определения функций и возможностей, которые может поддерживать экземпляр POP3-сервера. При задании эта директива принимает строку, описывающую конкретные возможности, такие как удаление сообщений после получения или поддержка UIDL (список уникальных идентификаторов) и другие. Это позволяет клиентам, подключающимся к POP3-серверу, узнавать, какие функции доступны, повышая тем самым совместимость между почтовыми клиентами и сервером. Директива принимает один или несколько строковых аргументов, обозначающих различные возможности. Каждая строка с возможностью должна быть разделена пробелом в определении директивы. В зависимости от указанных возможностей клиенты могут соответственно изменять своё поведение, чтобы использовать поддерживаемые сервером функции. Например, если рекламируется возможность 'UIDL', почтовые клиенты могут предоставлять расширенные возможности управления сообщениями на сервере. Директива особенно полезна для соблюдения протокола POP3, гарантируя, что почтовые клиенты получают достаточную информацию о функциях сервера, которые они могут использовать. Правильная реализация директивы 'pop3_capabilities' важна для оптимального взаимодействия сервера и клиента. Неправильная конфигурация может привести к тому, что клиенты попытаются использовать неподдерживаемые возможности, что может привести к ошибкам или снижению производительности. Поэтому крайне важно обеспечить, чтобы перечисленные возможности точно отражали возможности сервера, реализованные в конфигурации.

Пример конфига

mail {
    pop3_capabilities UIDs DELE;
}

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

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

Со временем, если возможности изменятся (т.е. вы добавите или удалите функции), не забудьте соответствующим образом обновить эту директиву.

pop3_auth Директива `pop3_auth` определяет механизм аутентификации для POP3-сервера в Mail-модуле NGINX.
mailmail server
Синтаксисpop3_auth method | method ...;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `pop3_auth` используется для определения одного или нескольких методов аутентификации, которые POP3 сервер будет применять при попытках клиентов пройти аутентификацию. Эта директива позволяет указать несколько механизмов аутентификации, задав их как отдельные аргументы. Например, она поддерживает такие механизмы, как `plain`, `login` или `cram-md5` и другие. Порядок перечисления методов аутентификации имеет значение: сервер будет поочередно пытаться аутентифицировать клиента указанными методами до тех пор, пока один из них не сработает или все не завершатся неудачей, что приведёт к ошибке аутентификации. Администратору необходимо правильно настроить POP3 сервер, чтобы выбранные методы аутентификации соответствовали возможностям клиентов и требованиям безопасности. Неправильная конфигурация может привести к тому, что клиенты не смогут пройти аутентификацию или будет скомпрометирована конфиденциальность данных при использовании менее безопасных методов. Данная директива относится конкретно к коммуникациям по протоколу POP3 и должна располагаться внутри блоков `mail` или `server` в конфигурации NGINX в зависимости от требуемой области применения настройки. При задании этой директивы требуется уделять особое внимание безопасности используемых механизмов, чтобы снизить риск уязвимостей. Кроме того, важно убедиться, что для зашифрованной и незашифрованной связи настроены совместимые параметры в зависимости от выбранного метода аутентификации.

Пример конфига

mail {
    pop3_auth plain login cram-md5;
}

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

Использование ненадежных методов аутентификации может раскрыть учетные данные пользователей; по возможности предпочитайте безопасные альтернативы.

Учтите, что указание нескольких методов приведёт к тому, что сервер будет пытаться выполнить их в указанном порядке — будет использована первая успешная аутентификация.

proxy Директива 'proxy' в модуле NGINX Mail Core используется для определения настроек прокси для почтовых соединений.
mailmail server
Синтаксисproxy on;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива 'proxy' позволяет использовать прокси-сервер для управления почтовыми соединениями в модуле NGINX Mail. Указав эту директиву, пользователи могут направлять почтовый трафик через промежуточный сервер, повышая безопасность, обеспечивая балансировку нагрузки и централизуя управление почтой. Директива принимает флаг в качестве аргумента, который активирует соответствующие настройки прокси при работе с входящими и исходящими почтовыми соединениями. При включении директива 'proxy' позволяет задавать различные конфигурации, которые могут влиять на обработку почтового трафика. Это может включать такие параметры, как настройки ретрансляции и данные аутентификации, обеспечивающие безопасную и эффективную обработку почты. Она особенно полезна в сценариях, когда прямые подключения к почтовым серверам ограничены или контролируются, что позволяет реализовать более устойчивые стратегии доставки почты на нескольких инстансах сервера. Директиву можно размещать в контекстах mail и mail server, что делает её универсальной для приложений, требующих настройки почтового сервера. Однако важно убедиться, что необходимые upstream-конфигурации и дополнительные почтовые настройки заданы, чтобы полностью использовать возможности, предоставляемые функционалом proxy.

Пример конфига

mail {
    server {
        listen 25;
        proxy on;
        proxy_pass backend_servers;
    }
}

Убедитесь, что вы сочетаете эту директиву с соответствующими конфигурациями upstream, чтобы она работала корректно.

Если не определить backend servers, это может привести к ошибкам времени выполнения, так как прокси не будет знать, куда отправлять почтовый трафик.

Обеспечьте совместимость почтовых клиентов с прокси, чтобы предотвратить проблемы с доставкой сообщений.

proxy_buffer Директива `proxy_buffer` позволяет настроить размеры буферов для проксируемых почтовых сообщений в NGINX Mail Core.
mailmail server
Синтаксисproxy_buffer size;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `proxy_buffer` необходима для управления тем, как данные буферизуются при проксировании запросов к почтовому серверу в модуле NGINX Mail. Указав эту директиву, администраторы могут задать размер буфера, который NGINX использует для хранения входящих данных перед передачей их на backend server. Это помогает управлять использованием памяти и оптимизировать время отклика в зависимости от характера обрабатываемого почтового трафика. Директива принимает один аргумент, который указывает размер буфера. При применении буфер, заданный директивой `proxy_buffer`, позволяет NGINX накапливать входящие данные до достижения заданного порога или до завершения запроса. Такая буферизация особенно полезна для предотвращения исчерпания ресурсов на загруженных почтовых серверах, обеспечивая более плавную обработку запросов при высокой нагрузке или при работе с большими сообщениями. Кроме того, настройка этой директивы может повысить производительность за счёт уменьшения количества операций чтения в ситуациях, когда данные можно эффективно накапливать перед отправкой downstream. Важно учитывать, что хотя увеличение размера буфера позволяет эффективнее обрабатывать большие полезные нагрузки, оно также требует достаточного объёма памяти на сервере для размещения этих буферов без ухудшения общей производительности сервера. Поэтому администраторам рекомендуется проводить бенчмаркинг и тестирование конфигураций в производственных средах, чтобы найти оптимальный размер буфера, соответствующий их рабочим нагрузкам.

Пример конфига

mail {
    proxy_buffer 16k;
}

Установка слишком маленького буфера может привести к фрагментации запросов, что негативно скажется на производительности.

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

Убедитесь, что серверу выделено достаточно памяти для обработки настроенных размеров буферов.

proxy_timeout Директива `proxy_timeout` задаёт максимальное время ожидания для подключений в Mail Core-модуле NGINX.
mailmail server
Синтаксисproxy_timeout time;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `proxy_timeout` задаёт максимальное время, в течение которого почтовый сервер будет ждать, пока клиентское соединение остаётся неактивным, прежде чем оно будет разорвано. Эта директива важна для контроля использования ресурсов и предотвращения неоправданного потребления серверных ресурсов длительными соединениями. Директива принимает один параметр, задающий период тайм-аута. Время может задаваться в секундах с необязательными суффиксами для большей точности, например `1m` для одной минуты или `1h` для одного часа. Если указанный тайм-аут истечёт без какой-либо активности по соединению, сервер разрывает это соединение, освобождая ресурсы для других активных подключений. Это помогает управлять пропускной способностью сервера, особенно в условиях высокого трафика. Эту директиву можно применять в контексте `mail` или `mail server`, что напрямую влияет на производительность и надёжность почтового сервера. Правильная настройка этого параметра имеет решающее значение: слишком короткий тайм-аут может непреднамеренно закрывать активные соединения, а слишком длинный — приводить к расточительному использованию ресурсов и снижению производительности при нагрузке.

Пример конфига

mail {
    proxy_timeout 10s;
}

Установка слишком малого значения таймаута может привести к резким отключениям пользователей с медленным соединением.

Если эта директива не указана, поведение по умолчанию может привести к излишне длительному удержанию неактивных соединений.

proxy_pass_error_message Директива `proxy_pass_error_message` управляет обработкой сообщений об ошибках при передаче запросов проксируемому бэкенду в модуле NGINX Mail Core.
mailmail server
Синтаксисproxy_pass_error_message on | off;
По умолчаниюoff
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `proxy_pass_error_message`, при включении, позволяет NGINX возвращать сообщения об ошибках от upstream-сервера непосредственно клиенту, вместо их подавления. По умолчанию NGINX может маскировать подробные ответы об ошибках от проксируемого сервиса, чтобы обеспечить более плавный пользовательский опыт, но включение этой директивы может быть полезно для отладки или в целях прозрачности. Директива может располагаться в контекстах конфигурации `mail` и `server`, влияя на то, как обрабатываются ошибки в почтовых операциях. Если вы включаете эту директиву, установив её в `on`, поведение NGINX меняется и клиенту разрешается получать реальные заголовки и тело ответа об ошибке, как они возвращаются бэкенд-сервисом. Это особенно полезно, когда проксируемый сервер имеет специфическую обработку ошибок, которая может дать представление о проблемах, с которыми сталкивается пользователь. Соответственно, директива принимает булево значение в качестве аргумента: `on` указывает на то, что сообщения об ошибках должны передаваться, а `off` — что нет. Внимательное обдумывание того, когда использовать эту директиву, важно; использование её в рабочем окружении может раскрыть конфиденциальную информацию в сообщениях об ошибках, если не принимать соответствующих мер.

Пример конфига

mail {
    server {
        listen 25;
        proxy_pass_error_message on;
    }
}

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

Убедитесь, что проксируемые сервисы корректно обрабатывают ошибки, чтобы не сбивать клиентов с толку сырыми сообщениями об ошибках.

xclient Директива xclient управляет тем, устанавливать ли заголовок X-Client в IP-адрес удалённого клиента.
mailmail server
Синтаксисxclient on | off;
По умолчаниюoff
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `xclient` используется в NGINX Mail Core для управления включением IP-адреса удалённого клиента в заголовок X-Client исходящих ответов почтового сервера. Это особенно полезно в ситуациях, когда необходимо отслеживание или логирование реального IP-адреса клиента — например, когда запросы проксируются через другой сервер или при реализации мер безопасности, зависящих от знания исходного источника запроса. Когда директива включена, приложение NGINX вставляет IP клиента в поле X-Client заголовков почтового протокола, которое затем может использоваться бэкенд-обработчиком почты или сервисом логирования. Директива принимает флаговый аргумент, позволяющий администраторам переключать это поведение вкл./выкл. Важно правильно настроить эту директиву, чтобы избежать потенциальных проблем с конфиденциальностью, так как раскрытие IP-адресов клиентов может быть неприемлемо в некоторых контекстах. Поддерживаемые контексты для этой директивы — внутри блока mail и в конфигурациях почтового сервера. Это обеспечивает гибкость настройки в зависимости от конкретного развёртывания инстансов сервера, помогая вести логи, отражающие реальные подключения клиентов, и повышая отслеживаемость для различных целей аудита.

Пример конфига

mail {
    xclient on;
}

Убедитесь, что вы осведомлены о последствиях для конфиденциальности при включении этой директивы, поскольку она раскрывает информацию об IP клиента.

Неправильная конфигурация может привести к проблемам в обработке заголовков в зависимости от используемого стека почтового сервера.

proxy_smtp_auth Директива `proxy_smtp_auth` включает или отключает проксирование SMTP-аутентификации в модуле NGINX Mail Core.
mailmail server
Синтаксисproxy_smtp_auth on | off;
По умолчаниюoff
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `proxy_smtp_auth` — булев флаг, определяющий, должна ли информация об SMTP-аутентификации проксироваться из NGINX на upstream mail server. Когда установлено в 'on', NGINX будет передавать учётные данные SMTP-аутентификации, предоставленные клиентами, на backend server, что важно для поддержания пользовательских сессий и обеспечения защищённой связи. Если директива установлена в 'off', NGINX не будет отправлять данные аутентификации, что может привести к отказам при попытке клиентов подключиться. Эта директива особенно полезна, когда NGINX используется как reverse proxy перед почтовым сервером, позволяя ему выполнять SSL termination и другие функции, при этом обеспечивая передачу учётных данных для аутентификации пользователей. Если клиенты успешно аутентифицируются в NGINX, эти учётные данные будут перенаправлены на upstream SMTP server в соответствии с настройкой. Разрешённые контексты для этой директивы включают контекст `mail` и блоки `server`, что позволяет осуществлять тонкую настройку поведения аутентификации для каждой серверной конфигурации. Корректное использование этой директивы необходимо для приложений, которым требуется передача данных аутентификации через прокси для корректной работы.

Пример конфига

mail {
    server {
        listen 25;
        proxy_smtp_auth on;
        proxy_pass backend_smtp_server;
    }
}

Убедитесь, что upstream SMTP server поддерживает те же методы аутентификации, что и клиенты.

Установка этой директивы в значение 'off' может привести к сбоям в аутентификации пользователей в зависимости от конфигурации почтового сервера.

Будьте осторожны с конфигурациями SSL/TLS, чтобы не допустить утечки конфиденциальных учетных данных через небезопасные каналы.

proxy_protocol Директива proxy_protocol позволяет NGINX принимать соединения, использующие PROXY protocol, для почтовых серверов.
mailmail server
Синтаксисproxy_protocol on | off;
По умолчаниюoff
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива proxy_protocol, когда она включена в mail context, позволяет NGINX Mail Core обрабатывать соединения, использующие PROXY protocol — стандартный способ передачи информации о клиентском подключении прокси-серверам. Это особенно полезно, когда NGINX используется как reverse proxy, который завершает SSL, или когда он пересылает запросы на backend server, который ожидает получить исходный IP-адрес клиента. Когда эта директива установлена в 'on', SMTP, IMAP или POP3 серверы смогут читать заголовок PROXY protocol. Это позволяет им заносить в лог правильный IP-адрес клиента, вместо того чтобы видеть IP-адрес прокси. Это критично для сценариев с load balancers или reverse proxies, чтобы обеспечить сохранение корректной информации о клиенте на протяжении всего жизненного цикла запроса. Важно отметить, что директива принимает только флаговое значение (on или off), и неправильная конфигурация может привести к ошибкам соединения или к тому, что downstream services будут записывать некорректную информацию об IP-адресе клиента, особенно если backend не понимает PROXY protocol.

Пример конфига

mail {
    server {
        listen 25;
        proxy_protocol on;
        # Additional mail server settings
    }
}

Убедитесь, что сервер бэкенда поддерживает PROXY protocol; в противном случае он будет неправильно интерпретировать заголовки.

Если директива включена, почтовый сервер должен быть настроен на приём соединений только от доверенных прокси-серверов.

smtp_client_buffer Директива smtp_client_buffer задаёт размер буфера, используемого для коммуникации с SMTP-клиентом в Mail-модуле NGINX.
mailmail server
Синтаксисsmtp_client_buffer size;
По умолчанию1k;
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива smtp_client_buffer указывает размер буфера, который выделяется для чтения и обработки данных от подключённого SMTP-клиента. При работе с коммуникацией по протоколу SMTP поддержание подходящего размера буфера может быть критически важным для эффективной обработки запросов клиентов, особенно в сценариях с большими письмами или командами, которые могут превышать типичные размеры.\n\nКогда устанавливается соединение с SMTP-клиентом, NGINX будет использовать заданный размер буфера для чтения входящих данных. Эта директива принимает один аргумент, задающий этот размер, что позволяет администраторам масштабировать буфер в зависимости от ожидаемой нагрузки и характеристик SMTP-трафика. Если размер буфера слишком мал, это может привести к проблемам при чтении больших команд или писем за один раз, потенциально вызывая ошибки или снижение производительности. Поэтому рекомендуется тщательно настраивать это значение в соответствии с рабочей нагрузкой сервера и требованиями к производительности.\n\nКроме того, smtp_client_buffer можно установить глобально в блоке mail или конкретно в отдельных контекстах почтового сервера, что обеспечивает гибкость для разных сценариев применения, когда для оптимизации производительности и использования ресурсов могут потребоваться разные размеры буфера. Понимание баланса между объёмом используемой памяти и производительностью важно для оптимальной конфигурации.

Пример конфига

mail {
    smtp_client_buffer 2k;
    server {
        listen 25;
        protocol smtp;
    }
}

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

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

smtp_greeting_delay Директива smtp_greeting_delay устанавливает задержку перед отправкой SMTP-приветствия клиентам при подключении.
mailmail server
Синтаксисsmtp_greeting_delay time;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива smtp_greeting_delay используется в модуле Mail Core NGINX для управления временем отправки SMTP-приветствия. Эта директива задаёт задержку (в секундах), которую NGINX будет вводить перед отправкой приветствия SMTP-клиентам после их подключения к почтовому серверу. Эта задержка может помочь в смягчении определённых типов спама или потока попыток подключения, заставляя клиентов ждать перед получением ответа, что даёт преимущества при ограничении скорости и контроле злоупотреблений. Директива принимает один аргумент, который должен указывать длительность в секундах. Значение должно быть неотрицательным целым числом и фактически будет влиять на скорость начального взаимодействия между почтовым сервером и клиентами, пытающимися установить сеанс. Например, установка значения 5 означает, что клиент будет ждать 5 секунд после подключения, прежде чем получить SMTP-приветствие. При корректной настройке smtp_greeting_delay помогает оптимизировать ресурсы сервера и может служить тактической мерой против некоторых типов атак отказа в обслуживании (DoS), поскольку она может замедлять скорость обработки подключений сервером. Тем не менее рекомендуется подобрать оптимальную задержку, чтобы законные клиенты не испытывали ненужных задержек, что могло бы негативно сказаться на их пользовательском опыте.

Пример конфига

mail {
    smtp_on;
    smtp_greeting_delay 5;
}

Установка слишком большой задержки может раздражать законных пользователей и ухудшать их опыт использования.

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

smtp_capabilities Директива smtp_capabilities настраивает SMTP-возможности, объявляемые почтовым сервером NGINX.
mailmail server
Синтаксисsmtp_capabilities capability1 capability2 ...;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива smtp_capabilities используется в контексте почтового сервера NGINX, чтобы указать, какие возможности сервер будет объявлять клиентам во время SMTP-сессии. Эта директива принимает один или несколько аргументов, которые представляют поддерживаемые функции SMTP, такие как AUTH, EXPN и другие. По умолчанию NGINX не будет объявлять никаких возможностей, если эта директива явно не задана. При определении директивы smtp_capabilities необходимо тщательно продумать функции, которые вы хотите включить. Каждая указанная возможность будет включена в ответ EHLO во время SMTP-рукопожатия, информируя клиента о доступных ему функциях. Это может повысить совместимость с различными почтовыми клиентами, которые полагаются на конкретные функции SMTP. Чтобы клиенты могли эффективно использовать сервер, следует указать все необходимые возможности. Однако важно объявлять только те возможности, которые действительно поддерживаются конфигурацией сервера, поскольку иначе это может привести к путанице и ухудшению пользовательского опыта клиентов, пытающихся использовать неподдерживаемые функции. Параметры для директивы smtp_capabilities должны быть правильно отформатированы, и директива должна располагаться в соответствующем контексте почтового сервера, чтобы вступить в силу. Следует соблюдать правильный синтаксис, чтобы избежать неправильной конфигурации. Каждая возможность должна разделяться пробелами, и важно убедиться, что пробелы и доступные опции введены без непреднамеренных ошибок или упущений.

Пример конфига

mail {
    server {
        listen 25;
        smtp_capabilities AUTH LOGIN PLAIN; 
    }
}

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

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

smtp_auth Директива smtp_auth задаёт механизмы аутентификации, поддерживаемые SMTP-клиентами.
mailmail server
Синтаксисsmtp_auth method1 [method2 ...];
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива `smtp_auth` позволяет NGINX Mail Module определить, какие методы аутентификации включены для SMTP-подключений. Эта директива должна использоваться внутри контекста `mail` и позволяет серверу аутентифицировать почтовых клиентов с помощью указанных методов, таких как LOGIN, PLAIN, CRAM-MD5 и других. Перечисляя один или несколько механизмов аутентификации, директива сообщает NGINX, на какие методы он может опираться при проверке учётных данных SMTP-клиентов, пытающихся подключиться. Если указано несколько методов, они проверяются в указанном порядке до тех пор, пока один не сработает или не исчерпаются все варианты. На практике, когда клиент подключается к SMTP-серверу, он будет представлять свои учётные данные в соответствии с методами аутентификации, поддерживаемыми сервером. Сервер затем обрабатывает эти учётные данные в соответствии с механизмами, определёнными в директиве `smtp_auth`. Важно отметить, что использование небезопасных методов следует избегать, если они не комбинируются с защищённым транспортным протоколом, таким как TLS, для шифрования данных аутентификации при передаче.

Пример конфига

mail {
    smtp_auth LOGIN PLAIN;
    server {
        listen 25;
    }
}

Убедитесь, что указанные методы аутентификации поддерживаются и безопасны, особенно LOGIN и PLAIN — они должны использовать TLS для шифрования.

Несколько методов аутентификации следует перечислять в предпочтительном порядке; первый успешно сработавший метод будет использован для аутентификации клиента.

Изменения в конфигурации могут не вступить в силу до перезагрузки NGINX; обязательно протестируйте конфигурации перед развертыванием.

starttls Директива starttls включает команду STARTTLS для почтовых протоколов, позволяя инициировать защищённое соединение по TLS.
mailmail server
Синтаксисstarttls;
По умолчаниюnone
Контекстmail, mail server
МодульNGINX Mail Core

Описание

Директива 'starttls' является частью модуля NGINX Mail Core и используется для повышения безопасности почтовых соединений за счёт включения возможности команды STARTTLS. Когда эта директива задана внутри блока почтового сервера, она позволяет серверу перевести существующее небезопасное соединение в защищённое с помощью TLS. Это важно для защиты целостности данных и предотвращения прослушивания при передаче. Поведение директивы 'starttls' заключается в том, что она инструктирует сервер ожидать команды STARTTLS от клиентов, фактически сигнализируя о возможности переключения на защищённый канал. Для корректной работы эта директива должна сопровождаться соответствующими директивами конфигурации SSL, такими как 'ssl_certificate' и 'ssl_certificate_key', которые указывают SSL-сертификат и приватный ключ для установления зашифрованного соединения. Отсутствие этих настроек приведёт к ошибкам при попытке клиентов установить TLS-сессию. Типичное использование директивы 'starttls' происходит в контексте почтового сервера и предполагает, что конфигурация поддерживает защищённые соединения, инициируемые почтовыми клиентами. Эффективность этой директивы зависит от конфигурации поддержки TLS в NGINX, поскольку для её корректной работы требуется правильная настройка SSL.

Пример конфига

mail {
    server {
        listen 993;
        protocol imap;
        starttls; 
    }
}

Убедитесь, что SSL-сертификат и ключ правильно настроены, чтобы TLS работал.

Директива 'starttls' работает только тогда, когда клиенты поддерживают команду STARTTLS.

Избегайте использования 'starttls' вместе с другими конфликтующими директивами безопасности в одном и том же серверном блоке.

proxy_protocol_timeout Устанавливает таймаут для получения заголовка PROXY protocol в Stream-модуле NGINX.
streamstream server
Синтаксисproxy_protocol_timeout time;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

`proxy_protocol_timeout` директива задаёт максимальное время ожидания получения заголовка PROXY protocol от клиента в контексте stream-сервера. Эта директива особенно важна в сценариях, когда PROXY protocol используется для передачи сведений о подключении клиента от балансировщика нагрузки или обратного прокси к бэкенд-серверам. Если указанный таймаут истечёт до полного получения заголовка, соединение будет закрыто, что предотвращает бесконечное удержание ресурсов в ожидании неполных данных. Параметр этой директивы — значение времени, которое можно указать в секундах или в формате времени, таком как '1s', '10m', '1h' и т.д. Таймаут следует выбирать с учётом сетевой изменчивости и распределения ресурсов. Слишком короткий таймаут может привести к преждевременному закрытию соединений в средах со медленными клиентами или высокой задержкой, тогда как слишком длинный таймаут может необоснованно увеличить потребление ресурсов. Настроив `proxy_protocol_timeout`, администраторы серверов могут обеспечить более надёжную обработку установлений соединений с участием PROXY protocol, улучшая как производительность, так и опыт пользователей. Эта директива обычно используется вместе с другими конфигурациями, связанными с proxy protocol, для оптимизации поведения stream-сервера.

Пример конфига

stream {
    server {
        listen 1234;
        proxy_protocol_timeout 5s;
    }
}

Убедитесь, что указанное время ожидания учитывает условия вашей сети; слишком короткое значение может нарушить легитимные соединения.

Эта директива применяется только к серверам, использующим PROXY protocol; убедитесь, что она корректно размещена в таких server-блоках.

preread_buffer_size Задает размер буфера для чтения начальных данных в модулях stream.
streamstream server
Синтаксисpreread_buffer_size size;
По умолчанию16k
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива 'preread_buffer_size' в NGINX Stream Core определяет размер буфера, используемого для чтения начальных данных из сокета до передачи соединения на backend server. Этот размер буфера имеет решающее значение для протоколов, которым требуется прочитать определённый объём данных для корректной обработки запроса или для определения требуемого backend server на основе полученных начальных данных. По умолчанию размер буфера установлен в 16k, но его можно настроить в соответствии с конкретными потребностями приложения. Если буфер слишком мал, это может привести к усечённому чтению данных, что вызовет проблемы при обработке запросов или некорректную маршрутизацию на backend server. Увеличение размера буфера помогает учесть большие начальные пакеты без риска потери данных, в то же время слишком большое значение может привести к ненужному расходу памяти, особенно при обработке большого количества одновременно открытых соединений. Обычно директива объявляется в контекстах 'stream' или 'stream server', что позволяет задавать разные размеры для разных случаев в зависимости от архитектуры. При настройке этой директивы следует тщательно учитывать баланс между производительностью и использованием памяти.

Пример конфига

stream {
    server {
        listen 1234;
        preread_buffer_size 32k;
    }
}

Установка слишком малого размера буфера может привести к проблемам с крупными первоначальными запросами и потенциальным сбоям запросов.

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

preread_timeout Устанавливает таймаут для фазы prereading потокового соединения.
streamstream server
Синтаксисpreread_timeout time;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `preread_timeout` в модуле NGINX Stream Core задаёт предел времени, в течение которого сервер будет ждать в состоянии prereading, прежде чем закрыть неактивное соединение. В этом состоянии NGINX ожидает, что клиент отправит полный запрос, например пакеты данных при обработке TCP-потока. Если клиент не отправит данные в течение указанного периода таймаута, NGINX завершит соединение, чтобы сэкономить ресурсы и предотвратить возможные DoS-атаки. По сути, она определяет, как долго NGINX будет оставаться терпеливым в начальной фазе потоковой транзакции, прежде чем принять меры по закрытию соединения. Эта директива особенно полезна в средах, где длительные неактивные соединения могут привести к исчерпанию ресурсов, что может ухудшить общую производительность сервера. Параметр для этой директивы — значение времени, указываемое в секундах, минутах или часах, аналогично другим директивам таймаута в конфигурациях NGINX. Администраторам важно тщательно согласовать этот период таймаута с ожидаемым поведением клиентов в их сети, поскольку слишком короткое значение может непреднамеренно нарушить допустимые соединения, которые могут испытывать задержки при передаче данных.

Пример конфига

stream {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    }

    server {
        listen 12345;
        preread_timeout 30s;
        proxy_pass backend;
    }
}

Установка `preread_timeout` слишком малого значения может привести к разрыву действительных соединений из-за задержек в передаче данных.

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

pass Директива 'pass' определяет, куда направлять запросы клиентов в stream-модуле NGINX.
stream server
Синтаксисpass upstream_name;
По умолчаниюnone
Контекстstream server
МодульNGINX Stream Core

Описание

Директива 'pass' используется для переадресации запросов клиентов на указанный upstream server в контексте stream-модуля NGINX, который обычно применяется для TCP и UDP трафика. Директива указывает upstream server, который будет обрабатывать входящие соединения, обеспечивая возможности load balancing и failover. Директива может содержать опции, такие как указание server name или номера порта. Когда соединение соответствует критериям, определённым в stream-блоке, директива 'pass' инструктирует NGINX установить соединение с указанным upstream server и ретранслировать пакеты данных между клиентом и upstream server. Это фактически заставляет NGINX выступать в роли proxy для stream-трафика, предоставляя такие возможности, как SSL termination и поддержание connection pool. Администраторам важно убедиться, что конфигурация указанного upstream server корректна, чтобы избежать сбоев соединения. Директива может применяться в различных контекстах внутри 'stream' блока, но чаще всего определяется внутри 'server' блока, где указывается одна upstream destination. Такой модульный подход обеспечивает гибкость в маршрутизации и эффективном управлении соединениями.

Пример конфига

stream {
    upstream backend {
        server backend1.example.com:1234;
        server backend2.example.com:1234;
    }
    server {
        listen 1234;
        pass backend;
    }
}

Убедитесь, что upstream server доступен; в противном случае соединения не будут установлены.

Избегайте использования директивы 'pass' в HTTP контекстах; она специфична для stream контекстов.

Учитывайте особенности обработки соединений — NGINX держит соединения открытыми для эффективной передачи данных, что при ненадлежащем управлении может привести к проблемам с ресурсами.

proxy_downstream_buffer Директива proxy_downstream_buffer контролирует буферизацию данных, получаемых от upstream-серверов в модуле NGINX stream.
streamstream server
Синтаксисproxy_downstream_buffer size;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_downstream_buffer` настраивает поведение буферизации ответов, получаемых от upstream‑серверов в контексте TCP/UDP stream. Указывая размер в качестве аргумента, эта директива определяет, какое количество данных удерживается в памяти до отправки downstream клиенту. Если размер установлен слишком малым, клиенты могут испытывать прерывания при доставке данных, поскольку NGINX будет вынужден ждать поступления дополнительных данных от upstream, прежде чем отправить их. Напротив, слишком большой размер буфера может привести к чрезмерному потреблению памяти, повышенному использованию ресурсов и другим проблемам с производительностью. Эта директива особенно полезна в сценариях с высоким потоком данных или непредсказуемой частотой подключений, так как может помочь стабилизировать доставку клиентам при всплесках трафика. Поскольку `proxy_downstream_buffer` применяется в контексте `stream` и `stream server`, она позволяет тонко настраивать распределение ресурсов для каждого определённого stream. Эффективность директивы может зависеть от других настроек, связанных со скоростями передачи, таймаутами и ограничениями памяти, поэтому изменения следует вносить обдуманно, чтобы избежать нежелательных побочных эффектов в периоды пиковых нагрузок.

Пример конфига

stream {
    upstream my_upstream {
        server 192.168.1.1:1234;
    }
    server {
        listen 1234;
        proxy_pass my_upstream;
        proxy_downstream_buffer 64k;
    }
}

Установка слишком большого размера буфера может привести к увеличению потребления памяти.

Если размер буфера слишком мал, это может вызвать задержки или перебои при доставке клиенту.

Убедитесь, что директива используется в правильном контексте (stream или stream server).

proxy_upstream_buffer Устанавливает размер upstream-буфера для TCP и UDP соединений в модуле `stream` NGINX.
streamstream server
Синтаксисproxy_upstream_buffer size;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_upstream_buffer` используется в контекстах `stream` и `stream server` модуля Stream NGINX для задания размера буфера, в котором хранится данные, отправляемые upstream servers. Этот буфер позволяет накапливать данные перед их пересылкой на upstream, что может оптимизировать производительность за счёт уменьшения числа системных вызовов и повышения пропускной способности. Директива принимает один аргумент, указывающий размер буфера в байтах. На практике установка слишком малого значения `proxy_upstream_buffer` может привести к увеличению количества вызовов записи в upstream сервер, поскольку данные будут пересылаться сразу же после достижения малого предела буфера. И наоборот, чрезмерно большое значение может потреблять слишком много памяти, особенно при высокой нагрузке, когда одновременно активно множество соединений. Поэтому важно подобрать компромисс с учётом требований приложения и доступных системных ресурсов. Синтаксис для задания этой директивы выглядит следующим образом: `proxy_upstream_buffer size;`, где `size` — объём памяти, выделяемый для буферизации. Правильная настройка этой директивы помогает в оптимизации производительности TCP и UDP приложений, обслуживаемых NGINX, особенно в высокопроизводительных условиях или при работе с инкапсулированными протоколами.

Пример конфига

stream {
    server {
        listen 12345;
        proxy_pass backend;
        proxy_upstream_buffer 512k;
    }
    upstream backend {
        server backend1.example.com:1234;
        server backend2.example.com:1234;
    }
}

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

Выделение слишком большого размера буфера может привести к высокому использованию памяти в периоды пикового трафика и потенциально исчерпать системные ресурсы.

proxy_upload_rate Директива proxy_upload_rate контролирует максимальную скорость загрузки для проксированных подключений в NGINX Stream.
streamstream server
Синтаксисproxy_upload_rate rate;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_upload_rate` в модуле NGINX Stream задаёт максимальную скорость загрузки для проксируемых подключений. Эта директива позволяет управлять пропускной способностью, что полезно в ситуациях, когда нужно ограничить скорость загрузки, чтобы предотвратить потребление доступной полосы пропускания одним пользователем. Значение обычно задаётся в байтах в секунду, что напрямую влияет на общую производительность операций загрузки на сервере. При настройке, если подключение пытается отправлять данные быстрее, чем заданная скорость, NGINX приостановит передачу для соблюдения ограничения пропускной способности. Это помогает балансировать нагрузку между пользователями и поддерживать качество обслуживания для всех подключений. Директива может применяться в контексте `stream` или `stream server`, что обеспечивает гибкие конфигурации для различных экземпляров сервера. Важно учитывать, что указанная скорость загрузки должна быть реалистичной и соответствовать возможностям сервера и ожидаемым нагрузкам. Рекомендуется тщательно тестировать разные значения в тестовой среде перед вводом в эксплуатацию, чтобы найти оптимальный баланс конфигурации. Кроме того, установка очень высоких значений скорости загрузки может привести к проблемам с производительностью из-за высокой нагрузки на сетевой стек.

Пример конфига

stream {
    server {
        listen 12345;
        proxy_pass backend_server;
        proxy_upload_rate 1m; 
    }
}

Убедитесь, что rate value реалистично, чтобы избежать проблем с производительностью.

directive может не применяться как ожидается, если upstream servers не справляются с backpressure. Кроме того, использование этой directive без надлежащего tuning может привести к недоиспользованию bandwidth, поэтому необходимо тщательно продумать настройки.

proxy_download_rate Директива `proxy_download_rate` управляет скоростью передачи данных для проксируемых потоков.
streamstream server
Синтаксисproxy_download_rate rate;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_download_rate` используется в модуле NGINX Stream для ограничения скорости отправки данных клиентам по проксируемому потоковому соединению. Это особенно полезно в сценариях, когда необходимо контролировать использование пропускной способности или обеспечить справедливое распределение ресурсов между несколькими клиентами. Аргументом этой директивы является числовое значение, которое задаёт максимальную скорость передачи данных в байтах в секунду. При установке директивы NGINX применяет это ограничение к загрузкам, инициируемым прокси, что упрощает управление общей нагрузкой на сервер и оптимизацию производительности. Это достигается путём мониторинга передаваемых клиенту пакетов данных и регулировки потока, если скорость передачи превышает заданный предел. Это помогает предотвратить перегрузку сети и улучшить опыт пользователей за счёт более равномерного распределения пропускной способности, особенно в периоды пиковой нагрузки. Важно, что эту директиву можно задать глобально или настроить специально для отдельных `stream` серверов в зависимости от требований каждого сервиса. Чтобы применить `proxy_download_rate`, директиву необходимо разместить в контексте `stream` или внутри блока `stream server`. Также важно отметить, что эта директива применима только при работе в роли прокси для потоков, и её эффект может варьироваться в зависимости от других сетевых конфигураций.

Пример конфига

stream {
    server {
        listen 12345;
        proxy_pass backend_server;
        proxy_download_rate 1024;  # Limit download rate to 1KB/s
    }
}

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

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

proxy_requests Директива proxy_requests контролирует, может ли NGINX обрабатывать входящие прокси-запросы в модуле stream.
streamstream server
Синтаксисproxy_requests on | off;
По умолчаниюoff
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_requests` используется в модуле NGINX Stream для пересылки stream-подключений на upstream-серверы, позволяя NGINX выступать в роли обратного прокси для трафика TCP и UDP. Эта директива позволяет администраторам указать, следует ли принимать proxy-запросы для заданного блока сервера stream. Когда она включена, NGINX может управлять сессиями, поддерживая состояние соединений, и обеспечивает обмен данными между клиентом и upstream-сервером через настроенные параметры stream-прокси. Эта директива принимает один аргумент, который может быть задан как `off` или `on`. Установка в `on` позволяет NGINX обрабатывать входящие запросы как proxy-запросы, в то время как `off` отключает эту функцию, фактически прерывая любые входящие соединения без проксирования. Использование этой директивы требует учета поведения приложения, поскольку неправильное применение может привести к неожиданным разрывам соединений или недоступности сервиса, если попытка подключения происходит при отключенном проксировании. На практике применение `proxy_requests` должно тщательно согласовываться с другими директивами stream для обеспечения корректного потока и маршрутизации сетевых запросов. Например, в сочетании с директивами `proxy_pass` она может упростить сложные сетевые сценарии, в которых несколько upstream-серверов участвуют в поддержке пользовательских сессий или потоков данных.

Пример конфига

stream {
    server {
        listen 1234;
        proxy_requests on;
        proxy_pass backend_servers;
    }
}

Использование `proxy_requests off;` может непреднамеренно блокировать допустимые прокси-запросы, что приводит к завершению соединения.

Убедитесь, что эта директива установлена в правильном контексте (т.е. 'stream' или 'stream server'), поскольку использование её в других контекстах приведёт к ошибкам конфигурации.

proxy_responses Директива proxy_responses контролирует количество ответов, которые модуль NGINX Stream будет принимать от upstream servers перед закрытием соединения.
streamstream server
Синтаксисproxy_responses number;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_responses` используется в контексте `stream` в NGINX для указания, сколько ответов разрешено принимать от upstream server(s) до того, как NGINX закроет соединение. Эта директива особенно полезна при работе с TCP/UDP-трафиком, где поддержание надёжного канала связи с upstream сервером критично для производительности и надёжности. Если вы зададите конкретное целое число в качестве аргумента этой директивы, NGINX будет отслеживать количество полученных ответов и, как только будет достигнут указанный предел, автоматически закроет соединение. Это может помочь в сценариях, когда известно, что upstream servers предоставляют ограниченное число ответов, либо при реализации определённых режимов обработки ответов. При использовании `proxy_responses` поведение можно контролировать, просто выбрав число, соответствующее вашим требованиям. Например, если вы ожидаете большое количество ответов от серверов в периоды пиковых нагрузок, установка более высокого значения этой директивы может быть полезной. С другой стороны, меньшее значение позволит избежать длительного поддержания открытых соединений, минимизируя использование ресурсов. При настройке этой директивы важно учитывать характер протокола и шаблоны соединений с upstream service, поскольку преждевременное закрытие соединений может привести к избыточным повторным передачам или потере пакетов.

Пример конфига

stream {
    upstream my_upstream {
        server backend1.example.com:1234;
        server backend2.example.com:1234;
    }

    server {
        listen 1234;
        proxy_pass my_upstream;
        proxy_responses 5;
    }
}

Учтите, что установка слишком малого значения может привести к тому, что корректные ответы будут отброшены из-за преждевременного закрытия соединений.

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

proxy_half_close Директива `proxy_half_close` контролирует, закрывает ли NGINX upstream‑соединение после закрытия клиентского соединения в конфигурациях модуля `stream`.
streamstream server
Синтаксисproxy_half_close on | off;
По умолчаниюoff
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_half_close` используется в контексте модуля Stream NGINX, в частности в конфигурациях `stream` и `stream server`. Когда она включена (установлена в 'on'), сервер может закрыть upstream‑соединение после того, как клиент завершил отправку данных и закрыл своё соединение. Это особенно полезно для некоторых протоколов, когда upstream‑серверу требуется продолжить обработку данных после отключения клиента, что обеспечивает эффективность использования ресурсов и корректную обработку кратковременных соединений. В отсутствие этой директивы, по умолчанию (когда установлено 'off'), NGINX сохраняет upstream‑соединение даже после закрытия клиентом. Такое поведение может приводить к неоправданному расходу ресурсов, поскольку upstream‑сервер остаётся открытым дольше, чем необходимо. Директива `proxy_half_close` может быть особенно важна в сценариях, где downstream‑соединения частые и кратковременные, либо когда необходимо эффективно управлять состояниями сокетов для оптимизации производительности. Директива принимает единственный аргумент: `on` или `off`. Установка в 'on' включает поведение half‑close, тогда как 'off' (настройка по умолчанию) означает, что NGINX не будет немедленно закрывать upstream‑соединение после отключения на стороне клиента. Эта настройка даёт гибкость в управлении жизненным циклом соединений в зависимости от конкретных потребностей вашего приложения и используемых протоколов.

Пример конфига

stream {
    server {
        listen 12345;
        proxy_pass backend_servers;
        proxy_half_close on;
    }
}

Обязательно тщательно протестируйте поведение соединения; включение этой функции может привести к изменениям в том, как данные передаются между клиентом и бэкенд‑серверами.

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

proxy_ssl Директива proxy_ssl в NGINX Stream Core включает SSL-проксирование для upstream-соединений.
streamstream server
Синтаксисproxy_ssl on | off;
По умолчаниюoff
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `proxy_ssl` используется в контексте stream в NGINX для включения SSL для соединений с upstream-серверами. Установив эту директиву в 'on', NGINX будет устанавливать SSL‑соединения при проксировании трафика TCP или UDP, обеспечивая зашифрованный канал между сервером NGINX и upstream‑сервером. Это особенно полезно для защиты коммуникаций, например при взаимодействии с защищёнными бэкенд‑сервисами. Эту директиву можно объявить внутри блока stream server, и её значение может быть либо 'on', либо 'off'. При значении 'on' NGINX ожидает, что upstream‑сервер представит SSL‑сертификат, соответствующий его hostname, и выполнит необходимые рукопожатия для установления защищённого соединения. Могут потребоваться дополнительные параметры, связанные с конфигурацией SSL, такие как `proxy_ssl_certificate` и `proxy_ssl_password_file`, чтобы успешно проверить и управлять SSL‑сертификатами, используемыми в процессе обмена.

Пример конфига

stream {
    server {
        listen 443;
        proxy_pass backend_server;
        proxy_ssl on;
    }
}

Убедитесь, что ваш сервер upstream настроен с действительным SSL-сертификатом; в противном случае NGINX не сможет установить соединение.

Установка `proxy_ssl on;` без корректных SSL-настроек (например, `proxy_ssl_certificate`) может привести к ошибкам во время выполнения.

Помните, что включение SSL увеличивает нагрузку; убедитесь, что ваш сервер NGINX имеет достаточные ресурсы, чтобы справиться с этим.

ssl_handshake_timeout Директива ssl_handshake_timeout задаёт максимальное время, отведённое на завершение SSL‑рукопожатия.
streamstream server
Синтаксисssl_handshake_timeout time;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `ssl_handshake_timeout` используется в NGINX Stream Core module для указания максимальной продолжительности (в секундах), в течение которой сервер будет ждать завершения SSL‑рукопожатия при установлении защищённых соединений. Правильная настройка этого таймаута критически важна, чтобы клиенты не зависали бесконечно при попытке установить защищённое соединение. Если указанный предел времени превышен, соединение будет прервано, а сервер зафиксирует ошибку в журнале. Аргумент этой директивы — значение времени в секундах. Если рукопожатие не завершится до истечения установленного таймаута, сервер разорвёт соединение. Эта директива особенно важна для приложений с высокой нагрузкой, которым требуются защищённые соединения, поскольку поддержание низкой задержки в процессе рукопожатия критично для производительности и удобства пользователей. Устанавливая значение таймаута с учётом ожидаемых сетевых условий и поведения клиентов, администраторы серверов могут эффективно оптимизировать обработку SSL‑соединений. Эту директиву можно объявлять как в контекстах `stream`, так и в `stream server`, что даёт гибкость при настройке поведения таймаутов SSL на уровне отдельного сервера. Важно отметить, что директива применима только когда SSL включён в stream module, и необходимо провести тщательное тестирование для подбора оптимального значения таймаута для конкретных сценариев использования.

Пример конфига

stream {
    server {
        listen 443;
        ssl_handshake_timeout 10s;
        ssl_preread on;
    }
}

Убедитесь, что SSL включён в конфигурации NGINX stream перед использованием этой директивы, так как она применима только в этом контексте.

Установка слишком малого timeout может привести к тому, что реальные клиенты будут отключены во время медленных handshakes, особенно в high-latency networks.

ssl_alpn Директива `ssl_alpn` задаёт протоколы Application-Layer Protocol Negotiation (ALPN) для Stream-соединений в NGINX.
streamstream server
Синтаксисssl_alpn protocol1 protocol2 ...;
По умолчаниюnone
Контекстstream, stream server
МодульNGINX Stream Core

Описание

Директива `ssl_alpn` имеет решающее значение для определения ALPN-протоколов, используемых модулем Stream в NGINX. Позволяя клиентам согласовывать, какой прикладной протокол использовать во время SSL/TLS рукопожатия, `ssl_alpn` обеспечивает оптимальную производительность и совместимость для различных протоколов, таких как HTTP/2 и HTTP/1.1. При задании директива принимает одно или несколько имён протоколов в качестве аргументов, которые используются в процессе согласования ALPN. Эта директива должна находиться в допустимых контекстах stream или stream server, что означает, что она используется специально для соединений TCP или UDP, а не для HTTP. Если указано несколько протоколов, они должны перечисляться в порядке предпочтения, поскольку сервер будет представлять их клиенту в той последовательности. Кроме того, важно отметить, что если клиент не поддерживает ни один из предложенных протоколов, соединение может завершиться неудачей, поэтому необходима правильная настройка и проверка поддержки, чтобы обеспечить успешное согласование протокола клиентом. Также убедитесь, что версия OpenSSL совместима с ALPN, чтобы эта директива работала корректно.

Пример конфига

stream {
    server {
        listen 443 ssl;
        ssl_certificate /path/to/cert.pem;
        ssl_certificate_key /path/to/key.pem;
        ssl_alpn h2 http/1.1;
    }
}

Убедитесь, что указанные протоколы поддерживаются клиентом, чтобы избежать сбоев соединения.

Всегда проверяйте конфигурации после изменения настроек ALPN на предмет проблем совместимости или ответов сервера.

Убедитесь, что ваша версия OpenSSL скомпилирована с поддержкой ALPN.

ssl_preread Enables SSL/TLS handshake parsing for TCP streams in NGINX.
streamstream server
Синтаксисssl_preread on | off;
По умолчаниюoff
Контекстstream, stream server
МодульNGINX Stream Core

Описание

The `ssl_preread` directive is used in the NGINX Stream module to handle TCP streams that are secured with SSL/TLS. This directive allows NGINX to perform initial SSL handshake processing, which enables it to determine the target backend server based on the Server Name Indication (SNI) extension sent by the client during the handshake. When `ssl_preread` is enabled, NGINX can inspect the incoming SSL handshake to extract SNI information, which can be particularly useful when routing traffic to multiple backends based on the hostname specified by the client. If the `ssl_preread` directive is set to `on`, then the SSL handshake will be parsed, and the SNI will be available for further use in the configuration, such as in `proxy_pass` directives or to influence load balancing. This is crucial for applications that host multiple SSL-enabled domains on the same IP address. It is important to note that the `ssl_preread` directive does not handle SSL termination by itself; it only enables NGINX to parse the SNI from the SSL handshake. Users typically use this directive in conjunction with other directives or backend configurations to effectively manage SSL traffic.

Пример конфига

stream {
    server {
        listen 443;
        proxy_pass backend;
        ssl_preread on;
    }
    upstream backend {
        server backend1.example.com:443;
        server backend2.example.com:443;
    }
}

Ensure SSL/TLS support is compiled into your NGINX build as `ssl_preread` relies on it.

Do not use `ssl_preread` with non-SSL streams or the behavior will be undefined.

Routing based on SNI may not function as expected if SNI is not sent by the client.

set_from_accept_language
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX Accept-Language module
ajp_pass
locationif in location
Контекстlocation, if in location
Аргументы1-2
МодульSupport AJP protocol proxy with NGINX
ajp_secret
locationif in location
Контекстlocation, if in location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_header_packet_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_max_data_packet_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_store
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_store_access
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульSupport AJP protocol proxy with NGINX
ajp_ignore_client_abort
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_connect_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_send_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_send_lowat
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_pass_request_headers
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_pass_request_body
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_intercept_errors
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_read_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_buffers
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульSupport AJP protocol proxy with NGINX
ajp_busy_buffers_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_cache
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_cache_key
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_cache_path
http
Контекстhttp
Аргументы2+
МодульSupport AJP protocol proxy with NGINX
ajp_cache_valid
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSupport AJP protocol proxy with NGINX
ajp_cache_min_uses
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_script_url
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_cache_use_stale
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSupport AJP protocol proxy with NGINX
ajp_cache_methods
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSupport AJP protocol proxy with NGINX
ajp_cache_lock
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_cache_lock_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_temp_path
httpserverlocation
Контекстhttp, server, location
Аргументы1-4
МодульSupport AJP protocol proxy with NGINX
ajp_max_temp_file_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_temp_file_write_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_next_upstream
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSupport AJP protocol proxy with NGINX
ajp_upstream_max_fails
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_upstream_fail_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSupport AJP protocol proxy with NGINX
ajp_pass_header
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_hide_header
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_param
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
ajp_ignore_headers
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSupport AJP protocol proxy with NGINX
ajp_keep_conn
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSupport AJP protocol proxy with NGINX
array_join
httpserverlocationif in serverif in location
Контекстhttp, server, location, if in server, if in location
Аргументы2-3
МодульArray-typed variables for NGINX
ldap_server
http
Контекстhttp
Аргументыblock (1)
МодульLDAP Authentication module for NGINX
auth_ldap_cache_enabled
http
Контекстhttp
Аргументы1
МодульLDAP Authentication module for NGINX
auth_ldap_cache_expiration_time
http
Контекстhttp
Аргументы1
МодульLDAP Authentication module for NGINX
auth_ldap_cache_size
http
Контекстhttp
Аргументы1
МодульLDAP Authentication module for NGINX
auth_ldap_servers_size
http
Контекстhttp
Аргументы1
МодульLDAP Authentication module for NGINX
auth_ldap
httpserverlocationlimit_except
Контекстhttp, server, location, limit_except
Аргументы1
МодульLDAP Authentication module for NGINX
auth_ldap_servers
httpserverlocationlimit_except
Контекстhttp, server, location, limit_except
Аргументыany
МодульLDAP Authentication module for NGINX
concat
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульHTTP Concatenation module for NGINX
concat_max_files
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульHTTP Concatenation module for NGINX
concat_unique
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульHTTP Concatenation module for NGINX
concat_types
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульHTTP Concatenation module for NGINX
concat_delimiter
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульHTTP Concatenation module for NGINX
concat_ignore_file_error
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульHTTP Concatenation module for NGINX
set_cookie_flag
serverlocation
Контекстserver, location
Аргументы1+
МодульNGINX cookie flag module
cookie_limit_req_zone
http
Контекстhttp
Аргументы6
МодульNGINX module to limit the number of malicious ip forged cookies
cookie_limit_req
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1-3
МодульNGINX module to limit the number of malicious ip forged cookies
cookie_limit_req_log_level
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module to limit the number of malicious ip forged cookies
cookie_limit_req_status
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX module to limit the number of malicious ip forged cookies
override_method
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX CoolKit Module
doh
location
Контекстlocation
Аргументыnone
МодульNGINX module for serving DNS-over-HTTPS (DOH) requests
doh_address
location
Контекстlocation
Аргументы1
МодульNGINX module for serving DNS-over-HTTPS (DOH) requests
doh_port
location
Контекстlocation
Аргументы1
МодульNGINX module for serving DNS-over-HTTPS (DOH) requests
doh_timeout
location
Контекстlocation
Аргументы1
МодульNGINX module for serving DNS-over-HTTPS (DOH) requests
dynamic_etag
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module for adding ETag to dynamic content
dynamic_etag_types
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX module for adding ETag to dynamic content
play
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
play_temp_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
play_local_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
allow
Контекст
Аргументы1-2
МодульMedia streaming server based on nginx-module-rtmp
deny
Контекст
Аргументы1-2
МодульMedia streaming server based on nginx-module-rtmp
rtmp_auto_push
main
Контекстmain
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
rtmp_auto_push_reconnect
main
Контекстmain
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
rtmp_socket_dir
main
Контекстmain
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
meta
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
live
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
stream_buckets
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
buffer
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
sync
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
interleave
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
wait_key
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
wait_video
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
publish_notify
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
play_restart
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
idle_streams
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
drop_idle_publisher
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
exec_block
Контекст
Аргументыnone
МодульMedia streaming server based on nginx-module-rtmp
exec
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_push
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_pull
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_publish
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_publish_done
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_play
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_play_done
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_record_done
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
exec_static
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
respawn
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
respawn_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
exec_kill_signal
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
exec_options
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
record_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_suffix
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_unique
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_append
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_lock
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_max_size
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_max_frames
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_interval
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
record_notify
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
recorder
Контекст
Аргументыblock (1)
МодульMedia streaming server based on nginx-module-rtmp
rtmp_control
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
server
Контекст
Аргументыnone
МодульMedia streaming server based on nginx-module-rtmp
listen
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
server_name
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
application
Контекст
Аргументыblock (1)
МодульMedia streaming server based on nginx-module-rtmp
so_keepalive
Контекст
Аргументыflag
МодульMedia streaming server based on nginx-module-rtmp
timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
ping
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
ping_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
max_streams
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
ack_window
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
chunk_size
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
max_message
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
out_queue
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
out_cork
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
busy
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
play_time_fix
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
publish_time_fix
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
buflen
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
send_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
send_lowat
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
resolver
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
resolver_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
connection_pool_size
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
merge_slashes
Контекст
Аргументыflag
МодульMedia streaming server based on nginx-module-rtmp
flv_live
location
Контекстlocation
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
push
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
pull
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
relay_buffer
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
push_reconnect
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
pull_reconnect
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
session_relay
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
access_log
Контекст
Аргументы1-2
МодульMedia streaming server based on nginx-module-rtmp
log_format
Контекст
Аргументы2+
МодульMedia streaming server based on nginx-module-rtmp
log_interval
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
log_size
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
max_connections
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
netcall_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
netcall_buffer
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
rtmp_stat
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
rtmp_stat_stylesheet
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
rtmp_stat_format
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_connect
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_disconnect
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_publish
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_play
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_publish_done
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_play_done
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_done
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_record_done
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
on_update
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
notify_method
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
notify_update_timeout
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
notify_update_strict
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
notify_relay_redirect
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
notify_no_resolve
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
gop_cache
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
gop_max_frame_count
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
gop_max_video_count
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
gop_max_audio_count
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
rtmp
main
Контекстmain
Аргументыnone
МодульMedia streaming server based on nginx-module-rtmp
hls
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_fragment
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_max_fragment
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_playlist_length
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_muxdelay
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_sync
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_continuous
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_nested
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_fragment_naming
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_fragment_slicing
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_type
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_max_audio_delay
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_audio_buffer_size
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_cleanup
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_variant
Контекст
Аргументы1+
МодульMedia streaming server based on nginx-module-rtmp
hls_base_url
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_fragment_naming_granularity
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_keys
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_key_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_key_url
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
hls_fragments_per_key
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash_fragment
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash_path
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash_playlist_length
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash_cleanup
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
dash_nested
Контекст
Аргументы1
МодульMedia streaming server based on nginx-module-rtmp
set_form_input
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNGINX form input module
set_form_input_multi
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNGINX form input module
geoip2
http
Контекстhttp
Аргументыblock (1)
МодульNGINX GeoIP2 module
geoip2_proxy
http
Контекстhttp
Аргументы1
МодульNGINX GeoIP2 module
geoip2_proxy_recursive
http
Контекстhttp
Аргументыflag
МодульNGINX GeoIP2 module
google
location
Контекстlocation
Аргументы1
МодульNGINX Module for Google Mirror creation
google_scholar
location
Контекстlocation
Аргументы1
МодульNGINX Module for Google Mirror creation
google_language
location
Контекстlocation
Аргументы1
МодульNGINX Module for Google Mirror creation
google_ssl_off
location
Контекстlocation
Аргументы1+
МодульNGINX Module for Google Mirror creation
google_robots_allow
location
Контекстlocation
Аргументы1
МодульNGINX Module for Google Mirror creation
graphite_config
http
Контекстhttp
Аргументыany
МодульAn NGINX module for collecting stats into Graphite
graphite_param
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы4
МодульAn NGINX module for collecting stats into Graphite
graphite_default_data
httpserver
Контекстhttp, server
Аргументы1-2
МодульAn NGINX module for collecting stats into Graphite
graphite_data
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1-3
МодульAn NGINX module for collecting stats into Graphite
immutable
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX module for setting immutable caching on static assets
immutable_types
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX module for setting immutable caching on static assets
ipscrub_period_seconds
http
Контекстhttp
Аргументы1
МодульIP address anonymizer module for NGINX
jpeg_filter
location
Контекстlocation
Аргументыflag
МодульNGINX JPEG filter module
jpeg_filter_max_pixel
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX JPEG filter module
jpeg_filter_optimize
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX JPEG filter module
jpeg_filter_progressive
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX JPEG filter module
jpeg_filter_arithmetric
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX JPEG filter module
jpeg_filter_graceful
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX JPEG filter module
jpeg_filter_buffer
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX JPEG filter module
jpeg_filter_effect
location
Контекстlocation
Аргументы1-2
МодульNGINX JPEG filter module
jpeg_filter_dropon_align
location
Контекстlocation
Аргументы2
МодульNGINX JPEG filter module
jpeg_filter_dropon_offset
location
Контекстlocation
Аргументы2
МодульNGINX JPEG filter module
jpeg_filter_dropon_file
location
Контекстlocation
Аргументы1-2
МодульNGINX JPEG filter module
jpeg_filter_dropon_memory
location
Контекстlocation
Аргументы1-2
МодульNGINX JPEG filter module
js_challenge
serverlocationif in serverif in location
Контекстserver, location, if in server, if in location
Аргументыflag
МодульNGINX Javascript challenge module
js_challenge_bucket_duration
serverlocation
Контекстserver, location
Аргументы1
МодульNGINX Javascript challenge module
js_challenge_secret
serverlocation
Контекстserver, location
Аргументы1
МодульNGINX Javascript challenge module
js_challenge_html
serverlocation
Контекстserver, location
Аргументы1
МодульNGINX Javascript challenge module
js_challenge_title
serverlocation
Контекстserver, location
Аргументы1
МодульNGINX Javascript challenge module
json_var
http
Контекстhttp
Аргументыblock (1)
МодульNGINX JSON variables module
auth_jwt_key
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNGINX JWT Module
auth_jwt
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX JWT Module
auth_jwt_alg
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX JWT Module
auth_jwt_require
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX JWT Module
limit_traffic_rate_zone
http
Контекстhttp
Аргументы3
МодульNGINX Limiting rate by given variables
limit_traffic_rate
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульNGINX Limiting rate by given variables
ts
location
Контекстlocation
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
ts_stream_id
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_mem_limit
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_dump_folder
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_out_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
ts_kmp
stream server
Контекстstream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_connect_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_publish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_unpublish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_republish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_add_header
streamstream server
Контекстstream, stream server
Аргументы2
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_retries
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_ctrl_retry_interval
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_timescale
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_max_free_buffers
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_buffer_bin_count
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_mem_high_watermark
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_mem_low_watermark
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_video_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_video_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_audio_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_audio_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_flush_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_log_frames
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_republish_interval
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_max_republishes
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ts_kmp_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp
stream server
Контекстstream server
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_send_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_dump_folder
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_log_frames
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_buffer_bin_count
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_in_max_free_buffers
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_notif_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_notif_add_header
streamstream server
Контекстstream, stream server
Аргументы2
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_notif_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_notif_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_notif_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_max_free_buffers
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_flush_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_flash_ver
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_chunk_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_write_meta_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_min_process_delay
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_max_process_delay
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_onfi_period
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_dump_folder
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_rtmp_out_buffer_bin_count
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
rtmp_kmp_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
kmp_idle_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_connect_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_publish_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_unpublish_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_republish_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_add_header
Контекст
Аргументы2
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_read_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_buffer_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_retries
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_ctrl_retry_interval
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_timescale
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_max_free_buffers
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_buffer_bin_count
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_mem_high_watermark
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_mem_low_watermark
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_video_buffer_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_video_mem_limit
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_audio_buffer_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_audio_mem_limit
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_audio_sync_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_flush_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_log_frames
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_republish_interval
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_max_republishes
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
allow
Контекст
Аргументы1-2
МодульKaltura Media Framework Common NGINX Module
deny
Контекст
Аргументы1-2
МодульKaltura Media Framework Common NGINX Module
meta
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
sandbox
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
stream_buckets
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
buffer
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
sync
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
interleave
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
wait_key
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
wait_video
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
publish_notify
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
play_restart
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
idle_streams
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
drop_idle_publisher
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
server
Контекст
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
listen
Контекст
Аргументы1-2
МодульKaltura Media Framework Common NGINX Module
application
Контекст
Аргументыblock (1)
МодульKaltura Media Framework Common NGINX Module
timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ping
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ping_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
max_streams
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ack_window
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
chunk_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
max_message
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
out_queue
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
out_cork
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
busy
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
play_time_fix
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
type3_ext_ts
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
buflen
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dump_folder
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
access_log
Контекст
Аргументы1-2
МодульKaltura Media Framework Common NGINX Module
log_format
Контекст
Аргументы2+
МодульKaltura Media Framework Common NGINX Module
rtmp
main
Контекстmain
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
play
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
play_temp_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
play_local_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
rtmp_auto_push
main
Контекстmain
Аргументы1
МодульKaltura Media Framework Common NGINX Module
rtmp_auto_push_reconnect
main
Контекстmain
Аргументы1
МодульKaltura Media Framework Common NGINX Module
rtmp_socket_dir
main
Контекстmain
Аргументы1
МодульKaltura Media Framework Common NGINX Module
exec_block
Контекст
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
exec
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_push
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_pull
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_publish
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_publish_done
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_play
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_play_done
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_record_done
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
exec_static
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
respawn
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
respawn_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
exec_kill_signal
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
exec_options
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
record_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_suffix
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_unique
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_append
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_lock
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_max_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_max_frames
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_interval
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
record_notify
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
recorder
Контекст
Аргументыblock (1)
МодульKaltura Media Framework Common NGINX Module
rtmp_control
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
push
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
pull
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
relay_buffer
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
push_reconnect
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pull_reconnect
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
session_relay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
max_connections
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
netcall_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
netcall_buffer
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
rtmp_stat
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
rtmp_stat_stylesheet
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_connect
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_disconnect
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_publish
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_play
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_publish_done
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_play_done
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_done
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_record_done
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
on_update
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
notify_method
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
notify_update_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
notify_update_strict
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
notify_relay_redirect
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_fragment
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_max_fragment
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_playlist_length
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_muxdelay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_sync
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_continuous
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_nested
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_fragment_naming
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_fragment_slicing
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_type
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_max_audio_delay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_audio_buffer_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_cleanup
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_variant
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
hls_base_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_fragment_naming_granularity
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_keys
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_key_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_key_url
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
hls_fragments_per_key
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash_fragment
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash_playlist_length
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash_cleanup
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dash_nested
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_low_latency
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_container
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_subtitle_format
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_mux_segments
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_parts
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_rendition_reports
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_program_date_time
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_ctl_block_reload
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_ctl_part_hold_back_percent
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_ctl_skip_boundary_percent
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_enc_output_iv
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_enc_key_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_enc_key_format
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_m3u8_enc_key_format_versions
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_capture
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_capture_redirect
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_capture_granularity
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_captions_json
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_session_data_json
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_scheme
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_scope
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_key_seed
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_iv_seed
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_serve_key
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_enc_json
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg
location
Контекстlocation
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
pckg_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_format
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_channel_id
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_timeline_id
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_max_segment_index
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_ksmp_max_uncomp_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_expires_static
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_expires_index
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_expires_index_gone
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_expires_index_blocking
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_expires_master
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_last_modified_static
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_pass_codes
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
pckg_active_policy
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_media_type_selector
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_back_fill
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_media_timestamps
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_empty_segments
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_output_buffer_pool
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульKaltura Media Framework Common NGINX Module
pckg_segment_metadata
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_mpegts_interleave_frames
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_mpegts_align_frames
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_mpd_profiles
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_mpd_subtitle_format
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
pckg_mpd_pres_delay_segments
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc
stream server
Контекстstream server
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
kmp_cc_dump_folder
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_max_pending_packets
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_send_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_dump_folder
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_log_frames
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_buffer_bin_count
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_in_max_free_buffers
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_publish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_unpublish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_republish_url
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_add_header
streamstream server
Контекстstream, stream server
Аргументы2
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_retries
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_ctrl_retry_interval
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_timescale
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_max_free_buffers
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_buffer_bin_count
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_mem_high_watermark
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_mem_low_watermark
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_video_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_video_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_subtitle_buffer_size
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_subtitle_mem_limit
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_flush_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_keepalive_interval
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_log_frames
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_republish_interval
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_out_max_republishes
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
kmp_cc_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
segment_info_gaps
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segment_info_bitrate
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segment_info_bitrate_lower_bound
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segment_info_bitrate_upper_bound
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
map
Контекст
Аргументыblock (2)
МодульKaltura Media Framework Common NGINX Module
map_hash_max_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
map_hash_bucket_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_inter_jump_log_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_inter_jump_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_jump_sync_frames
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_max_backward_drift
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_max_forward_drift
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
syncer_correction_reuse_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
input_bufs_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
input_bufs_bin_count
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
input_bufs_max_free
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
persist_filler_path
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
force_memory_segments
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_min_duration
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_forward_skip_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_forward_jump_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_backward_jump_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_inactive_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_start_truncate_limit
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_track_add_snap_range
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_track_remove_snap_range
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_split_snap_range
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_candidate_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_keyframe_alignment_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_max_span_average
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_ready_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_initial_ready_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segmenter_max_skip_frames
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter
Контекст
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_max_pending_segments
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_min_part_duration
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_inactive_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_forward_jump_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_backward_jump_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_dispose_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_start_period_threshold
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_frame_process_delay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_audio_process_delay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_wait_video_timeout
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_close_segment_delay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_segment_start_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_video_end_segment_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_video_duration_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
ll_segmenter_max_skip_frames
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
dynamic_var_max_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
variables_hash_max_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
variables_hash_bucket_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
preset_names_hash_max_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
preset_names_hash_bucket_size
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
preset
Контекст
Аргументыblock (1)
МодульKaltura Media Framework Common NGINX Module
mem_limit
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
mem_high_watermark
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
mem_low_watermark
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
mem_block_sizes
Контекст
Аргументы1+
МодульKaltura Media Framework Common NGINX Module
timescale
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
segment_duration
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
part_duration
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
input_delay
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
input_delay_margin
Контекст
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_kmp
stream server
Контекстstream server
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
live_kmp_read_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_kmp_send_timeout
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_kmp_dump_folder
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_kmp_log_frames
streamstream server
Контекстstream, stream server
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_ksmp
location
Контекстlocation
Аргументыnone
МодульKaltura Media Framework Common NGINX Module
live_ksmp_comp_level
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульKaltura Media Framework Common NGINX Module
live_api
location
Контекстlocation
Аргументыany
МодульKaltura Media Framework Common NGINX Module
log_zmq_server
http
Контекстhttp
Аргументы5
МодульZeroMQ logger module for NGINX
log_zmq_format
http
Контекстhttp
Аргументы2+
МодульZeroMQ logger module for NGINX
log_zmq_endpoint
http
Контекстhttp
Аргументы2
МодульZeroMQ logger module for NGINX
log_zmq_off
location
Контекстlocation
Аргументы1
МодульZeroMQ logger module for NGINX
ntlm
upstream
Контекстupstream
Аргументыnone
МодульNTLM NGINX Module
ntlm_timeout
upstream
Контекстupstream
Аргументы1
МодульNTLM NGINX Module
push_stream_channels_statistics
location
Контекстlocation
Аргументыnone
МодульNGINX push stream module
push_stream_publisher
location
Контекстlocation
Аргументыnone
МодульNGINX push stream module
push_stream_subscriber
location
Контекстlocation
Аргументыnone
МодульNGINX push stream module
push_stream_shared_memory_size
http
Контекстhttp
Аргументы1-2
МодульNGINX push stream module
push_stream_channel_deleted_message_text
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_channel_inactivity_time
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_ping_message_text
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_timeout_with_body
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_message_ttl
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_max_subscribers_per_channel
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_max_messages_stored_per_channel
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_max_channel_id_length
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_max_number_of_channels
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_max_number_of_wildcard_channels
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_wildcard_channel_prefix
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_events_channel_id
http
Контекстhttp
Аргументы1
МодульNGINX push stream module
push_stream_channels_path
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
push_stream_store_messages
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
push_stream_channel_info_on_publish
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_authorized_channels_only
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_header_template_file
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_header_template
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_message_template
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_footer_template
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_wildcard_channel_max_qtd
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_ping_message_interval
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_subscriber_connection_ttl
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_longpolling_connection_ttl
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_websocket_allow_publish
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_last_received_message_time
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
push_stream_last_received_message_tag
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
push_stream_last_event_id
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
push_stream_user_agent
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_padding_by_user_agent
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_allowed_origins
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX push stream module
push_stream_allow_connections_to_events_channel
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX push stream module
redis2_query
locationif in location
Контекстlocation, if in location
Аргументы1+
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_raw_query
locationif in location
Контекстlocation, if in location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_raw_queries
locationif in location
Контекстlocation, if in location
Аргументы2
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_literal_raw_query
locationif in location
Контекстlocation, if in location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_pass
locationif in location
Контекстlocation, if in location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_bind
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_connect_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_send_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_read_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX upstream module for the Redis 2.0 protocol
redis2_next_upstream
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX upstream module for the Redis 2.0 protocol
secure_token
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_avoid_cookies
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSecure token module for NGINX
secure_token_tokenize_segments
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSecure token module for NGINX
secure_token_types
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульSecure token module for NGINX
secure_token_uri_filename_prefix
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_expires_time
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_cookie_token_expires_time
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_query_token_expires_time
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_cache_scope
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_token_cache_scope
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_last_modified
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_token_last_modified
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_content_type_m3u8
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_content_type_mpd
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_content_type_f4m
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_encrypt_uri
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульSecure token module for NGINX
secure_token_encrypt_uri_key
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_encrypt_uri_iv
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_encrypt_uri_part
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
secure_token_encrypt_uri_hash_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульSecure token module for NGINX
acl
Контекст
Аргументы1
МодульSecure token module for NGINX
key
Контекст
Аргументы1
МодульSecure token module for NGINX
md5_param_name
Контекст
Аргументы1
МодульSecure token module for NGINX
exp_param_name
Контекст
Аргументы1
МодульSecure token module for NGINX
ip_address
Контекст
Аргументы1
МодульSecure token module for NGINX
end
Контекст
Аргументы1
МодульSecure token module for NGINX
param_name
Контекст
Аргументы1
МодульSecure token module for NGINX
start
Контекст
Аргументы1
МодульSecure token module for NGINX
session_start
Контекст
Аргументы1
МодульSecure token module for NGINX
session_end
Контекст
Аргументы1
МодульSecure token module for NGINX
additional_querylist
Контекст
Аргументы1
МодульSecure token module for NGINX
key_id
Контекст
Аргументы1
МодульSecure token module for NGINX
algorithm
Контекст
Аргументы1
МодульSecure token module for NGINX
iv
Контекст
Аргументы1
МодульSecure token module for NGINX
shib_request
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульShibboleth Auth Request module for NGINX
shib_request_set
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульShibboleth Auth Request module for NGINX
shib_request_use_headers
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульShibboleth Auth Request module for NGINX
auth_gss
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_zone_name
http
Контекстhttp
Аргументы1
МодульNginx module for HTTP SPNEGO auth
auth_gss_realm
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_keytab
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_service_ccache
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_service_name
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_format_full
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_force_realm
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_allow_basic_fallback
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_authorized_principal
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_authorized_principal_regex
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_map_to_local
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_delegate_credentials
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
auth_gss_constrained_delegation
Контекст
Аргументыflag
МодульNginx module for HTTP SPNEGO auth
statsd_server
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module for sending stats to statsd
statsd_sample_rate
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module for sending stats to statsd
statsd_count
serverlocationif in serverif in location
Контекстserver, location, if in server, if in location
Аргументы2-3
МодульNGINX module for sending stats to statsd
statsd_timing
serverlocationif in serverif in location
Контекстserver, location, if in server, if in location
Аргументы2-3
МодульNGINX module for sending stats to statsd
sticky
upstream
Контекстupstream
Аргументыany
МодульNGINX sticky cookie module
sticky_no_fallback
serverlocation
Контекстserver, location
Аргументыnone
МодульNGINX sticky cookie module
sticky_hide_cookie
serverlocation
Контекстserver, location
Аргументыnone
МодульNGINX sticky cookie module
server_traffic_status
streamstream server
Контекстstream, stream server
Аргументыflag
МодульNginx stream server traffic status core module
server_traffic_status_filter
streamstream server
Контекстstream, stream server
Аргументыflag
МодульNginx stream server traffic status core module
server_traffic_status_filter_check_duplicate
streamstream server
Контекстstream, stream server
Аргументыflag
МодульNginx stream server traffic status core module
server_traffic_status_filter_by_set_key
streamstream server
Контекстstream, stream server
Аргументы1-2
МодульNginx stream server traffic status core module
server_traffic_status_limit
streamstream server
Контекстstream, stream server
Аргументыflag
МодульNginx stream server traffic status core module
server_traffic_status_limit_check_duplicate
streamstream server
Контекстstream, stream server
Аргументыflag
МодульNginx stream server traffic status core module
server_traffic_status_limit_traffic
streamstream server
Контекстstream, stream server
Аргументы1-2
МодульNginx stream server traffic status core module
server_traffic_status_limit_traffic_by_set_key
streamstream server
Контекстstream, stream server
Аргументы2-3
МодульNginx stream server traffic status core module
server_traffic_status_zone
stream
Контекстstream
Аргументыnone
МодульNginx stream server traffic status core module
server_traffic_status_average_method
streamstream server
Контекстstream, stream server
Аргументы1-2
МодульNginx stream server traffic status core module
server_traffic_status_histogram_buckets
streamstream server
Контекстstream, stream server
Аргументы1+
МодульNginx stream server traffic status core module
sysguard
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX sysguard module
sysguard_mode
httpserverlocation
Контекстhttp, server, location
Аргументыflag
МодульNGINX sysguard module
sysguard_load
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNGINX sysguard module
sysguard_mem
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNGINX sysguard module
sysguard_rt
httpserverlocation
Контекстhttp, server, location
Аргументы1-4
МодульNGINX sysguard module
sysguard_interval
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX sysguard module
sysguard_log_level
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX sysguard module
accounting
stream
Контекстstream
Аргументы1
МодульMonitor the incoming and outgoing traffic metrics in realtime for NGINX
accounting_interval
stream
Контекстstream
Аргументы1
МодульMonitor the incoming and outgoing traffic metrics in realtime for NGINX
accounting_perturb
stream
Контекстstream
Аргументы1
МодульMonitor the incoming and outgoing traffic metrics in realtime for NGINX
accounting_log
stream
Контекстstream
Аргументы1+
МодульMonitor the incoming and outgoing traffic metrics in realtime for NGINX
accounting_id
streamstream server
Контекстstream, stream server
Аргументы1
МодульMonitor the incoming and outgoing traffic metrics in realtime for NGINX
untar
location
Контекстlocation
Аргументыnone
МодульNGINX HTTP Untar Module
untar_file
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX HTTP Untar Module
untar_archive
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX HTTP Untar Module
upload_pass
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_store
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1-4
МодульNGINX module for handling file uploads
upload_state_store
httpserverlocation
Контекстhttp, server, location
Аргументы1-4
МодульNGINX module for handling file uploads
upload_store_access
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1-3
МодульNGINX module for handling file uploads
upload_buffer_size
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_merge_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module for handling file uploads
upload_range_header_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX module for handling file uploads
upload_max_part_header_len
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_max_file_size
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_max_output_body_len
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_set_form_field
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы2
МодульNGINX module for handling file uploads
upload_aggregate_form_field
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы2
МодульNGINX module for handling file uploads
upload_pass_form_field
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1
МодульNGINX module for handling file uploads
upload_cleanup
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы1+
МодульNGINX module for handling file uploads
upload_pass_args
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументыflag
МодульNGINX module for handling file uploads
upload_limit_rate
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNGINX module for handling file uploads
upload_tame_arrays
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументыflag
МодульNGINX module for handling file uploads
upload_resumable
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументыflag
МодульNGINX module for handling file uploads
upload_empty_fiels_names
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументыflag
МодульNGINX module for handling file uploads
upload_add_header
httpserverlocationif in locationlimit_except
Контекстhttp, server, location, if in location, limit_except
Аргументы2
МодульNGINX module for handling file uploads
vod
location
Контекстlocation
Аргументы1
МодульNGINX-based VOD Packager
vod_mode
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_status
location
Контекстlocation
Аргументыnone
МодульNGINX-based VOD Packager
vod_multi_uri_suffix
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_segment_duration
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_live_window_duration
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_bootstrap_segment_durations
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_align_segments_to_key_frames
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_gop_look_ahead
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_gop_look_behind
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_segment_count_policy
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_manifest_duration_policy
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_manifest_segment_durations_mode
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_force_playlist_type_vod
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_force_continuous_timestamps
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_force_sequence_index
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_secret_key
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_encryption_iv_seed
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_base_url
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_segments_base_url
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_metadata_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_response_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_live_response_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_initial_read_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_max_metadata_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_max_frames_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_max_frame_count
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_segment_max_frame_count
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_cache_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_ignore_edit_list
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_parse_hdlr_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_parse_udta_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_max_upstream_headers_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_upstream_location
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_remote_upstream_location
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_upstream_extra_args
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_mapping_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_live_mapping_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_dynamic_mapping_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_path_response_prefix
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_path_response_postfix
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_max_mapping_response_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_notification_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_dynamic_clip_map_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_source_clip_map_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_redirect_segments_url
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_media_set_map_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_apply_dynamic_mapping
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_media_set_override_json
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_fallback_upstream_location
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_proxy_header_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_proxy_header_value
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_expires
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_expires_live
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_expires_live_time_dependent
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_last_modified
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_last_modified_types
httpserverlocation
Контекстhttp, server, location
Аргументы1+
МодульNGINX-based VOD Packager
vod_drm_enabled
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_drm_single_key
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_drm_clear_lead_segment_count
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_drm_max_info_length
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_drm_upstream_location
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_drm_info_cache
httpserverlocation
Контекстhttp, server, location
Аргументы1-3
МодульNGINX-based VOD Packager
vod_drm_request_uri
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_min_single_nalu_per_frame_segment
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_clip_to_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_clip_from_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_tracks_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_time_shift_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_speed_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_lang_param_name
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_performance_counters
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNGINX-based VOD Packager
vod_output_buffer_pool
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульNGINX-based VOD Packager
vod_open_file_thread_pool
httpserverlocation
Контекстhttp, server, location
Аргументыnone
МодульNGINX-based VOD Packager
wasm
main
Контекстmain
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
ipc
main
Контекстmain
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
wasmtime
Контекст
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
wasmer
Контекст
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
v8
Контекст
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
metrics
Контекст
Аргументыnone
МодульNginx with WebAssembly powered by wasmtime
flag
Контекст
Аргументы2
МодульNginx with WebAssembly powered by wasmtime
cache_config
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
compiler
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
backtraces
Контекст
Аргументыflag
МодульNginx with WebAssembly powered by wasmtime
module
Контекст
Аргументы2-3
МодульNginx with WebAssembly powered by wasmtime
shm_kv
Контекст
Аргументы2-3
МодульNginx with WebAssembly powered by wasmtime
slab_size
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
max_metric_name_length
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
shm_queue
Контекст
Аргументы2-3
МодульNginx with WebAssembly powered by wasmtime
tls_trusted_certificate
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
tls_verify_cert
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
tls_verify_host
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
tls_no_verify_warn
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
resolver
Контекст
Аргументы1+
МодульNginx with WebAssembly powered by wasmtime
resolver_timeout
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_connect_timeout
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_send_timeout
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_read_timeout
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_buffer_size
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_buffer_reuse
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
socket_large_buffers
Контекст
Аргументы2
МодульNginx with WebAssembly powered by wasmtime
proxy_wasm_lua_resolver
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
proxy_wasm_log_dispatch_errors
Контекст
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_call
httpserverlocation
Контекстhttp, server, location
Аргументы3
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_connect_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_send_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_read_timeout
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_buffer_size
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_buffer_reuse
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_socket_large_buffers
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульNginx with WebAssembly powered by wasmtime
wasm_response_body_buffers
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульNginx with WebAssembly powered by wasmtime
wasm_postpone_rewrite
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_postpone_access
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
proxy_wasm
httpserverlocation
Контекстhttp, server, location
Аргументы1-2
МодульNginx with WebAssembly powered by wasmtime
proxy_wasm_isolation
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
proxy_wasm_request_headers_in_access
httpserverlocation
Контекстhttp, server, location
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
resolver_add
httpserverlocation
Контекстhttp, server, location
Аргументы2
МодульNginx with WebAssembly powered by wasmtime
wasm_debug_header_filter_return
location
Контекстlocation
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
wasm_debug_body_filter_return
location
Контекстlocation
Аргументы1
МодульNginx with WebAssembly powered by wasmtime
webp
location
Контекстlocation
Аргументыnone
МодульNGINX WebP module
xss_get
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументыflag
МодульNative cross-site scripting support in NGINX
xss_callback_arg
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1
МодульNative cross-site scripting support in NGINX
xss_input_types
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1+
МодульNative cross-site scripting support in NGINX
xss_check_status
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументыflag
МодульNative cross-site scripting support in NGINX
xss_override_status
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументыflag
МодульNative cross-site scripting support in NGINX
xss_output_type
httpserverlocationif in location
Контекстhttp, server, location, if in location
Аргументы1+
МодульNative cross-site scripting support in NGINX