Модуль протокола HTTP не привязан к другим модулям и может
быть единственным загруженным модулем.
В составе сервера Manjary есть
приложение fast-cgi fcgimm реализующее WEB-интерфейс и взаимодействущее с интерфейсом
MMP через сеть либо локальный сокет. Этот интерфейс
может использоваться пользователями для получения информации о своей
учётной записи и смены пароля или операторами и администраторами для
управления доменами, пользователями и пр. Приложение fcgimm может быть запущено на любом
сервере в сети и к нему может обращаться любой WEB-сервер
поддерживающий протокол fast-cgi. Это делает возможным управление
множеством серверов Manjary из одного
места. В простом случае fcgimm
используется модулем HTTP
сервера Manjary.
<module-HTTP> <log-level>N</log-level> <host>...</host> ... <limit-req-fields>N</limit-req-fields> <limit-req-line>bytes</limit-req-line> <limit-req-field>bytes</limit-req-field> <limit-req-body>bytes</limit-req-body> <fastcgi name="fcginame"> <server>hostname:port|IPv4:port|[IPv6]:port|socket_name</server> <start>filename</start> ... </fastcgi> ... <directory path="directory/path"> <acl not-listed="permit|deny|parent"> <addr>...</addr> ... <acl> <index type="parent|deny|auto[,list]|redirect[,list]|list">file1 file2</index> <mime-types file="filename"> <ext name="type/name">ext</ext> ... </mime-types> <file must-exist="0|1"> <match>pattern1|pattern2</match> <match>pattern3</match> <set-env name="string" cs="0|1" value="pattern">new value</set-env> ... <handler>$fcginame|@local-filename|URI-filename</handler> <acl not-listed="permit|deny|parent">...</acl> </file> ... </directory> ... <vhost> <names>hostname[123]*pattern-?</names> <names>one?more</names> ... <ports>N1,N2-N3,N4</ports> <SSL-certificate-file>filename</SSL-certificate-file> <SSL-key-file>filename</SSL-key-file> <SSL-key-password>secret</SSL-key-password> <SSL-min-version>none|SSLv3|TLSv1|TLSv1.1|TLSv1.2|TLSv1.3</SSL-min-version> <SSL-cipher>cipher list</SSL-cipher> <SSL-cipher-TLSv1.3>cipher suite</SSL-cipher-TLSv1.3> <document-root>directory/path</document-root> <alias script="1|0" uri-path="/path/">local/path</alias> .... <redirect type="301|302|303|307|308|permanent|temporary" uri-path="/path/" full-path="0|1">local/path</redirect> ... <directory>...</directory> ... </vhost> ... </module-HTTP>
В узле host
указываются порты для протокола HTTP (например, стандартный - 80)
без SSL и для HTTPS
(стандартный - 443) с SSL. Как и в других частях конфигурации,
возможно указание нескольких узлов host с разными
списками портов, ключами, сертификатами и ACL.
Ограничение числа полей HTTP-запроса. По-умолчанию:
100.
Ограничение размера строки
HTTP-запроса. По-умолчанию: 8 Kb.
Ограничение размера поля
заголовка HTTP-запроса. По-умолчанию: 8
Kb.
Допустимый размер тела
HTTP-запроса. Значение 0 означает отсутствие
ограничения. По-умолчанию: 1 Gb.
Связывает имя заданное пользователем в атрибуте name с информацией о сервере FastCGI.
Обязательный узел server описывает
адрес и порт по которым нужно подключаться к серверу FastCGI. Если
порт не указан, значение узла server
рассматривается как имя локального сокета. Необязательный узел
start задаёт имя исполняемого файла с
параметрами который будет запущен при запуске сервера
Manjary и будет запускаться
автоматически если процесс завершился.
В Windows до
версии 10 локальные именованные сокеты не поддерживаются.
Допускается указание нескольких узлов server для распределения нагрузки между
процессами которые принимают соединения на разных портах.
Указание более одного узла server может быть полезным, например, для
FastCGI-сервера php-cgi,
который не поддерживает одновременную обработку нескольких
запросов. Однако, для для приложения fcgimm являющегося частью
Manjary должен быть указан только
один узел server, т.к. fcgimm не предполагает параллельную
работу нескольких экземпляров и может одновременно обрабатывать
множество запросов WEB-сервера.
Описание локальной директории путь к которой задан в
атрибуте path. Если путь не задан, то
данный узел описывает директорию которая является корневой для
всех остальных. Когда узел узел directory расположен внутри vhost, то путь может начинаться с символа
звёздочка (*) которая при чтении конфигурации
будет заменена на значение узла document-root.
Указывает что нужно возвращать при запросе URI
который ссылается на данную директорию. Поведение
определяется атрибутом type:
parent|deny|auto[,list]|redirect[,list]|list.
По-умолчанию: parent.
parent Использовать
поведение заданное для родительской директории.
deny Вернуть ошибку
403 Forbidden.
auto Значение узла
рассматривается как список имён индексных файлов
разделённых пробелами. Если в директории находится
один из этих файлов, его содержимое будет возвращено в
качестве ответа на запрос.
redirect Как auto, но ответом будет не
содержимое файла, а перенаправление на него.
list В качестве
ответа возвращается страница HTML со списком файлов и
директорий содержащихся в данной директории.
auto,list (без
пробелов до и после ',') Как auto, но если директория не
содержит индексных файлов - как list.
redirect,list (без
пробелов до и после ',') Как redirect, но если директория не
содержит индексных файлов - как list.
Задаёт соответствие расширений файлов и типов mime.
Если указан атрибут file,
список соответствий будет загружен из него (см. файл
mime.types). Вложенные узлы ext дополняют список. При поиске
соответствий директории будут просматриваться от заданной
к корневой, пока расширение файла не будет найдено в
настройках для одной из директорий.
Список адресов клиентов
ограничивающий доступ к директории. Атрибут not-listed задаёт поведение если
адрес не найден: permit|deny|parent. По-умолчанию: parent - проверять через список для
родительской директории.
Указывает как нужно обрабатывать файлы, имена
которых соответствуют одной из масок в узлах match. Если параметр-переключатель must-exist установлен в 0, то обработчик для запрошенного
файла будет вызван даже если файл не
существует.
Список шаблонов имён файлов для
которых будет применяться данный узел file. Шаблоны могут быть
заданы в разных узлах match, либо в одном с
разделителем "|".
Необязательный узел. Устанавливает или
заменяет значение переменной окружения которая
передаётся обработчику указанному в узле handler. Если имя переменной
окружения устанавливаемой веб-сервером совпадает со
значением параметра name, её значение заменяется
на значение узла set-env.
Если переменной с указанным именем нет - она будет
добавлена в список переменных окружения.
Необязательный параметр value позволяет изменять
значение переменной если её предыдущее значение
совпадает с указанным шаблоном. При этом
появляется возможность в значении узла вставлять
части предыдущего значения соответствующие символам
шаблона. Для этого используются последовательности
"${n}", где n - номер совпадения
начиная с 1. Например, узел:
<set-env /${1}name=REDIRECT_URL value=/webmail/*></set-env>
переопределит переменную REDIRECT_URL если её предыдущее значение начиналось с "/webmail/". Новым значением будет строка начинающаяся со слэша и дополненная частью строки старого значения, идущей после "/webmail/".
Последовательность "${0}" в значении узла будет заменена на полное предыдущее значение переменной окружения.
По-умолчанию сравнение шаблона в параметре value со значением
переменной регистронезависимое. Изменить это можно
задав параметр-переключатель: cs=1.
Если узел задан - указывает
программу-обработчик которой в качестве аргумента
будет передано полное локальное имя запрошенного
файла. Результат работы программы выведенный на
консоль будет возвращён в качестве ответа сервера.
Значением узла может быть путь URI к программе CGI,
путь должен быть описан через alias
с параметром script=1. Если значение узла
начинается с символа "$", оно рассматривается (без
"$") как имя для сервера FastCGI заданное атрибутом
name узла XML fastcgi. Значение
начинающееся с символа "@" рассматривается (без "@")
как локальное имя выполняемого файла, например
@C:\PHP\php-cgi.exe.
Список адресов
клиентов ограничивающий доступ к файлам. Атрибут
not-listed задаёт
поведение если адрес не найден: permit|deny|parent.
По-умолчанию: parent -
проверять через список доступа для
директории.
Деревья XML vhost описывают
виртуальные хосты. При клиентском запросе ресурса с сервера,
просматривается список виртуальных хостов в том порядке как они
заданы в конфигурации, пока не будет найдено соответствие по имени
хоста и/или по номеру порта. Далее, запрос обрабатывается в рамках
настроек найденного хоста.
Шаблоны имён хоста. По-умолчанию хосту соответствует любое имя.
Список портов хоста разделённых запятыми. Элементами
списка могут быть номера портов или диапазоны номеров,
например 80-88. Списком определяются порты из множества
заданного в host. По-умолчанию
хосту соответствует любой порт.
Указанные узлы SSL-...
могут быть определены для конкретного виртуального хоста.
Это необходимо когда имеется несколько хостов с разными
именами и для каждого должны быть заданы свои приватный
ключ и сертификат.
Файлы в формате PEM серверного сертификата и приватного ключа соответственно. Эти два узла должны быть обязательно заданы для использования шифрованных соединений как на потртах SSL, так и для TLS.
Указывает, если требуется, пароль которым
защищён приватный ключ заданный узлом SSL-key-file.
Минимальная допустимая версия протокола SSL.
Набор шифров использующихся для версий SSL до TLSv1.2 включительно. Точный набор поддерживаемых наборов шифров определяется версией OpenSSL.
Набор шифров использующихся для версии SSL TLSv1.3.
Локальный путь к корневой директории хоста.
Псевдоним для элемента пути URI. Значение узла -
путь к локальной директории. Обязательный атрибут uri-path указывает имя элемента
пути URI. Если для необязательного атрибута script установлено значение 1, подразумевается что директория
указанная в значении узла содержит программы CGI.
Перенаправление: если запрошенный путь URI
начинается со строки заданной атрибутом uri-path, то будет возвращён ответ
перенаправляющий клиента на путь, начальная часть которого
(совпадающая с uri-path)
заменена значением узла. Если указан атрибут full-path со значением 1, то перенаправление используется
только если запрошенный путь полностью совпадает со
значением uri-path. Атрибут
type определяет какой код
ответа HTML будет использован для перенаправления:
301|302|303|307|308|permanent|temporary. Ключевое слово
permanent соответствует 301, а
temporary - 302.
Настройки директорий в рамках конкретного хоста.