Бегло пробежавшись по этому конфигу понимаешь, почему lighttpd лучше использовать как спаунер cgi процессов или как бэкэнд сервер (для fcgi приложений) обработка входящих url'ов - это не самая сильная сторона этого сервера, несмотря на всю вариативность, гибкостью (как тот же nginx) его разборщик пока не обладает, кроме того реализация виртуальных хостов - это тоже не самая сильная сторона lighttpd, единственное что он хорошо умеет - это cgi и fcgi.

################################    LIGHTTPD.CONF, FRONTEND ##################################

server.username            = "apache"
server.groupname           = "apache"

server.port                = 80

# чуть-чуть вкусностей, чтобы серверу веселей было работать под нагрузкой
server.max-keep-alive-requests = 512
server.max-keep-alive-idle = 30
server.max-read-idle = 60
server.max-write-idle = 360
server.event-handler = "linux-sysepoll"
server.network-backend = "writev" # используем его ибо всё равно сервим большие файлы
server.max-fds = 65535

# загружаемые модули - только то, что необходимо
server.modules              = (
#                               "mod_rewrite",
#                               "mod_redirect",
                                "mod_alias",
                                "mod_access",
#                               "mod_trigger_b4_dl",
#                               "mod_auth",
#                               "mod_status",
                                "mod_setenv",
#                               "mod_fastcgi",
                                "mod_proxy",
#                               "mod_simple_vhost",
#                               "mod_evhost",
#                               "mod_userdir",
#                               "mod_cgi",
                                "mod_compress",
#                               "mod_ssi",
#                               "mod_usertrack",
                                "mod_expire",
#                               "mod_secdownload",
#                               "mod_rrdtool",
                                "mod_accesslog" )

server.errorlog             = "/var/log/lighttpd/error.log"
accesslog.filename          = "/var/log/lighttpd/access.log"

## enable debugging
#debug.log-request-header   = "enable"
#debug.log-response-header  = "enable"
#debug.log-request-handling = "enable"
#debug.log-file-not-found   = "enable"

server.pid-file            = "/var/run/lighttpd.pid"

server.document-root        = "/var/www/html"

index-file.names            = ( "index.php", "index.html", "index.htm", "default.htm", "index.pl" )
static-file.exclude-extensions = ( ".php", ".pl", ".cgi", ".px", ".sh" )

mimetype.assign             = (
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "application/ogg",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jar"          =>      "application/x-java-archive",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".ico"          =>      "image/x-icon",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".cpp"          =>      "text/plain",
  ".log"          =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
  # default mime type
  ""              =>      "application/octet-stream",
)

#cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
#                               ".cgi" => "/usr/bin/perl" )

#fastcgi.server = (  ".php" =>
#               (( "host" => "127.0.0.1",
#                   "port" => 9000,
#                       "bin-path" => "/usr/bin/php-cgi"
#                       )),
#)

compress.filetype           = ("text/plain", "text/html", "text/xml", "image/x-icon")
compress.cache-dir          = "/var/www/cache/"

url.access-deny             = ( "~", ".inc" )
$HTTP["url"] =~ "\.pdf$" {
  server.range-requests = "disable"
}
#$HTTP["url"] =~ "\.php$" {
#     setenv.add-response-header  = ( "Content-Encoding" => "gzip")
#}

$HTTP["url"] =~ "\.(jpg|gif|png|css|js|ico|html|htm|txt|doc)$" { expire.url = ( "" => "access 10 days" ) }

# вот таким незамысловатым образом мы обходим баг, когда url, который пришёл без индексного файла (просто заканчивается слэшем) не отправляется на бэкэнд, статику, понятно сервим с фронта...
$HTTP["url"] =~ "^/(drupal|joomla|bin)" {
    $HTTP["url"] =~ "\.(jpg|gif|png|css|js|ico|html|htm|txt|doc)$" {
    expire.url = ( "" => "access 10 days" )
    }
    $HTTP["url"] !~ "\.(jpg|gif|png|css|js|ico|html|htm|txt|doc)$" {
    proxy.server = (
    "" => (
        "artofmission" => (
        "host" => "10.32.2.220",
            "port" => 80
            )
    )
    )
    }
}

$HTTP["url"] =~ "/(mrepo|distr)" {
     dir-listing.activate = "enable"
     dir-listing.encoding = "utf-8"
}

alias.url = (
              "/manual" => "/var/www/manual",
              "/icons"  => "/var/www/icons",
              "/mrepo"  => "/var/www/mrepo",
              "/distr"  => "/var/www/distr",
              "/drupal" => "/var/www/drupal",
              "/joomla" => "/var/www/joomla"
)

Отдельно замечу, что lighttpd ответы на проксированные запросы отдаёт клиенту, только когда они полностью придут с бэкэнда, кроме того, до момента отдачи, ответ хранится в оперативной памяти, поэтому нежелательно проксировать запросы например на iso файлы, может просто не хватить оперативки на фронтэнде.

А это конфиг бэкэнда (он расположен на другой тачке), поскольку большого смысла городить что-то сложное не было, то конфиг совсем простой

################################    LIGHTTPD.CONF, BACKEND  ##################################
server.username            = "apache"
server.groupname           = "apache"

server.port                = 80

# чуть-чуть вкусностей, чтобы серверу веселей было работать под нагрузкой
server.max-keep-alive-requests = 64
server.max-keep-alive-idle = 30
server.max-read-idle = 60
server.max-write-idle = 360
server.event-handler = "linux-sysepoll"
server.network-backend = "writev"
server.max-fds = 65535

server.modules              = (
                                "mod_alias",
                                "mod_access",
                                "mod_setenv",
                                "mod_fastcgi",
                                "mod_cgi",
                                "mod_expire",
                                "mod_accesslog" )

server.errorlog             = "/var/log/lighttpd/error.log"
accesslog.filename          = "/var/log/lighttpd/access.log"

## enable debugging
#debug.log-request-header   = "enable"
#debug.log-response-header  = "enable"
#debug.log-request-handling = "enable"
#debug.log-file-not-found   = "enable"

server.pid-file            = "/var/run/lighttpd.pid"

server.document-root        = "/var/www/html"

index-file.names            = ( "index.php", "index.pl", "index.cgi" )
static-file.exclude-extensions = ( ".php", ".pl", ".px", ".cgi", ".sh" )
mimetype.assign             = (
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "application/ogg",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jar"          =>      "application/x-java-archive",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".cpp"          =>      "text/plain",
  ".log"          =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
  # default mime type
  ""              =>      "application/octet-stream",
)

fastcgi.server = (  ".php" =>
                           (( "host" => "127.0.0.1",
                               "port" => 9000,
                               "bin-path" => "/usr/bin/php-cgi"
                           )),
)

cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
                               ".px"  => "/usr/bin/perl",
                               ".cgi" => "/usr/bin/perl",
                               ".sh"  => "/bin/bash" )

url.access-deny             = ( "~", ".inc" )

alias.url = ( "/joomla" => "/var/www/joomla",
              "/bin"    => "/var/www/bin",
              "/drupal" => "/var/www/drupal"
)

Отдельно стоит отметить что корень веб-сайта цепляется по nfs, поэтому sendfile не используется, он плохо работает с этой fs.

Next Post