# Lighttpd Server Configs | MIT License # https://github.com/h5bp/server-configs-lighttpd # http://redmine.lighttpd.net/projects/lighttpd/wiki # Run as an unprivileged user server.username = "www" server.groupname = "www" # Help the rc.scripts server.pid-file = "/var/run/lighttpd/lighttpd.pid" # A static document-root. For virtual hosting take a look at the # mod_simple_vhost module. server.document-root = "/var/www/sites/go/here/" # Avoid revealing the server name and version number server.tag = "" # Disable directory listing server.dir-listing = "disable" # Modules to load # at least mod_access and mod_accesslog should be loaded # mod_expire should go above mod_compress (and mod_fcgi if you use it) # otherwise expire headers will not be applied to compressed documents. server.modules = ( "mod_access", "mod_accesslog", "mod_redirect", "mod_expire", "mod_compress", "mod_setenv" ) # Sent Response Headers # opt-in to the future - remove meta tag from page setenv.add-response-header = ( "X-UA-Compatible" => "IE=edge" ) # File uploads # Make sure this folder exists and is writable to server.username server.upload-dirs = ( "/tmp/lighttpd/uploads" ) # Where to send error-messages to server.errorlog = "/var/log/lighttpd/error.log" # Accesslog module accesslog.filename = "/var/log/lighttpd/access.log" # Compression # Make sure this folder exists and is writable to server.username compress.cache-dir = "/tmp/lighttpd/compress/" compress.filetype = ( "application/atom+xml", "application/javascript", "application/json", "application/ld+json", "application/manifest+json", "application/rdf+xml", "application/rss+xml", "application/schema+json", "application/vnd.geo+json", "application/vnd.ms-fontobject", "application/x-font-ttf", "application/x-javascript", "application/x-web-app-manifest+json", "application/xhtml+xml", "application/xml", "font/eot", "font/opentype", "image/bmp", "image/svg+xml", "image/vnd.microsoft.icon", "image/x-icon", "text/cache-manifest", "text/css", "text/html", "text/javascript", "text/plain", "text/vcard", "text/vnd.rim.location.xloc", "text/vtt", "text/x-component", "text/x-cross-domain-policy", "text/xml", ) # Files to check for if .../ is requested index-file.names = ( "index.html", "index.htm", ) # Set the event-handler (read the performance section in the manual) # server.event-handler = "freebsd-kqueue" # needed on OS X # Serve resources with the proper media types (f.k.a. MIME types). # https://www.iana.org/assignments/media-types/media-types.xhtml mimetype.assign = ( # Data interchange ".atom" => "application/atom+xml", ".geojson" => "application/vnd.geo+json", ".json" => "application/json", ".jsonld" => "application/ld+json", ".map" => "application/json", ".rdf" => "application/xml", ".rss" => "application/rss+xml", ".topojson" => "application/json", ".xml" => "application/xml", # JavaScript # Normalize to standard type. # https://tools.ietf.org/html/rfc4329#section-7.2 ".js" => "application/javascript", # Manifest files ".webapp" => "application/x-web-app-manifest+json", ".appcache" => "text/cache-manifest", ".webmanifest" => "application/manifest+json", # Media files ".avi" => "video/x-msvideo", ".bmp" => "image/bmp", ".f4a" => "audio/mp4", ".f4b" => "audio/mp4", ".f4p" => "video/mp4", ".f4v" => "video/mp4", ".flv" => "video/x-flv", ".gif" => "image/gif", ".jpeg" => "image/jpeg", ".jpg" => "image/jpeg", ".m4a" => "audio/mp4", ".m4v" => "video/mp4", ".mov" => "video/quicktime", ".mp3" => "audio/mpeg", ".mp4" => "video/mp4", ".mpeg" => "video/mpeg", ".mpg" => "video/mpeg", ".oga" => "audio/ogg", ".ogg" => "audio/ogg", ".ogv" => "video/ogg", ".opus" => "audio/ogg", ".png" => "image/png", ".svg" => "image/svg+xml", ".svgz" => "image/svg+xml", ".wav" => "audio/x-wav", ".wax" => "audio/x-ms-wax", ".webm" => "video/webm", ".webp" => "image/webp", ".wma" => "audio/x-ms-wma", ".wmv" => "video/x-ms-wmv", ".xbm" => "image/x-xbitmap", # Serving `.ico` image files with a different media type # prevents Internet Explorer from displaying then as images: # https://github.com/h5bp/html5-boilerplate/commit/37b5fec090d00f38de64b591bcddcb205aadf8ee ".cur" => "image/x-icon", ".ico" => "image/x-icon", # Web fonts ".woff" => "application/font-woff", ".woff2" => "application/font-woff2", ".eot" => "application/vnd.ms-fontobject", # Browsers usually ignore the font media types and simply sniff # the bytes to figure out the font type. # https://mimesniff.spec.whatwg.org/#matching-a-font-type-pattern # # However, Blink and WebKit based browsers will show a warning # in the console if the following font types are served with any # other media types. ".otf" => "font/opentype", ".ttc" => "application/x-font-ttf", ".ttf" => "application/x-font-ttf", # Other ".bbaw" => "application/x-bb-appworld", ".bz2" => "application/x-bzip", ".conf" => "text/plain", ".crx" => "application/x-chrome-extension", ".css" => "text/css", ".gz" => "application/x-gzip", ".htc" => "text/x-component", ".htm" => "text/html", ".html" => "text/html", ".jar" => "application/x-java-archive", ".log" => "text/plain", ".oex" => "application/x-opera-extension", ".pac" => "application/x-ns-proxy-autoconfig", ".pdf" => "application/pdf", ".ps" => "application/postscript", ".qt" => "video/quicktime", ".safariextz" => "application/octet-stream", ".sig" => "application/pgp-signature", ".spl" => "application/futuresplash", ".swf" => "application/x-shockwave-flash", ".tar" => "application/x-tar", ".tar.bz2" => "application/x-bzip-compressed-tar", ".tar.gz" => "application/x-tgz", ".tbz" => "application/x-bzip-compressed-tar", ".text" => "text/plain", ".tgz" => "application/x-tgz", ".torrent" => "application/x-bittorrent", ".txt" => "text/plain", ".vcard" => "text/vcard", ".vcf" => "text/vcard", ".vtt" => "text/vtt", ".xloc" => "text/vnd.rim.location.xloc", ".xpi" => "application/x-xpinstall", ".xpm" => "image/x-xpixmap", ".xwd" => "image/x-xwindowdump", ".zip" => "application/zip", # Default MIME type "" => "application/octet-stream" ) # Block access to backup and source files. url.access-deny = ( "~", ".inc" ) $HTTP["url"] =~ "\.pdf$" { server.range-requests = "disable" } # Extensions that should not be handle via static-file transfer. # .php, .pl, .fcgi are most often handled by mod_fastcgi or mod_cgi static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" ) # Bind to all IPs, or change to a specific IP. server.bind = "0.0.0.0" # Expires headers (for better cache control) # The following expires headers are set pretty far in the future. If you don't # control versioning with filename-based cache busting, consider lowering the # cache time for resources like CSS and JS to something like 1 week. # CSS $HTTP["url"] =~ ".css" { expire.url = ( "" => "access plus 1 years" ) } # Data interchange $HTTP["url"] =~ ".(json|xml)" { expire.url = ( "" => "access plus 0 seconds" ) } # Favicon $HTTP["url"] =~ ".ico" { expire.url = ( "" => "access plus 7 days" ) } # HTML components (HTCs) $HTTP["url"] =~ ".htc" { expire.url = ( "" => "access plus 1 months" ) } # HTML $HTTP["url"] =~ ".html" { expire.url = ( "" => "access plus 0 seconds" ) } # JavaScript $HTTP["url"] =~ ".js" { expire.url = ( "" => "access plus 1 years" ) } # Manifest files $HTTP["url"] =~ ".(appcache|manifest|webapp)" { expire.url = ( "" => "access plus 0 seconds" ) } $HTTP["url"] =~ ".webmanifest" { expire.url = ( "" => "access plus 1 week" ) } # Media $HTTP["url"] =~ ".(gif|jpg|jpeg|png|m4a|f4a|f4b|oga|ogg|webm)" { expire.url = ( "" => "access plus 1 months" ) } # Web feeds $HTTP["url"] =~ ".(atom|rss)" { expire.url = ( "" => "access plus 1 hours" ) } # Web fonts $HTTP["url"] =~ ".(eot|otf|svg|svgz|ttf|ttc|woff)" { expire.url = ( "" => "access plus 1 months" ) } # Default expire.url = ( "" => "access plus 1 months" )