БНФ нотации базовый синтаксис

выбор 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 скрипта, который будет обслуживаться только в том случае, если такой файл существует в локальной файловой системе.

<оператор> является одним из:

OperatorValue
== совпадение строк
!= строка не совпадает
=~ стиле языка 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