Файл конфигурации для основного модуля.
БНФ нотации базовый синтаксис
выбор | 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