Файл конфигурации для основного модуля.
БНФ нотации базовый синтаксис
| выбор | NAME = VALUE |
| соединять | NAME += VALUE |
| заменять | NAME := VALUE (заменить/перезаписать ранее значение) (с 1.4.46; экспериментальные) |
| NAME | modulename.key |
| VALUE | ( <string> | <integer> | <boolean> | <array> | VALUE [ + VALUE ]*) |
| <string> | "text" |
| <integer> | digit* |
| <boolean> | ( "enable" | "disable" ) |
| <array> | "(" [ <string> "=>" ] <value> [, [ <string> "=>" ] <value> ]* ")" |
| INCLUDE | "include" VALUE |
| INCLUDE_SHELL | "include_shell" STRING_VALUE |
Образец
# default document-root server.document-root = "/var/www/example.org/pages/" # TCP port server.port = 80 # выбор модулей server.modules = ( "mod_access", "mod_rewrite" ) # переменные, вычисляемые при чтении конфигурации. var.mymodule = "foo" server.modules += ( "mod_" + var.mymodule ) # var.PID инициализируется pid lighttpd перед разбором конфигурации # включить, относительно dirname основного конфигурационного файла include "mime.types.conf" # Чтение конфигурации из выходных данных команды include_shell "/usr/local/bin/confmimetype /etc/mime.types"
Условная Конфигурация
Большинство параметров можно настроить условно, используя следующий синтаксис (включая вложенность).
<поле> <оператор> <значение> {
...
<поле> <оператор> <значение> {
... вложенность: совпадение только при совпадении с родителем
}
}
else <поле> <оператор> <значение> {
... блок "else if"
}
else { # (с 1.4.46)
... блок "else"
}
где <поле> - одно из следующих значений:
| Имя поля | Описание |
|---|---|
| $REQUEST_HEADER["..."] | (начиная с 1.4.46) совпадение с произвольным заголовком HTTP-запроса (без учета регистра) |
| $HTTP["request-method"] | (Представлено в версии 1.4.19) соответствует методу запроса. |
| $HTTP["scheme"] | (Представлено в версии 1.4.19) соответствует схеме, используемой входящим соединением. Это либо «http», либо «https». |
| $HTTP["host"] | совпадение с host |
| $HTTP["url"] | совпадение по пути URL (не включая хост или строку запроса) |
| $HTTP["querystring"] | соответствует строке запроса, например, после? в этом типе url: index.php?module=images .. |
| $HTTP["remoteip"] | совпадение на удаленном IP или удаленной сети (предупреждение: не работает с включенным IPv6) |
| $HTTP["cookie"] | (добавлено $ REQUEST_HEADER ["Cookie"] с 1.4.46) совпадение с Cookie |
| $HTTP["useragent"] | (добавлено $ REQUEST_HEADER ["User-Agent"] с 1.4.46) соответствует User-Agent |
| $HTTP["language"] | (добавлено $ REQUEST_HEADER ["Accept-Language"] с 1.4.46) (с 1.4.21) соответствует Accept-Language |
| $HTTP["referer"] | (добавлено $ REQUEST_HEADER ["Referer"] с 1.4.46) совпадение на Referer |
| $SERVER["socket"] | совпадать на сокете. Поддерживается только равное совпадение (==). Значение должно быть в формате «ip: порт», где ip - это IP-адрес (необязательно) и номер порта. Если IP-адрес опущен, используйте INADDR_ANY (0.0.0.0), если только server.use-ipv6 = "enable" внутри этого блока, в этом случае используйте in6addr_any ([::]). Установка этой директивы также привязывает демона к этому сокету. Используйте это, если вы хотите сделать виртуальные хосты на основе IP / порта. |
| $PHYSICAL["path"] | (Введено в версии 1.5.0 (Примечание: оставлено; никогда не выпускалось))-совпадение на сопоставленном физическом пути файла/CGI скрипта, который будет подан. |
| $PHYSICAL["existing-path"] | (Введено в версии 1.5.0 (Примечание: оставлено; никогда не выпускалось))-совпадение на сопоставленном физическом пути файла/CGI скрипта, который будет обслуживаться только в том случае, если такой файл существует в локальной файловой системе. |
<оператор> является одним из:
| Operator | Value |
|---|---|
| == | совпадение строк |
| != | строка не совпадает |
| =~ | стиле языка Perl регулярное выражение |
| !~ | регулярное выражение стиля perl не совпадает |
и <значение> - это строка литералов в кавычках ("") или регулярное выражение.
Пример:
# отключить каталог-листинги для /download/*
dir-listing.activate = "enable"
$HTTP["url"] =~ "^/download/" {
dir-listing.activate = "disable"
}
# обрабатывать виртуальный хостинг
# сопоставлять все домены домена верхнего уровня с одним корневым каталогом документов
$HTTP["host"] =~ "(^|\.)example\.org$" {
server.document-root = "/var/www/htdocs/example.org/pages/"
}
# несколько сокетов
$SERVER["socket"] == "127.0.0.1:81" {
server.document-root = "..."
}
$SERVER["socket"] == "127.0.0.1:443" {
ssl.pemfile = "/var/www/certs/localhost.pem"
ssl.engine = "enable"
server.document-root = "/var/www/htdocs/secure.example.org/pages/"
}
# запретить доступ для всех роботов Google
$HTTP["useragent"] =~ "Google" {
url.access-deny = ( "" )
}
# запретить доступ для всех похитителей изображений (анти-хотлинкинг для изображений)
$HTTP["referer"] !~ "^($|http://www\.example\.org)" {
url.access-deny = ( ".jpg", ".jpeg", ".png" )
}
# запретить доступ к www.example.org всем пользователям,
# не входящим в сеть 10.0.0.0/8
$HTTP["host"] == "www.example.org" {
$HTTP["remoteip"] != "10.0.0.0/8" {
url.access-deny = ( "" )
}
}
# Разрешить только 200.19.15.5 и 210.45.2.7
# иметь доступ к www.example.org/admin/
$HTTP["host"] == "www.example.org" {
#!~ is a perl style regular expression not match
$HTTP["remoteip"] !~ "^(200\.19\.1\.5|210\.45\.2\.7)$" {
$HTTP["url"] =~ "^/admin/" {
url.access-deny = ( "" )
}
}
}
Устранение неисправностей
Если вы не используете порт по умолчанию, к $HTTP ["host"] будет добавлен порт, поэтому регулярные выражения, заканчивающиеся на $ (без учета порта), не будут совпадать.
Для сопоставления с портом или без него измените
"(^|\.)example\.org$"
к
"(^|\.)example\.org(\:[0-9]*)?$"
Обратите внимание, что некоторые более ранние версии lighttpd не поддерживают полный синтаксис файла конфигурации, указанный здесь. В частности, некоторые версии не поддерживают "var." переменные, добавляемые с помощью"+=", вложенные условные выражения или блоки" else". Имена некоторых параметров (например, "server.dir-listing") также изменились (т. е. на "dir-listing.activate") между версиями документации lighttpd.
Если у вас возникли проблемы с настройкой lighttpd, рассмотрите возможность использования параметров"- t "или"- p " для отладки конфигурации. Обратите внимание, что некоторые более ранние версии lighttpd не поддерживают опции "-t" или "-p".
Расширенное использование
Проверьте блог: http://blog.lighttpd.net/articles/2005/05/07/advanced-configuration-in-up-upcoming-1-4-x
Использовать переменные
Вы можете установить свои собственные переменные в конфигурации для упрощения конфигурации.
var.basedir = "/home/www/servers/"
$HTTP["host"] == "www.example.org" {
server.name = "www.example.org"
include "incl-base.conf"
}
В incl-base.conf:
server.document-root = basedir + server.name + "/pages/" accesslog.filename = basedir + server.name + "/logs/access.log"
Можно также использовать переменные среды или переменные по умолчанию var.PID и var.CWD:
var.basedir = env.LIGHTTPDBASE
$HTTP["host"] == "www.example.org" {
server.name = "www.example.org"
include "incl-base.conf"
include "incl-fastcgi.conf"
}
В incl-fastcgi.conf:
fastcgi.server = ( ... => ((
"socket" => basedir + server.name + "/tmp/fastcgi-" + PID + ".sock"
)) )
Или как скрипт lighttpd для rails:
var.basedir = var.CWD server.document-root = basedir + "/public/"
Некоторые полезные вещи, которые нельзя сделать в конфигурации lighttpd (нужно создать скрипт на реальном языке программирования и потом использовать include_shell):
# тестирование, если переменная была установлена, невозможно
var.not_sure_if_it_exists == undefined { ... установить значение по умолчанию ... }
# удаление из массивов невозможно
server.modules -= ( "mod_idontwantyou" )
Глобальный контекст
global {
...
}
Он не нужен в основном файле конфигурации.
Но у вас могут возникнуть трудности с настройкой серверной конфигурации внутри включенного файла из условия.
пример
В lighttpd.conf:
server.modules = ()
$HTTP["host"] == "www.example.org" {
include "incl-php.conf"
}
В incl-php.conf:
global {
server.modules += ("mod_fastcgi")
static-file.exclude-extensions += (".php")
}
fastcgi.server = "..."
Опции
Все параметры конфигурации можно найти по адресу: Configuration Options