HTTP-модуль#
Базовый HTTP-модуль реализует основную функциональность HTTP-сервера: это определение серверных блоков, настройка локаций для маршрутизации запросов, передача статических файлов и контроль доступа, настройка редиректов, поддержка соединений keep-alive и управление заголовками запросов и ответов.
Остальные модули этого раздела расширяют эту функциональность, позволяя гибко
настраивать и оптимизировать работу HTTP-сервера под различные сценарии и
требования. Если запрещено, то перенаправления, выдаваемые Angie, будут относительными. См. также директивы server_name_in_redirect и port_in_redirect. Разрешает или запрещает использование файлового асинхронного ввода-вывода (AIO) во FreeBSD и Linux: Во FreeBSD AIO можно использовать, начиная с FreeBSD 4.3. До FreeBSD 11.0 AIO можно либо собрать в ядре статически: либо загрузить динамически через загружаемый модуль ядра: В Linux AIO можно использовать только начиная с версии ядра 2.6.22. Кроме того, необходимо также дополнительно включить directio, иначе чтение будет блокирующимся: В Linux directio можно использовать только для чтения блоков, выравненных на границу 512 байт (или 4К для XFS). Невыравненный конец файла будет читаться блокированно. То же относится к запросам с указанием диапазона запрашиваемых байт (byte-range requests) и к запросам FLV не с начала файла: чтение невыравненных начала и конца ответа будет блокирующимся. При одновременном включении AIO и sendfile в Linux для файлов, размер которых больше либо равен указанному в директиве directio, будет использоваться AIO, а для файлов меньшего размера или при выключенном directio — sendfile: Кроме того, читать и отправлять файлы можно в многопоточном режиме, не блокируя при этом рабочий процесс: Операции чтения или отправки файлов будут обрабатываться потоками из указанного пула. Если пул потоков не задан явно, используется пул с именем По умолчанию поддержка многопоточности выключена, ее сборку следует разрешить с
помощью конфигурационного параметра --with-threads. В настоящий момент
многопоточность совместима только с методами epoll, kqueue и eventport. Отправка файлов в многопоточном режиме
поддерживается только на Linux. См. также директиву sendfile. При включенном aio разрешает его использование для записи файлов. В настоящий момент это работает только при использовании Задает замену для указанного на запрос В значении параметра путь можно использовать переменные, кроме $document_root и $realpath_root. Если Если то лучше воспользоваться директивой root: Задерживает обработку неавторизованных запросов с кодом ответа 401 для предотвращения атак по времени в случае ограничения доступа по паролю или по результату подзапроса. По умолчанию http, server, location Контролирует поведение перенаправления,
когда префикс Здесь запрос к Значение По умолчанию http, server, location Позволяет запретить формат передачи данных частями (chunked transfer encoding) в HTTP/1.1. Это может понадобиться при использовании программ, не поддерживающих chunked encoding, несмотря на требования стандарта. По умолчанию http, server, location Задает размер буфера для чтения тела запроса клиента. Если тело запроса больше заданного буфера, то все тело запроса или только его часть записывается во временный файл. По умолчанию размер одного буфера равен двум размерам страницы. На x86, других 32-битных платформах и x86-64 это 8K. На других 64-битных платформах это обычно 16K. По умолчанию http, server, location Определяет, сохранять ли все тело запроса клиента в файл. Директиву можно использовать для отладки и при использовании переменной $request_body_file или метода $r->request_body_file модуля Perl. временные файлы по окончании обработки запроса не удаляются разрешает удалять временные файлы, оставшиеся по окончании обработки запроса По умолчанию http, server, location Определяет, сохранять ли все тело запроса клиента в одном буфере. Директива рекомендуется при использовании переменной $request_body для уменьшения требуемого числа операций копирования. По умолчанию http, server, location Задает каталог для хранения временных файлов с телами запросов клиентов. В каталоге может использоваться иерархия подкаталогов до трех уровней. Например, при такой конфигурации путь к временному файлу будет следующего вида: По умолчанию http, server, location Задает таймаут при чтении тела запроса клиента. Таймаут устанавливается не на всю передачу тела запроса, а только между двумя последовательными операциями чтения. Если по истечении этого времени клиент ничего не передаст, обработка запроса прекращается с ошибкой 408 (Request Time-out). По умолчанию http, server Задает размер буфера для чтения заголовка запроса клиента. Для большинства запросов достаточно буфера размером в 1K байт. Однако если в запросе есть длинные cookies, или же запрос пришел от WAP-клиента, то он может не поместиться в 1K. Поэтому, если строка запроса или поле заголовка запроса не помещаются полностью в этот буфер, то выделяются буферы большего размера, задаваемые директивой large_client_header_buffers. Если директива указана на уровне server, то может использоваться значение из сервера по умолчанию. Подробнее см. в разделе Выбор виртуального сервера. Задает таймаут при чтении заголовка запроса клиента. Если по истечении этого времени клиент не передаст полностью заголовок, обработка запроса прекращается с ошибкой 408 (Request Time-out). По умолчанию http, server, location Задает максимально допустимый размер тела запроса клиента. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. отключает проверку размера тела запроса клиента По умолчанию http, server, location Позволяет производить точную настройку выделения памяти под конкретные соединения. Эта директива не оказывает существенного влияния на производительность, и ее не следует использовать. По умолчанию: на 32-битных платформах на 64-битных платформах Задает MIME-тип ответов по умолчанию. Соответствие расширений имен файлов MIME-типу ответов задается с помощью директивы types. Разрешает использовать флаги или при использовании aio в Linux. По умолчанию http, server, location Устанавливает выравнивание для directio. В большинстве случаев достаточно 512-байтового выравнивания, однако при использовании XFS под Linux его нужно увеличить до 4K. По умолчанию http, server, location Определяет, как следует поступать с символическими ссылками при открытии файлов: Символические ссылки в пути допускаются и не проверяются. Это стандартное поведение. Если любой компонент пути является символической ссылкой, доступ к файлу запрещается. Доступ к файлу запрещается, если любой компонент пути является символической ссылкой, а ссылка и объект, на который она ссылается, имеют разных владельцев. При проверке символических ссылок (параметры Пример: Эта директива доступна только на системах, в которых есть интерфейсы openat() и fstatat(). К таким системам относятся современные версии FreeBSD, Linux и Solaris. Предупреждение Параметры На системах, не поддерживающих операцию открытия каталогов только для поиска, для использования этих параметров требуется, чтобы рабочие процессы имели право читать все проверяемые каталоги. Примечание Модули AutoIndex, Random Index и DAV в настоящий момент игнорируют эту директиву. По умолчанию — http, server, location, if в location Задает URI, который будет показываться для указанных ошибок. В значении uri можно использовать переменные. Пример: При этом делается внутреннее перенаправление на указанный uri, а метод запроса клиента меняется на "GET" (для всех методов, отличных от "GET" и "HEAD"). Кроме того, можно поменять код ответа на другой, используя синтаксис вида Если ошибочный ответ обрабатывается проксированным сервером или FastCGI/uwsgi/SCGI/gRPC-сервером, и этот сервер может вернуть разные коды ответов, например, 200, 302, 401 или 404, то можно выдавать возвращаемый им код: Если при внутреннем перенаправлении не нужно менять URI и метод, то можно передать обработку ошибки в именованный Примечание Если при обработке uri происходит ошибка, клиенту возвращается ответ с кодом последней случившейся ошибки. Также существует возможность использовать перенаправления URL для обработки ошибок: В этом случае по умолчанию клиенту возвращается код ответа 302. Его можно изменить только на один из кодов ответа, относящихся к перенаправлениям (301, 302, 303, 307 и 308). Разрешает или запрещает автоматическую генерацию поля "ETag" заголовка ответа для статических ресурсов. Предоставляет контекст конфигурационного файла, в котором указываются директивы HTTP-сервера. По умолчанию http, server, location Определяет, как сравнивать время модификации ответа с временем в поле "If-Modified-Since" заголовка запроса: ответ всегда считается изменившимся точное совпадение время модификации ответа меньше или равно времени, заданному в поле "If-Modified-Since" заголовка запроса Если включено, Angie игнорирует поля заголовка с недопустимыми именами. Допустимыми считаются имена, состоящие из английских букв, цифр, дефисов и возможно знаков подчеркивания (последнее контролируется директивой underscores_in_headers). Если директива указана на уровне server, то может использоваться значение из сервера по умолчанию. Указывает, что запросы, перенаправленные директивами error_page, index, random_index и try_files; запросы, перенаправленные с помощью поля "X-Accel-Redirect" заголовка ответа вышестоящего сервера; подзапросы, формируемые командой запросы, измененные директивой rewrite. Пример: Примечание Для предотвращения зацикливания, которое может возникнуть при использовании некорректных конфигураций, количество внутренних перенаправлений ограничено десятью. По достижении этого ограничения будет возвращена ошибка 500 (Internal Server Error). В таком случае в лог-файле ошибок можно увидеть сообщение По умолчанию http, server, location Запрещает соединения keep-alive с некорректно ведущими себя браузерами. Параметры браузер указывают, на какие браузеры это распространяется. разрешает соединения keep-alive со всеми браузерами запрещает соединения keep-alive со старыми версиями MSIE после получения запроса POST запрещает соединения keep-alive с Safari и подобными им браузерами на macOS и подобных ей ОС По умолчанию http, server, location Задает максимальное число запросов, которые можно сделать по одному keep-alive соединению. После того, как сделано максимальное число запросов, соединение закрывается. Периодическое закрытие соединений необходимо для освобождения памяти, выделенной под конкретные соединения. Поэтому использование слишком большого максимального числа запросов может приводить к чрезмерному потреблению памяти и не рекомендуется. Ограничивает максимальное время, в течение которого могут обрабатываться запросы в рамках соединения keep-alive. По достижении заданного времени соединение закрывается после обработки очередного запроса. По умолчанию http, server, location таймаут задает время, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера запрещает keep-alive соединения с клиентами Второй, необязательный, параметр задает значение в поле "Keep‑Alive: timeout=время" заголовка ответа. Два параметра могут отличаться друг от друга. Поле "Keep-Alive: timeout=время" заголовка понимают Mozilla и Konqueror. MSIE сам закрывает keep-alive соединение примерно через 60 секунд. По умолчанию http, server Задает максимальное число и размер буферов для чтения большого заголовка запроса клиента. Строка запроса не должна превышать размера одного буфера, иначе клиенту возвращается ошибка 414 (Request-URI Too Large). Поле заголовка запроса также не должно превышать размера одного буфера, иначе клиенту возвращается ошибка 400 (Bad Request). Буферы выделяются только по мере необходимости. По умолчанию размер одного буфера равен 8K байт. Если по окончании обработки запроса соединение переходит в состояние keep-alive, эти буферы освобождаются. Если директива указана на уровне server, то может использоваться значение из сервера по умолчанию. Ограничивает HTTP-методы, доступные внутри location. Параметр метод может быть
одним из Примечание Ограничение в примере действует для всех методов,
кроме Ограничивает скорость передачи ответа клиенту. Скорость задается в байтах в секунду. Значение В значении параметра можно использовать переменные. Это может быть полезно в случаях, когда скорость нужно ограничивать в зависимости от какого-либо условия: Ограничение скорости можно также задать в переменной $limit_rate, однако использовать данный метод не рекомендуется: Кроме того, ограничение скорости может быть задано в поле "X-Accel-Limit-Rate" заголовка ответа проксированного сервера. Эту возможность можно запретить с помощью директив proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers и scgi_ignore_headers. По умолчанию http, server, location, if в location Задает начальный объем данных, после передачи которого начинает ограничиваться скорость передачи ответа клиенту. В значении параметра можно использовать переменные. Пример: По умолчанию http, server, location Управляет закрытием соединений с клиентами. Angie будет ждать и обрабатывать дополнительные данные, поступающие от клиента, перед полным закрытием соединения, но только если эвристика указывает на то, что клиент может еще послать данные. Angie всегда будет ждать и обрабатывать дополнительные данные, поступающие от клиента. Angie не будет ждать поступления дополнительных данных и сразу же закроет соединение. Это поведение нарушает протокол и поэтому не должно использоваться без необходимости. Для управления закрытием HTTP/2-соединений директива должна быть задана на уровне server. Если действует lingering_close, эта директива задает максимальное время, в течение которого Angie будет обрабатывать (читать и игнорировать) дополнительные данные, поступающие от клиента. По прошествии этого времени соединение будет закрыто, даже если будут еще данные. Если действует lingering_close, эта директива задает максимальное время
ожидания поступления дополнительных данных от клиента. Если в течение этого
времени данные не были получены, соединение закрывается. В противном случае
данные читаются и игнорируются, и Angie снова ждет поступления данных. Цикл
"ждать-читать-игнорировать" повторяется, но не дольше чем задано директивой
lingering_time. При постепенном завершении клиентские постоянные соединения закрываются только в
случае, если они неактивны не менее времени, заданного в
По умолчанию server Задает адрес и порт для прослушивающего сокета или путь к UNIX-доменному
сокету, на котором сервер будет принимать запросы.
Адрес также может быть именем хоста, например: IPv6-адреса указываются в квадратных скобках: UNIX-доменные сокеты задаются с префиксом Можно указать адрес и порт вместе, только адрес или только порт.
Если какие-либо параметры опущены, применяются следующие правила: Если указан только адрес, используется порт 80. Если указан только порт,
Angie будет слушать на всех доступных интерфейсах IPv4 (и IPv6, если включен).
Стоящий первым блок Если директива не указана вовсе, Angie использует сервер, в котором указан этот параметр,
будет сервером по умолчанию для указанной пары адрес:порт
(вместе они образуют cлушающий сокет). Если же директив с параметром указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны работать в режиме SSL. Это позволяет задать компактную конфигурацию для сервера, работающего сразу в двух режимах — HTTP и HTTPS. позволяет принимать на слушающем сокете HTTP/2-соединения. Обычно, чтобы это работало, следует также указать параметр Устарело, начиная с версии 1.2.0. Используйте взамен директиву http2. позволяет принимать на этом порту QUIC-соединения.
Для использования этой опции в Angie
должен быть включен и настроен модуль HTTP3.
Когда указывает на то, что все соединения, принимаемые на данном слушающем сокете, должны использовать протокол PROXY. В директиве задает таблицу маршрутизации, FIB (параметр включает "TCP Fast Open" для слушающего сокета и ограничивает максимальную длину очереди соединений, которые еще не завершили процесс трехстороннего рукопожатия. Осторожно Не включайте "TCP Fast Open", не убедившись, что сервер может адекватно обрабатывать многократное получение одного и того же SYN-пакета с данными. задает параметр задает размер буфера приема (параметр задает размер буфера передачи (параметр задает название accept-фильтра (параметр указывает использовать отложенный указывает, что для данного слушающего сокета нужно делать определяет (через параметр сокета По умолчанию параметр включен. Установить его можно только один раз на старте. указывает, что нужно создавать отдельный слушающий сокет для каждого рабочего процесса (через параметр сокета Осторожно Ненадлежащее использование параметра Конфигурирует для слушающего сокета поведение "TCP keepalive". если параметр опущен, для сокета будут действовать настройки операционной системы для сокета включается параметр для сокета параметр Некоторые операционные системы поддерживают настройку параметров "TCP keepalive" на уровне сокета посредством параметров установит таймаут бездействия ( Пример: Устанавливает конфигурацию в зависимости от того, соответствует ли URI запроса
какому-либо из выражений сопоставления. Для сопоставления используется URI запроса в нормализованном виде, после
декодирования текста, заданного в виде Задать Регулярные выражения задаются с модификатором: Для поиска совпадения без учета регистра символов С учетом регистра Чтобы найти Примечание Для операционных систем, нечувствительных к регистру символов, таких как
macOS, сравнение с префиксными строками производится без учета регистра.
Однако сравнение ограничено только однобайтными Затем проверяются регулярные выражения в порядке их следования в
конфигурационном файле. Проверка регулярных выражений прекращается после
первого же совпадения, и используется соответствующая конфигурация. Если
совпадение с регулярным выражением не найдено, то используется конфигурация
запомненного ранее префиксного За некоторыми исключениями, о которых говорится ниже,
блоки Регулярные выражения могут создавать группы захвата, которые затем можно
использовать в других директивах. Если у совпавшего префиксного Кроме того, с помощью модификатора Пример: Для запроса для запроса для запроса для запроса а для запроса Примечание Если префиксный Если задать Префикс Для удобства несколько Если, например, предположить, что в предыдущем примере конфигурации А, Г и Д
совпадают, то их можно записать с помощью комбинированного Именованный Осторожно В комбинированных Примечание Сейчас комбинированные Разрешает или запрещает записывать в error_log ошибки о том, что файл не найден. Разрешает или запрещает записывать в access_log подзапросы. Устанавливает максимальное количество полей заголовков запроса клиента.
При превышении предела клиенту возвращается ошибка Если эта директива задана на уровне server,
может использоваться значение с сервера по умолчанию.
Дополнительные сведения см. в разделе Выбор виртуального сервера. Ограничивает максимальное допустимое число диапазонов в запросах с указанием диапазона запрашиваемых байт (byte-range requests). Запросы, превышающие указанное ограничение, обрабатываются как если бы они не содержали указания диапазонов. По умолчанию число диапазонов не ограничено. полностью запрещает поддержку диапазонов Разрешает или запрещает преобразование URI путем замены двух и более подряд идущих косых черт ("/") на одну. Необходимо иметь в виду, что это преобразование необходимо для корректной проверки префиксных строк и регулярных выражений. Если его не делать, то запрос и может быть обслужен как статический файл. Поэтому он преобразуется к виду Запрет преобразования может понадобиться, если в URI используются имена, закодированные методом Если директива указана на уровне server, то может использоваться значение из сервера по умолчанию. Разрешает или запрещает добавлять в ответы для MSIE со статусом больше 400 комментарий для увеличения размера ответа до 512 байт. Разрешает или запрещает выдавать для MSIE клиентов refresh'ы вместо перенаправлений. По умолчанию http, server, location Задает кэш, в котором могут храниться: дескрипторы открытых файлов, информация об их размерах и времени модификации; информация о существовании каталогов; информация об ошибках поиска файла — "нет файла", "нет прав на чтение" и тому подобное. Кэширование ошибок нужно разрешить отдельно директивой open_file_cache_errors. задает максимальное число элементов в кэше; при переполнении кэша удаляются наименее востребованные элементы (LRU) задает время, после которого элемент кэша удаляется, если к нему не было обращений в течение этого времени. По умолчанию: 60 секунд. запрещает кэш. Пример: По умолчанию http, server, location Разрешает или запрещает кэширование ошибок поиска файлов в open_file_cache. По умолчанию http, server, location Задает минимальное число обращений к файлу в течение времени, заданного параметром inactive директивы open_file_cache, необходимых для того, чтобы дескриптор файла оставался открытым в кэше. По умолчанию http, server, location Определяет время, через которое следует проверять актуальность информации об элементе в open_file_cache. По умолчанию http, server, location Задает число и размер буферов, используемых при чтении ответа с диска. Разрешает или запрещает указывать порт в абсолютных перенаправлениях, выдаваемых Angie. Использование в перенаправлениях основного имени сервера управляется директивой server_name_in_redirect. Если это возможно, то отправка данных клиенту будет отложена пока Angie не накопит по крайней мере указанное количество байт для отправки. запрещает отложенную отправку данных Задает ядру размер предчтения при работе с файлами. На Linux используется системный вызов На FreeBSD используется системный вызов По умолчанию http, server, location Разрешает или запрещает делать несколько перенаправлений через директиву error_page. Число таких перенаправлений ограничено. Позволяет производить точную настройку выделений памяти под конкретные запросы. Эта директива не оказывает существенного влияния на производительность, и ее не следует использовать. По умолчанию http, server, location Разрешает или запрещает сброс соединений по таймауту, а также при закрытии соединений с помощью нестандартного кода 444. Сброс делается следующим образом. Перед закрытием сокета для него задается параметр Примечание соединения keep-alive по истечении таймаута закрываются обычным образом. По умолчанию — http, server, location, upstream Задает серверы DNS, используемые для преобразования имен вышестоящих серверов в адреса, например: Адрес может быть указан в виде доменного имени или IP-адреса, и необязательного порта. Если порт не указан, используется порт 53. Серверы DNS опрашиваются циклически. По умолчанию Angie кэширует ответы, используя значение TTL из ответа. необязательный параметр, позволяет переопределить срок кэширования ответа По умолчанию Angie будет искать как IPv4-, так и IPv6-адреса при преобразовании имен в адреса. запрещает поиск IPv4-адресов запрещает поиск IPv6-адресов необязательный параметр;
включает сбор метрик запросов и ответов DNS-сервера
(/status/resolvers/<зона>)
в указанной зоне Совет Для предотвращения DNS-спуфинга рекомендуется использовать DNS-серверы в защищенной доверенной локальной сети. Совет При запуске в Docker используйте соответствующий внутренний адрес DNS-сервера, например По умолчанию http, server, location, upstream Задает таймаут для преобразования имени в адрес, например: Задает корневой каталог для запросов. Например, при такой конфигурации в ответ на запрос В значении параметра путь можно использовать переменные, кроме $document_root и $realpath_root. Путь к файлу формируется путем простого добавления URI к значению директивы root. Если же URI необходимо поменять, следует воспользоваться директивой alias. Разрешает доступ, если его разрешают все ( При установке этой директивы в ненулевое значение Angie будет пытаться
минимизировать число операций отправки на клиентских сокетах либо при помощи
флага Задает таймаут при передаче ответа клиенту. Таймаут устанавливается не на всю передачу ответа, а только между двумя операциями записи. Если по истечении этого времени клиент ничего не примет, соединение будет закрыто. Разрешает или запрещает использовать Возможно использование aio для подгрузки данных для В такой конфигурации функция Ограничивает объем данных, который может передан за один вызов Задает конфигурацию для виртуального сервера. Четкого разделения виртуальных серверов на IP-based (на основании IP-адреса) и name-based (на основании поля "Host" заголовка запроса) нет. Вместо этого директивами listen описываются все адреса и порты, на которых нужно принимать соединения для этого сервера, а в директиве server_name указываются все имена серверов. Подробнее: Как обрабатываются запросы Задает имена виртуального сервера, например: Первое имя становится основным именем сервера. В именах серверов можно использовать звездочку ("*") для замены первой или последней части имени: Такие имена называются именами с маской. Два первых вышеприведенных имени можно объединить в одно: В качестве имени сервера можно также использовать регулярное выражение, указав перед ним тильду ("~"): Регулярное выражение может содержать выделения, которые могут затем использоваться в других директивах: Именованные выделения в регулярном выражении создают переменные,
которые могут затем использоваться в других директивах: Примечание Если параметр директивы задан как $hostname,
используется имя хоста веб-сервера. Можно также указать пустое имя сервера ( При поиске виртуального сервера по имени,
которому соответствует несколько указанных вариантов
(например, одновременно подходят и имя с маской, и регулярное выражение),
будет выбран первый подходящий вариант в следующем порядке приоритета: точное имя; самое длинное имя с маской в начале, например самое длинное имя с маской в конце, например первое подходящее регулярное выражение (в порядке следования в конфигурации),
в том числе пустое имя. Внимание Чтобы использовать По умолчанию http, server, location Разрешает или запрещает использовать в абсолютных перенаправлениях, выдаваемых Angie, основное имя сервера, задаваемое директивой server_name. используется основное имя сервера, задаваемое директивой server_name используется имя, указанное в поле "Host" заголовка запроса. Если же этого поля нет, то используется IP-адрес сервера. Использование в перенаправлениях порта управляется директивой port_in_redirect. По умолчанию http Задает размер корзины в хэш-таблицах имен серверов. Значение по умолчанию зависит от размера строки кэша процессора. Подробнее настройка хэш-таблиц обсуждается отдельно. Задает максимальный размер хэш-таблиц имен серверов. Подробнее настройка хэш-таблиц обсуждается отдельно. По умолчанию http, server, location Разрешает или запрещает указывать версию Angie
на страницах ошибок и в поле заголовка ответа Добавлено в версии 1.1.0: PRO В Angie PRO директива может быть задана строкой,
которая может также содержать переменные.
Тогда на страницах ошибок и в поле заголовка ответа По умолчанию — server, location, if в location Выделяет зону разделяемой памяти для сбора метрик
/status/http/location_zones/<зона> и /status/http/server_zones/<зона>. Несколько контекстов Синтаксис с одним значением зоны
объединяет все метрики для текущего контекста в одну зону разделяемой памяти: Альтернативный синтаксис позволяет задавать следующие параметры: ключ Строка с переменными, значение которой определяет группировку запросов в
зоне. Все запросы, дающие одинаковые значения после подстановки,
объединяются в одну группу. Если подстановка возвращает пустое значение,
метрики не обновляются. зона Имя зоны разделяемой памяти. число (необязательный) Максимальное количество отдельных групп для сбора метрик.
Если новые значения ключа превышают этот лимит, они объединяются в группу Значение по умолчанию — 1. В следующем примере все запросы с одинаковым значением Результирующие метрики разделяются по отдельным хостам в выводе API. По умолчанию http, server, location Задает размер буфера, используемого для хранения тела ответа подзапроса. По умолчанию размер одного буфера равен размеру страницы памяти. В зависимости от платформы это или Примечание Директива применима только для подзапросов, тело ответа которых сохраняется в памяти. Например, подобные подзапросы создаются при помощи SSI. Разрешает или запрещает использование параметра Разрешает или запрещает использование параметра сокета передавать заголовок ответа и начало файла в одном пакете в Linux и во FreeBSD 4.*; передавать файл полными пакетами. Проверяет существование файлов в заданном порядке и использует для обработки запроса первый найденный файл, причем обработка делается в контексте этого же Последний параметр может также указывать на именованный В следующем примере директива аналогична директивам А здесь По умолчанию http, server, location Задает соответствие расширений имен файлов и MIME-типов ответов. Расширения нечувствительны к регистру символов. Одному MIME-типу может соответствовать несколько расширений, например: Достаточно полная таблица соответствий входит в дистрибутив Angie и находится в файле Для того чтобы для определенного По умолчанию http, server, location Задает размер корзины в хэш-таблицах типов. Подробнее настройка хэш-таблиц обсуждается отдельно. По умолчанию http, server, location Задает максимальный размер хэш-таблиц типов. Подробнее настройка хэш-таблиц обсуждается отдельно. По умолчанию http, server Разрешает или запрещает использование символов подчеркивания в полях заголовка запроса клиента. Если использование символов подчеркивания запрещено, поля заголовка запроса, в именах которых есть подчеркивания, помечаются как недопустимые и подпадают под действие директивы ignore_invalid_headers. Если директива указана на уровне server, то может использоваться значение из сервера по умолчанию. Задает размер корзины в хэш-таблице переменных. Подробнее настройка хэш-таблиц обсуждается отдельно. Задает максимальный размер хэш-таблиц переменных. Подробнее настройка хэш-таблиц обсуждается отдельно. Модуль версия Angie аргумент имя в строке запроса аргументы в строке запроса адрес клиента в бинарном виде, длина значения всегда 4 байта для IPv4-адресов или 16 байт для IPv6-адресов число байт, переданное клиенту, без учета заголовка ответа; переменная совместима с параметром "%B" модуля Apache число байт, переданных клиенту порядковый номер соединения текущее число запросов в соединении время соединения в секундах с точностью до миллисекунд поле "Content-Length" заголовка запроса поле то же, что и $uri в порядке приоритета: имя хоста из строки запроса, или имя хоста из поля "Host" заголовка запроса, или имя сервера, соответствующего запросу имя хоста произвольное поле заголовка запроса; последняя часть имени переменной соответствует имени поля, приведенному к нижнему регистру, с заменой символов тире на символы подчеркивания установка этой переменной позволяет ограничивать скорость передачи ответа, см. limit_rate текущее время в секундах с точностью до миллисекунд номер (PID) рабочего процесса Адрес клиента, полученный из заголовка протокола PROXY. Протокол PROXY должен быть предварительно включен при помощи установки параметра Порт клиента, полученный из заголовка протокола PROXY. Протокол PROXY должен быть предварительно включен при помощи установки параметра Адрес сервера, полученный из заголовка протокола PROXY. Протокол PROXY должен быть предварительно включен при помощи установки параметра Порт сервера, полученный из заголовка протокола PROXY. Протокол PROXY должен быть предварительно включен при помощи установки параметра TLV, полученный из заголовка протокола PROXY. Имя может быть именем типа TLV или его числовым значением. В последнем случае значение задается в шестнадцатеричном виде и должно начинаться с SSL TLV могут также быть доступны как по имени типа TLV, так и по его числовому значению, оба должны начинаться с Поддерживаются следующие имена типов TLV: Поддерживаются следующие имена типов SSL TLV: Также поддерживается следующее специальное имя типа SSL TLV: Протокол PROXY должен быть предварительно включен при помощи установки параметра то же, что и $args абсолютный путь, соответствующий значению директивы root или alias для текущего запроса, в котором все символические ссылки преобразованы в реальные пути адрес клиента порт клиента имя пользователя, использованное в Basic аутентификации первоначальная строка запроса целиком Тело запроса.
Значение переменной появляется в location'ах, обрабатываемых директивами proxy_pass, fastcgi_pass, uwsgi_pass и scgi_pass, когда тело было прочитано в буфер в памяти. Имя временного файла, в котором хранится тело запроса.
По завершении обработки файл необходимо удалить. Для того чтобы тело запроса всегда записывалось в файл, следует включить client_body_in_file_only. При передаче имени временного файла в проксированном запросе или в запросе к FastCGI/uwsgi/SCGI-серверу следует запретить передачу самого тела директивами proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off или scgi_pass_request_body off соответственно. путь к файлу для текущего запроса, формируемый из директив root или alias и URI запроса уникальный идентификатор запроса, сформированный из 16 случайных байт, в шестнадцатеричном виде длина запроса (включая строку запроса, заголовок и тело запроса) метод запроса, обычно время обработки запроса в секундах с точностью до миллисекунд; время, прошедшее с момента чтения первых байт от клиента первоначальный URI запроса целиком (с аргументами) схема запроса, "http" или "https" произвольное поле заголовка ответа; последняя часть имени переменной соответствует имени поля, приведенному к нижнему регистру, с заменой символов тире на символы подчеркивания произвольное поле, отправленное в конце ответа; последняя часть имени переменной соответствует имени поля, приведенному к нижнему регистру, с заменой символов тире на символы подчеркивания Адрес сервера, принявшего запрос. Получение значения этой переменной обычно требует одного системного вызова. Чтобы избежать системного вызова, в директивах listen следует указывать адреса и использовать параметр имя сервера, принявшего запрос порт сервера, принявшего запрос протокол запроса, обычно "HTTP/1.0", "HTTP/1.1" или "HTTP/2.0" статус ответа локальное время в формате по стандарту ISO 8601 локальное время в Common Log Format информация о клиентском TCP-соединении; доступна на системах, поддерживающих параметр сокета Текущий URI запроса в нормализованном виде. Значение Директивы#
absolute_redirect#
aio#
location /video/ {
aio on;
output_buffers 1 64k;
}
options VFS_AIO
kldload aio
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
location /video/ {
sendfile on;
aio on;
directio 8m;
}
location /video/ {
sendfile on;
aio threads;
}
default
. Имя пула может быть задано при помощи переменных:aio threads=pool$disk;
aio_write#
aio threads
и ограничено записью временных файлов с данными, полученными от проксируемых серверов.alias#
location
'а. Например, при такой конфигурации:location /i/ {
alias /data/w3/images/;
}
/i/top.gif
будет отдан файл /data/w3/images/top.gif.alias
используется внутри location
'а, заданного регулярным выражением, то регулярное выражение должно содержать выделения, а сам alias
— ссылки на эти выделения, например:location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
location
и последняя часть значения директивы совпадают:location /images/ {
alias /data/w3/images/;
}
location /images/ {
root /data/w3;
}
auth_delay#
auto_redirect#
auto_redirect
[on
| off
| default
];auto_redirect default;
location
заканчивается косой чертой:location /prefix/ {
auto_redirect on;
}
/prefix
будет перенаправлен на /prefix/
.on
включает перенаправление в явном виде;
off
отключает его.
Если указано default
, перенаправление включается,
только если location
обрабатывает запросы через api,
proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass,
memcached_pass, или grpc_pass.chunked_transfer_encoding#
chunked_transfer_encoding
on
| off
;chunked_transfer_encoding on;
client_body_buffer_size#
client_body_buffer_size
размер;client_body_buffer_size 8k|16k;
client_body_in_file_only#
client_body_in_file_only
on
| clean
| off
;client_body_in_file_only off;
on
clean
client_body_in_single_buffer#
client_body_in_single_buffer
on
| off
;client_body_in_single_buffer off;
client_body_temp_path#
client_body_temp_path
путь [уровень1 [уровень2 [уровень3]]];client_body_temp_path client_body_temp;
(путь зависит от параметра сборки --http-client-body-temp-path
)client_body_temp_path /spool/angie/client_temp 1 2;
/spool/angie/client_temp/7/45/00000123457
client_body_timeout#
client_body_timeout
время;client_body_timeout 60s;
client_header_buffer_size#
client_header_buffer_size
размер;client_header_buffer_size 1k;
client_header_timeout#
client_max_body_size#
client_max_body_size
размер;client_max_body_size 1m;
0
connection_pool_size#
connection_pool_size
размер;connection_pool_size 256
| 512;
256
(байт)512
(байт)default_type#
directio#
O_DIRECT
(FreeBSD, Linux), F_NOCACHE
(macOS) или функцию directio()
(Solaris) при чтении файлов, размер которых больше либо равен указанному. Директива автоматически запрещает использование sendfile для данного запроса. Рекомендуется использовать для больших файлов:directio 4m;
directio_alignment#
directio_alignment
размер;directio_alignment 512;
disable_symlinks#
disable_symlinks
off
;disable_symlinks
on
| if_not_owner
[from=
часть];disable_symlinks off;
off
on
if_not_owner
from=
частьon
и if_not_owner
) обычно проверяются все компоненты пути. Можно не проверять символические ссылки в начальной части пути, указав дополнительно параметр from=часть
. В этом случае символические ссылки проверяются лишь начиная с компонента пути, который следует за заданной начальной частью. Если значение не является начальной частью проверяемого пути, путь проверяется целиком, как если бы этот параметр не был указан вовсе. Если значение целиком совпадает с именем файла, символические ссылки не проверяются. В значении параметра можно использовать переменные.disable_symlinks on from=$document_root;
on
и if_not_owner
требуют дополнительных затрат на обработку.error_page#
error_page
код ... [=[ответ]] uri;error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
=ответ
, например:error_page 404 =200 /empty.gif;
error_page 404 = /404.php;
location
:location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
error_page 403 http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
etag#
http#
if_modified_since#
if_modified_since
off
| exact
| before
;if_modified_since exact;
off
exact
before
ignore_invalid_headers#
internal#
location
может использоваться только для внутренних запросов. Для внешних запросов клиенту будет возвращаться ошибка 404 (Not Found). Внутренними запросами являются:include virtual
модуля SSI, директивами модуля Addition, а также директивами auth_request и mirror;error_page 404 /404.html;
location = /404.html {
internal;
}
rewrite or internal redirection cycle
.keepalive_disable#
keepalive_disable
none
| браузер ...;keepalive_disable msie6;
none
msie6
safari
keepalive_requests#
keepalive_requests
число;keepalive_requests 1000;
keepalive_time#
keepalive_timeout#
keepalive_timeout
таймаут [заголовок_таймаута];keepalive_timeout 75s;
0
large_client_header_buffers#
large_client_header_buffers
количество размер;large_client_header_buffers 4 8k;
limit_except#
GET
, HEAD
, POST
, PUT
, DELETE
,
MKCOL
, COPY
, MOVE
, OPTIONS
, PROPFIND
,
PROPPATCH
, LOCK
, UNLOCK
или PATCH
. Если разрешен
метод GET
, то метод HEAD
также будет разрешен. Доступ к
остальным методам может быть ограничен при помощи директив модулей Access и Auth Basic.limit_except GET {
allow 192.168.1.0/32;
deny all;
}
GET
и HEAD
.limit_rate#
0
отключает ограничение скорости. Ограничение устанавливается на запрос, поэтому, если клиент одновременно откроет два соединения, суммарная скорость будет вдвое выше заданного ограничения.map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
server {
if ($slow) {
set $limit_rate 4k;
}
}
limit_rate_after#
limit_rate_after
размер;limit_rate_after 0;
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
lingering_close#
lingering_close
on
| always
| off
;lingering_close on;
on
always
off
lingering_time#
lingering_timeout#
lingering_timeout
.listen#
listen
адрес[:порт] [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [setfib=
число] [fastopen=
число] [backlog=
число] [rcvbuf=
размер] [sndbuf=
размер] [accept_filter=
фильтр] [deferred
] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle
]:[ssamp:keepintvl]:[samp:keepcnt]];listen
порт [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [setfib=
число] [fastopen=
число] [backlog=
число] [rcvbuf=
размер] [sndbuf=
размер] [accept_filter=
фильтр] [deferred
] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen
unix:путь [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [backlog=
число] [rcvbuf=
размер] [sndbuf=
размер] [accept_filter=
фильтр] [deferred
] [bind
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen *:80
| *:8000;
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
listen [::1];
unix:
:listen unix:/var/run/angie.sock;
server
на этом порту будет сервером по умолчанию
для запросов с несопоставленным заголовком Host
.*:80
,
если запущен с правами суперпользователя,
или *:8000
в противном случае.default_server
default_server
нет,
сервером по умолчанию для слущающего сокета
будет первый в конфигурации сервер, обслуживающий этот сокет.ssl
http2
ssl
, однако Angie можно также настроить и на прием HTTP/2-соединений без SSL.quic
quic
включен,
также можно указать reuseport
,
чтобы использовать несколько рабочих процессов.proxy_protocol
listen
можно также указать несколько дополнительных параметров, специфичных для связанных с сокетами системных вызовов. Эти параметры можно задать в любой директиве listen
, но только один раз для слушающего сокета.setfib=
числоSO_SETFIB
) для слушающего сокета. В настоящий момент это работает только на FreeBSD.fastopen=
числоbacklog=
числоbacklog
в вызове listen()
, который ограничивает максимальный размер очереди ожидающих приема соединений. По умолчанию backlog
устанавливается равным -1 для FreeBSD, DragonFly BSD и macOS, и 511 для других платформ.rcvbuf=
размерSO_RCVBUF
) для слушающего сокета.sndbuf=
размерSO_SNDBUF
) для слушающего сокета.accept_filter=
фильтрSO_ACCEPTFILTER
) для слушающего сокета, который включается для фильтрации входящих соединений перед передачей их в accept()
. Работает только на FreeBSD и NetBSD 5.0+. Можно использовать два фильтра: dataready
и httpready
.deferred
accept()
(параметр TCP_DEFER_ACCEPT
сокета) на Linux.bind
bind()
отдельно. Это нужно потому, что если описаны несколько директив listen
с одинаковым портом, но разными адресами, и одна из директив listen
слушает на всех адресах для данного порта (*:порт
), то Angie сделает bind()
только на *:порт
. Необходимо заметить, что в этом случае для определения адреса, на который пришло соединение, делается системный вызов getsockname()
. Если же используются параметры setfib
, fastopen
, backlog
, rcvbuf
, sndbuf
, accept_filter
, deferred
, ipv6only
, reuseport
или so_keepalive
, то для данной пары адрес:порт всегда делается отдельный вызов bind()
.ipv6only=on
| off
IPV6_V6ONLY
), будет ли слушающий на wildcard-адресе [::] IPv6-сокет принимать только IPv6-соединения, или же одновременно IPv6- и IPv4-соединения.reuseport
SO_REUSEPORT
для Linux 3.9+ и DragonFly BSD или SO_REUSEPORT_LB
для FreeBSD 12+), позволяя ядру распределять входящие соединения между рабочими процессами. В настоящий момент это работает только на Linux 3.9+, DragonFly BSD и FreeBSD 12+.reuseport
может быть небезопасно.so_keepalive=on
| off
| [`keepidle
]:[keepintvl]:[keepcnt]`''
on
SO_KEEPALIVE
off
SO_KEEPALIVE
выключаетсяTCP_KEEPIDLE
, TCP_KEEPINTVL
и TCP_KEEPCNT
. На таких системах их можно сконфигурировать с помощью параметров keepidle
, keepintvl
и keepcnt
. Один или два параметра могут быть опущены, в таком случае для соответствующего параметра сокета будут действовать стандартные системные настройки. Например,so_keepalive=30m::10
TCP_KEEPIDLE
) в 30 минут, для интервала проб (TCP_KEEPINTVL
) будет действовать стандартная системная настройка, а счетчик проб (TCP_KEEPCNT
) будет равен 10.listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
location#
%XX
, преобразования относительных
элементов пути "." и ".." в реальные и возможной замены
двух и более подряд идущих косых черт на одну.location
можно префиксной строкой или регулярным выражением.~*
~
location
, соответствующий запросу, вначале проверяются
location
'ы, заданные префиксными строками (префиксные location
'ы). Среди
них ищется location
с совпадающим префиксом максимальной длины и
запоминается.locale
'ями.location
'а.location
могут быть вложенными.location
'а указан модификатор ^~
,
то регулярные выражения не проверяются.=
можно задать точное совпадение URI и
location
. При точном совпадении поиск сразу же прекращается. Например, если
запрос /
случается часто, можно ускорить обработку таких запросов, указав
location =/
, так как поиск прекратится после первого же сравнения. Такой
location
не может иметь вложенные location
, так как он задает полное
совпадение.location =/ {
#конфигурация А
}
location / {
#конфигурация Б
}
location /documents/ {
#конфигурация В
}
location ^~/images/ {
#конфигурация Г
}
location ~*\.(gif|jpg|jpeg)$ {
#конфигурация Д
}
/
будет выбрана конфигурация А,/index.html
— конфигурация Б,/documents/document.html
— конфигурация В,/images/1.gif
— конфигурация Г,/documents/1.jpg
— конфигурация Д.location
задан с косой чертой в конце
и включена директива auto_redirect, происходит следующее:
На запрос с URI без косой черты в конце, в остальном совпадающий с префиксом,
будет возвращено постоянное перенаправление с кодом 301, указывающее
на URI запроса с добавленной в конце косой чертой.location
с точным совпадением URI,
перенаправление не используется:location /user/ {
proxy_pass http://user.example.com;
}
location =/user {
proxy_pass http://login.example.com;
}
@
задает именованный location
. Такой location
не используется
при обычной обработке запросов, а предназначен только для перенаправления в
него запросов. Такие location
не могут быть вложенными и не могут содержать
вложенные location
.Комбинированные
location
#location
с одинаковой конфигурацией можно записать
компактно, перечислив в одном location
сразу несколько выражений
сопоставления и задав для них единую конфигурацию. Такие location
называются
комбинированными.location
:location =/
^~/images/
~*\.(gif|jpg|jpeg)$ {
#общая конфигурация
}
location
также может быть частью комбинированного:location =/
@named_combined {
#...
}
location
между модификатором выражения сопоставления и
самим выражением не может стоять пробел. Правильно: location
~*/match(ing|es|er)$ ...
.location
не могут непосредственно содержать
директивы proxy_pass
, в которых задан URI, а также api
и alias
.
При этом такие директивы можно использовать в других location
,
вложенных в комбинированный.log_not_found#
log_subrequest#
max_headers#
400 (Bad Request)
.max_ranges#
0
merge_slashes#
//scripts/one.php
не попадет вlocation /scripts/ { }
/scripts/one.php
.base64
, в котором задействован символ "/". Однако из соображений безопасности лучше избегать отключения преобразования.msie_padding#
msie_refresh#
open_file_cache#
open_file_cache
off
;open_file_cache
max=
N
[inactive=
время];open_file_cache off;
max
inactive
off
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
open_file_cache_errors#
open_file_cache_errors
on
| off
;open_file_cache_errors off;
open_file_cache_min_uses#
open_file_cache_min_uses
число;open_file_cache_min_uses 1;
open_file_cache_valid#
open_file_cache_valid
время;open_file_cache_valid 60s;
output_buffers#
output_buffers
число размер;output_buffers 2 32k;
port_in_redirect#
postpone_output#
0
read_ahead#
posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
, поэтому параметр размер там игнорируется.fcntl(O_READAHEAD,
размер ), появившийся во FreeBSD 9.0-CURRENT.recursive_error_pages#
recursive_error_pages
on
| off
;recursive_error_pages off;
request_pool_size#
reset_timedout_connection#
reset_timedout_connection
on
| off
;reset_timedout_connection off;
SO_LINGER
с таймаутом 0
. После этого при закрытии сокета клиенту отсылается TCP RST
, а вся память, связанная с этим сокетом, освобождается. Это позволяет избежать длительного нахождения уже закрытого сокета в состоянии FIN_WAIT1
с заполненными буферами.resolver#
resolver
адрес ... [valid=
время] [ipv4=
on
| off
] [ipv6=
on
| off
] [status_zone=
зона];resolver 127.0.0.53 [::1]:5353;
valid
resolver 127.0.0.53 [::1]:5353 valid=30s;
ipv4=off
ipv6=off
status_zone
127.0.0.11
.resolver_timeout#
resolver_timeout
время;resolver_timeout 30s;
resolver_timeout 5s;
root#
location /i/ {
root /data/w3;
}
/i/top.gif
будет отдан файл /data/w3/i/top.gif
.satisfy#
all
) или хотя бы один (any
) из модулей Access, Auth Basic или Auth Request.location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
send_lowat#
NOTE_LOWAT
метода kqueue, либо при помощи
параметра сокета SO_SNDLOWAT
. В обоих случаях будет использован
указанный размер.send_timeout#
sendfile#
sendfile()
.sendfile()
:location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
sendfile()
вызывается с флагом SF_NODISKIO
, в результате чего она не блокируется на диске, а сообщает об отсутствии данных в памяти. После этого Angie инициирует асинхронную подгрузку данных, читая один байт. При этом ядро FreeBSD подгружает в память первые 128K байт файла, однако при последующих чтениях файл подгружается частями только по 16K. Изменить это можно с помощью директивы read_ahead.sendfile_max_chunk#
sendfile()
. Без этого ограничения одно быстрое соединение может целиком захватить рабочий процесс.server#
server_name#
server {
server_name example.com www.example.com;
}
server {
server_name example.com *.example.com www.example.*;
}
server {
server_name .example.com;
}
server {
server_name ~^www\d+\.example\.com$ www.example.com;
}
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
""
):server {
server_name www.example.com "";
}
*.example.com
;mail.*
;server_name
с TLS,
необходима терминация TLS-соединения.
Эта директива сопоставляется с Host
в HTTP-запросе,
поэтому рукопожатие должно быть закончено, а соединение расшифровано.server_name_in_redirect#
server_name_in_redirect
on
| off
;server_name_in_redirect off
;on
off
server_names_hash_bucket_size#
server_names_hash_bucket_size
размер;server_names_hash_bucket_size 32
| 64
| 128;
server_names_hash_max_size#
server_tokens#
server_tokens
on
| off
| build
| строка;server_tokens on;
Server
.
Если указан параметр build
,
то вместе с версией будет также указано имя сборки,
заданное соответствующим параметром скрипта configure.Server
вместо имени сервера, версии и имени сборки
будет указываться значение этой строки с подставленными переменными.
Пустая строка запрещает выдачу поля Server
.status_zone#
status_zone
off
| зона | ключ zone=
зона[:число];server
могут совместно использовать одну и ту же зону для сбора данных;
особое значение off
выключает сбор данных во вложенных блоках location
.server {
listen 80;
server_name *.example.com;
status_zone single;
# ...
}
zone
.$host
группируются в host_zone
. Метрики собираются отдельно для каждого
уникального значения $host
до тех пор, пока количество групп метрик не
достигнет 10. После этого любые новые значения $host
будут добавляться в
группу host_zone
:server {
listen 80;
server_name *.example.com;
status_zone $host zone=host_zone:10;
location / {
proxy_pass http://example.com;
}
}
subrequest_output_buffer_size#
subrequest_output_buffer_size
размер;subrequest_output_buffer_size 4k
| 8k;
4K
, или 8K
, однако его можно сделать меньше.tcp_nodelay#
TCP_NODELAY
. Параметр включается при переходе соединения в состояние keep-alive. Также, он включается на SSL-соединениях, при небуферизованном проксировании и при проксировании WebSocket.tcp_nopush#
TCP_NOPUSH
во FreeBSD или TCP_CORK
в Linux. Параметр включаются только при использовании sendfile. Включение параметра позволяетtry_files#
location
'а. Путь к файлу строится из параметра файл в соответствии с директивами root и alias. С помощью косой черты в конце имени можно проверить существование каталога, например, $uri/
. В случае, если ни один файл не найден, то делается внутреннее перенаправление на uri, заданный последним параметром. Например:location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
location
, может также быть кодом:location / {
try_files $uri $uri/index.html $uri.html =404;
}
try_files
location / {
try_files $uri $uri/ @drupal;
}
location / {
error_page 404 = @drupal;
log_not_found off;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ...
}
try_files
проверяет существование PHP-файла, прежде чем передать запрос FastCGI-серверу.Пример использования при проксировании Mongrel:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Пример использования вместе с Drupal/FastCGI:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
# ... прочие fastcgi_param
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
# ... прочие fastcgi_param
}
Пример использования вместе с Wordpress и Joomla:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ... прочие fastcgi_param
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# ... прочие fastcgi_param
}
types#
types
{ ... }types text/html html; image/gif gif; image/jpeg jpg;
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
conf/mime.types
.location
'а для всех ответов выдавался MIME-тип "application/octet-stream", можно использовать следующее:location /download/ {
types { }
default_type application/octet-stream;
}
types_hash_bucket_size#
types_hash_bucket_size
размер;types_hash_bucket_size 64;
types_hash_max_size#
types_hash_max_size
размер;types_hash_max_size 1024;
underscores_in_headers#
underscores_in_headers
on
| off
;underscores_in_headers off
;variables_hash_bucket_size#
variables_hash_max_size#
Встроенные переменные#
http_core
поддерживает встроенные переменные, имена которых совпадают с именами переменных веб-сервера Apache. Прежде всего, это переменные, представляющие из себя поля заголовка запроса клиента, такие как $http_user_agent
, $http_cookie
и тому подобное. Кроме того, есть и другие переменные:$angie_version
#$arg_<имя>
#$args
#$binary_remote_addr
#$body_bytes_sent
#mod_log_config
$bytes_sent
#$connection
#$connection_requests
#$connection_time
#$content_length
#$content_type
#Content-Type
заголовка запроса$document_root
#$document_uri
#$host
#$hostname
#$http_<имя>
#$https
#on
если соединение работает в режиме SSL, либо пустая строка$is_args
#?
, если в строке запроса есть аргументы, и пустая строка, если их нет$limit_rate
#$msec
#$pid
#$pipe
#p
если запрос был pipelined, иначе .
$proxy_protocol_addr
#proxy_protocol
в директиве listen.$proxy_protocol_port
#proxy_protocol
в директиве listen.$proxy_protocol_server_addr
#proxy_protocol
в директиве listen.$proxy_protocol_server_port
#proxy_protocol
в директиве listen.$proxy_protocol_tlv_<имя>
#0x
:$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
ssl_
:$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
alpn (0x01)
- протокол более высокого уровня, используемый поверх соединенияauthority (0x02)
- значение имени хоста, передаваемое клиентомunique_id (0x05)
- уникальный идентификатор соединенияnetns (0x30)
- имя пространства именssl (0x20)
- структура SSL TLV в бинарном видеssl_version (0x21)
- версия SSL, используемая в клиентском соединенииssl_cn (0x22)
- Common Name сертификатаssl_cipher (0x23)
- имя используемого шифраssl_sig_alg (0x24)
- алгоритм, используемый для подписи сертификатаssl_key_alg (0x25)
- алгоритм публичного ключаssl_verify
- результат проверки клиентского сертификата: 0
, если клиент предоставил сертификат и он был успешно верифицирован, либо ненулевое значениеproxy_protocol
в директиве listen.$query_string
#$realpath_root
#$remote_addr
#$remote_port
#$remote_user
#$request
#$request_body
#$request_body_file
#$request_completion
#OK
, если запрос завершился, либо пустая строка$request_filename
#$request_id
#$request_length
#$request_method
#GET
или POST
$request_time
#$request_uri
#$scheme
#$sent_http_<имя>
#$sent_trailer_<имя>
#$server_addr
#bind
.$server_name
#$server_port
#$server_protocol
#$status
#$time_iso8601
#$time_local
#$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
#TCP_INFO
$uri
#$uri
может изменяться в процессе обработки запроса, например, при внутренних перенаправлениях или при использовании индексных файлов.