You are browsing a read-only backup copy of Wikitech. The live site can be found at wikitech.wikimedia.org
Help:Toolforge/Web/Lighttpd: Difference between revisions
imported>Legoktm (+php7.2) |
imported>Krinkle |
||
(17 intermediate revisions by 9 users not shown) | |||
Line 7: | Line 7: | ||
* <code>webservice --backend=gridengine lighttpd-plain start|stop|restart</code> | * <code>webservice --backend=gridengine lighttpd-plain start|stop|restart</code> | ||
</includeonly> | </includeonly> | ||
== Overview == | |||
'''[[w:Lighttpd|Lighttpd]]''' is the HTTP server used by both the <code>lighttpd</code> and <code>lighttpd-plain</code> types supported by <code>webservice</code>. These types are supported by the Grid Engine backend. On the Kubernetes backend, the <code>php7.4</code> type (and other PHP types) also uses lighttpd. | |||
* The document root is <code>$HOME/public_html</code>. | |||
** See [[#Changing_the_document_root|Changing the document root]] for some ideas on how to change that. | |||
* Error logs from the lighttpd process are stored in <code>$HOME/error.log</code> | * Error logs from the lighttpd process are stored in <code>$HOME/error.log</code> | ||
* PHP scripts are automatically run using a [[w:FastCGI|FastCGI]] helper process. | * PHP scripts are automatically run using a [[w:FastCGI|FastCGI]] helper process. | ||
Line 14: | Line 18: | ||
* Everything runs as the tool user, regardless of file ownership. | * Everything runs as the tool user, regardless of file ownership. | ||
The web server reads any configuration in <code>$HOME/.lighttpd.conf</code> | The web server reads any configuration in <code>$HOME/.lighttpd.conf</code> and merges it with the default configuration. Most tools will not need custom configuration. | ||
<includeonly>See [[Help: | <includeonly>See [[Help:Toolforge/Web/Lighttpd|our lighttpd help page]] for more detailed information.</includeonly><noinclude><!-- the rest of the page should not be included in [[Help:Toolforge/Web]]. --> | ||
[[File:Ambox_notice.png|25px]] Sometimes merge fails if an option is already set in the default configuration. When this happens, try using <code>option += value</code> instead of <code>option = value</code>. | [[File:Ambox_notice.png|25px]] Sometimes merge fails if an option is already set in the default configuration. When this happens, try using <code>option += value</code> instead of <code>option = value</code>. Some settings cannot be changed, such as <code>fastcgi.server += ( ".php" =>...</code>. | ||
== Default configuration == | == Default configuration == | ||
This is the default (if you don't specify any other/additional settings in your tool's .lighttpd.conf) | This is the default (if you don't specify any other/additional settings in your tool's .lighttpd.conf) | ||
{{Collapse top|Default lighttpd configuration}} | {{Collapse top|Default lighttpd configuration}} | ||
< | <syntaxhighlight lang="lighttpd"> | ||
server.modules = ( | server.modules = ( | ||
"mod_setenv", | "mod_setenv", | ||
Line 49: | Line 53: | ||
server.event-handler = "linux-sysepoll" | server.event-handler = "linux-sysepoll" | ||
ssl.engine = "disable" | ssl.engine = "disable" | ||
index-file.names = ( "index.php", "index.html", "index.htm" ) | index-file.names = ( "index.php", "index.html", "index.htm" ) | ||
Line 59: | Line 61: | ||
accesslog.use-syslog = "disable" | accesslog.use-syslog = "disable" | ||
# no longer enabled by default (T233347) | |||
# accesslog.filename = "{home}/access.log" | |||
mimetype.assign = ( | |||
".pcf.Z" => "application/x-font-pcf", | |||
".tar.bz2" => "application/x-gtar-compressed", | |||
".tar.gz" => "application/x-gtar-compressed", | |||
".ez" => "application/andrew-inset", | |||
".anx" => "application/annodex", | |||
".atom" => "application/atom+xml", | |||
".atomcat" => "application/atomcat+xml", | |||
".atomsrv" => "application/atomserv+xml", | |||
".lin" => "application/bbolin", | |||
".cu" => "application/cu-seeme", | |||
".davmount" => "application/davmount+xml", | |||
".dcm" => "application/dicom", | |||
".tsp" => "application/dsptype", | |||
".es" => "application/ecmascript", | |||
".pfr" => "application/font-tdpfr", | |||
".spl" => "application/futuresplash", | |||
".gz" => "application/gzip", | |||
".hta" => "application/hta", | |||
".jar" => "application/java-archive", | |||
".ser" => "application/java-serialized-object", | |||
".class" => "application/java-vm", | |||
".js" => "application/javascript; charset=utf-8", | |||
".json" => "application/json; charset=utf-8", | |||
".m3g" => "application/m3g", | |||
".hqx" => "application/mac-binhex40", | |||
".cpt" => "application/mac-compactpro", | |||
".nb" => "application/mathematica", | |||
".nbp" => "application/mathematica", | |||
".mbox" => "application/mbox", | |||
".mdb" => "application/msaccess", | |||
".doc" => "application/msword", | |||
".dot" => "application/msword", | |||
".mxf" => "application/mxf", | |||
".asn" => "application/octet-stream", | |||
".bin" => "application/octet-stream", | |||
".deploy" => "application/octet-stream", | |||
".ent" => "application/octet-stream", | |||
".msp" => "application/octet-stream", | |||
".msu" => "application/octet-stream", | |||
".oda" => "application/oda", | |||
".opf" => "application/oebps-package+xml", | |||
".ogx" => "application/ogg", | |||
".one" => "application/onenote", | |||
".onepkg" => "application/onenote", | |||
".onetmp" => "application/onenote", | |||
".onetoc2" => "application/onenote", | |||
".pdf" => "application/pdf", | |||
".pgp" => "application/pgp-encrypted", | |||
".key" => "application/pgp-keys", | |||
".sig" => "application/pgp-signature", | |||
".prf" => "application/pics-rules", | |||
".ai" => "application/postscript", | |||
".eps" => "application/postscript", | |||
".eps2" => "application/postscript", | |||
".eps3" => "application/postscript", | |||
".epsf" => "application/postscript", | |||
".epsi" => "application/postscript", | |||
".ps" => "application/postscript", | |||
".rar" => "application/rar", | |||
".rdf" => "application/rdf+xml", | |||
".rtf" => "application/rtf", | |||
".stl" => "application/sla", | |||
".smi" => "application/smil+xml", | |||
".smil" => "application/smil+xml", | |||
".xht" => "application/xhtml+xml", | |||
".xhtml" => "application/xhtml+xml", | |||
".xml" => "application/xml", | |||
".xsd" => "application/xml", | |||
".dtd" => "application/xml-dtd", | |||
".xsl" => "application/xslt+xml", | |||
".xslt" => "application/xslt+xml", | |||
".xspf" => "application/xspf+xml", | |||
".zip" => "application/zip", | |||
".apk" => "application/vnd.android.package-archive", | |||
".cdy" => "application/vnd.cinderella", | |||
".ddeb" => "application/vnd.debian.binary-package", | |||
".deb" => "application/vnd.debian.binary-package", | |||
".udeb" => "application/vnd.debian.binary-package", | |||
".sfd" => "application/vnd.font-fontforge-sfd", | |||
".kml" => "application/vnd.google-earth.kml+xml", | |||
".kmz" => "application/vnd.google-earth.kmz", | |||
".xul" => "application/vnd.mozilla.xul+xml", | |||
".xlb" => "application/vnd.ms-excel", | |||
".xls" => "application/vnd.ms-excel", | |||
".xlt" => "application/vnd.ms-excel", | |||
".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12", | |||
".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12", | |||
".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12", | |||
".xltm" => "application/vnd.ms-excel.template.macroEnabled.12", | |||
".eot" => "application/vnd.ms-fontobject", | |||
".thmx" => "application/vnd.ms-officetheme", | |||
".cat" => "application/vnd.ms-pki.seccat", | |||
".pps" => "application/vnd.ms-powerpoint", | |||
".ppt" => "application/vnd.ms-powerpoint", | |||
".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12", | |||
".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12", | |||
".sldm" => "application/vnd.ms-powerpoint.slide.macroEnabled.12", | |||
".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", | |||
".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12", | |||
".docm" => "application/vnd.ms-word.document.macroEnabled.12", | |||
".dotm" => "application/vnd.ms-word.template.macroEnabled.12", | |||
".odc" => "application/vnd.oasis.opendocument.chart", | |||
".odb" => "application/vnd.oasis.opendocument.database", | |||
".odf" => "application/vnd.oasis.opendocument.formula", | |||
".odg" => "application/vnd.oasis.opendocument.graphics", | |||
".otg" => "application/vnd.oasis.opendocument.graphics-template", | |||
".odi" => "application/vnd.oasis.opendocument.image", | |||
".odp" => "application/vnd.oasis.opendocument.presentation", | |||
".otp" => "application/vnd.oasis.opendocument.presentation-template", | |||
".ods" => "application/vnd.oasis.opendocument.spreadsheet", | |||
".ots" => "application/vnd.oasis.opendocument.spreadsheet-template", | |||
".odt" => "application/vnd.oasis.opendocument.text", | |||
".odm" => "application/vnd.oasis.opendocument.text-master", | |||
".ott" => "application/vnd.oasis.opendocument.text-template", | |||
".oth" => "application/vnd.oasis.opendocument.text-web", | |||
".cod" => "application/vnd.rim.cod", | |||
".mmf" => "application/vnd.smaf", | |||
".sdc" => "application/vnd.stardivision.calc", | |||
".sds" => "application/vnd.stardivision.chart", | |||
".sda" => "application/vnd.stardivision.draw", | |||
".sdd" => "application/vnd.stardivision.impress", | |||
".sdf" => "application/vnd.stardivision.math", | |||
".sdw" => "application/vnd.stardivision.writer", | |||
".sgl" => "application/vnd.stardivision.writer-global", | |||
".sxc" => "application/vnd.sun.xml.calc", | |||
".stc" => "application/vnd.sun.xml.calc.template", | |||
".sxd" => "application/vnd.sun.xml.draw", | |||
".std" => "application/vnd.sun.xml.draw.template", | |||
".sxi" => "application/vnd.sun.xml.impress", | |||
".sti" => "application/vnd.sun.xml.impress.template", | |||
".sxm" => "application/vnd.sun.xml.math", | |||
".sxw" => "application/vnd.sun.xml.writer", | |||
".sxg" => "application/vnd.sun.xml.writer.global", | |||
".stw" => "application/vnd.sun.xml.writer.template", | |||
".sis" => "application/vnd.symbian.install", | |||
".cap" => "application/vnd.tcpdump.pcap", | |||
".pcap" => "application/vnd.tcpdump.pcap", | |||
".vsd" => "application/vnd.visio", | |||
".vss" => "application/vnd.visio", | |||
".vst" => "application/vnd.visio", | |||
".vsw" => "application/vnd.visio", | |||
".wbxml" => "application/vnd.wap.wbxml", | |||
".wmlc" => "application/vnd.wap.wmlc", | |||
".wmlsc" => "application/vnd.wap.wmlscriptc", | |||
".wpd" => "application/vnd.wordperfect", | |||
".wp5" => "application/vnd.wordperfect5.1", | |||
".wk" => "application/x-123", | |||
".7z" => "application/x-7z-compressed", | |||
".abw" => "application/x-abiword", | |||
".dmg" => "application/x-apple-diskimage", | |||
".bcpio" => "application/x-bcpio", | |||
".torrent" => "application/x-bittorrent", | |||
".bz2" => "application/x-bzip", | |||
".cab" => "application/x-cab", | |||
".cbr" => "application/x-cbr", | |||
".cbz" => "application/x-cbz", | |||
".cda" => "application/x-cdf", | |||
".cdf" => "application/x-cdf", | |||
".vcd" => "application/x-cdlink", | |||
".pgn" => "application/x-chess-pgn", | |||
".mph" => "application/x-comsol", | |||
".cpio" => "application/x-cpio", | |||
".dcr" => "application/x-director", | |||
".dir" => "application/x-director", | |||
".dxr" => "application/x-director", | |||
".dms" => "application/x-dms", | |||
".wad" => "application/x-doom", | |||
".dvi" => "application/x-dvi", | |||
".gsf" => "application/x-font", | |||
".pfa" => "application/x-font", | |||
".pfb" => "application/x-font", | |||
".pcf" => "application/x-font-pcf", | |||
".mm" => "application/x-freemind", | |||
".gan" => "application/x-ganttproject", | |||
".gnumeric" => "application/x-gnumeric", | |||
".sgf" => "application/x-go-sgf", | |||
".gcf" => "application/x-graphing-calculator", | |||
".gtar" => "application/x-gtar", | |||
".taz" => "application/x-gtar-compressed", | |||
".tbz" => "application/x-gtar-compressed", | |||
".tgz" => "application/x-gtar-compressed", | |||
".hdf" => "application/x-hdf", | |||
".hwp" => "application/x-hwp", | |||
".ica" => "application/x-ica", | |||
".info" => "application/x-info", | |||
".ins" => "application/x-internet-signup", | |||
".isp" => "application/x-internet-signup", | |||
".iii" => "application/x-iphone", | |||
".iso" => "application/x-iso9660-image", | |||
".jam" => "application/x-jam", | |||
".jnlp" => "application/x-java-jnlp-file", | |||
".jmz" => "application/x-jmol", | |||
".chrt" => "application/x-kchart", | |||
".kil" => "application/x-killustrator", | |||
".skd" => "application/x-koan", | |||
".skm" => "application/x-koan", | |||
".skp" => "application/x-koan", | |||
".skt" => "application/x-koan", | |||
".kpr" => "application/x-kpresenter", | |||
".kpt" => "application/x-kpresenter", | |||
".ksp" => "application/x-kspread", | |||
".kwd" => "application/x-kword", | |||
".kwt" => "application/x-kword", | |||
".latex" => "application/x-latex", | |||
".lha" => "application/x-lha", | |||
".lyx" => "application/x-lyx", | |||
".lzh" => "application/x-lzh", | |||
".lzx" => "application/x-lzx", | |||
".book" => "application/x-maker", | |||
".fb" => "application/x-maker", | |||
".fbdoc" => "application/x-maker", | |||
".fm" => "application/x-maker", | |||
".frame" => "application/x-maker", | |||
".frm" => "application/x-maker", | |||
".maker" => "application/x-maker", | |||
".mif" => "application/x-mif", | |||
".m3u8" => "application/x-mpegURL", | |||
".application" => "application/x-ms-application", | |||
".manifest" => "application/x-ms-manifest", | |||
".wmd" => "application/x-ms-wmd", | |||
".wmz" => "application/x-ms-wmz", | |||
".bat" => "application/x-msdos-program", | |||
".com" => "application/x-msdos-program", | |||
".dll" => "application/x-msdos-program", | |||
".exe" => "application/x-msdos-program", | |||
".msi" => "application/x-msi", | |||
".nc" => "application/x-netcdf", | |||
".pac" => "application/x-ns-proxy-autoconfig", | |||
".nwc" => "application/x-nwc", | |||
".o" => "application/x-object", | |||
".oza" => "application/x-oz-application", | |||
".p7r" => "application/x-pkcs7-certreqresp", | |||
".crl" => "application/x-pkcs7-crl", | |||
".pyc" => "application/x-python-code", | |||
".pyo" => "application/x-python-code", | |||
".qgs" => "application/x-qgis", | |||
".shp" => "application/x-qgis", | |||
".shx" => "application/x-qgis", | |||
".qtl" => "application/x-quicktimeplayer", | |||
".rdp" => "application/x-rdp", | |||
".rpm" => "application/x-redhat-package-manager", | |||
".rss" => "application/x-rss+xml", | |||
".rb" => "application/x-ruby", | |||
".sce" => "application/x-scilab", | |||
".sci" => "application/x-scilab", | |||
".xcos" => "application/x-scilab-xcos", | |||
".shar" => "application/x-shar", | |||
".swf" => "application/x-shockwave-flash", | |||
".swfl" => "application/x-shockwave-flash", | |||
".scr" => "application/x-silverlight", | |||
".sql" => "application/x-sql", | |||
".sit" => "application/x-stuffit", | |||
".sitx" => "application/x-stuffit", | |||
".sv4cpio" => "application/x-sv4cpio", | |||
".sv4crc" => "application/x-sv4crc", | |||
".tar" => "application/x-tar", | |||
".gf" => "application/x-tex-gf", | |||
".pk" => "application/x-tex-pk", | |||
".texi" => "application/x-texinfo", | |||
".texinfo" => "application/x-texinfo", | |||
".roff" => "application/x-troff", | |||
".t" => "application/x-troff", | |||
".tr" => "application/x-troff", | |||
".man" => "application/x-troff-man", | |||
".me" => "application/x-troff-me", | |||
".ms" => "application/x-troff-ms", | |||
".ustar" => "application/x-ustar", | |||
".src" => "application/x-wais-source", | |||
".wz" => "application/x-wingz", | |||
".crt" => "application/x-x509-ca-cert", | |||
".xcf" => "application/x-xcf", | |||
".fig" => "application/x-xfig", | |||
".xpi" => "application/x-xpinstall", | |||
".xz" => "application/x-xz", | |||
".amr" => "audio/amr", | |||
".awb" => "audio/amr-wb", | |||
".axa" => "audio/annodex", | |||
".au" => "audio/basic", | |||
".snd" => "audio/basic", | |||
".csd" => "audio/csound", | |||
".orc" => "audio/csound", | |||
".sco" => "audio/csound", | |||
".flac" => "audio/flac", | |||
".kar" => "audio/midi", | |||
".mid" => "audio/midi", | |||
".midi" => "audio/midi", | |||
".m4a" => "audio/mpeg", | |||
".mp2" => "audio/mpeg", | |||
".mp3" => "audio/mpeg", | |||
".mpega" => "audio/mpeg", | |||
".mpga" => "audio/mpeg", | |||
".m3u" => "audio/mpegurl", | |||
".oga" => "audio/ogg", | |||
".ogg" => "audio/ogg", | |||
".opus" => "audio/ogg", | |||
".spx" => "audio/ogg", | |||
".sid" => "audio/prs.sid", | |||
".aif" => "audio/x-aiff", | |||
".aifc" => "audio/x-aiff", | |||
".aiff" => "audio/x-aiff", | |||
".gsm" => "audio/x-gsm", | |||
".wax" => "audio/x-ms-wax", | |||
".wma" => "audio/x-ms-wma", | |||
".ra" => "audio/x-realaudio", | |||
".ram" => "audio/x-realaudio", | |||
".rm" => "audio/x-realaudio", | |||
".pls" => "audio/x-scpls", | |||
".sd2" => "audio/x-sd2", | |||
".wav" => "audio/x-wav", | |||
".alc" => "chemical/x-alchemy", | |||
".cac" => "chemical/x-cache", | |||
".cache" => "chemical/x-cache", | |||
".csf" => "chemical/x-cache-csf", | |||
".cascii" => "chemical/x-cactvs-binary", | |||
".cbin" => "chemical/x-cactvs-binary", | |||
".ctab" => "chemical/x-cactvs-binary", | |||
".cdx" => "chemical/x-cdx", | |||
".cer" => "chemical/x-cerius", | |||
".c3d" => "chemical/x-chem3d", | |||
".chm" => "chemical/x-chemdraw", | |||
".cif" => "chemical/x-cif", | |||
".cmdf" => "chemical/x-cmdf", | |||
".cml" => "chemical/x-cml", | |||
".cpa" => "chemical/x-compass", | |||
".bsd" => "chemical/x-crossfire", | |||
".csm" => "chemical/x-csml", | |||
".csml" => "chemical/x-csml", | |||
".ctx" => "chemical/x-ctx", | |||
".cef" => "chemical/x-cxf", | |||
".cxf" => "chemical/x-cxf", | |||
".emb" => "chemical/x-embl-dl-nucleotide", | |||
".embl" => "chemical/x-embl-dl-nucleotide", | |||
".spc" => "chemical/x-galactic-spc", | |||
".gam" => "chemical/x-gamess-input", | |||
".gamin" => "chemical/x-gamess-input", | |||
".inp" => "chemical/x-gamess-input", | |||
".fch" => "chemical/x-gaussian-checkpoint", | |||
".fchk" => "chemical/x-gaussian-checkpoint", | |||
".cub" => "chemical/x-gaussian-cube", | |||
".gau" => "chemical/x-gaussian-input", | |||
".gjc" => "chemical/x-gaussian-input", | |||
".gjf" => "chemical/x-gaussian-input", | |||
".gal" => "chemical/x-gaussian-log", | |||
".gcg" => "chemical/x-gcg8-sequence", | |||
".gen" => "chemical/x-genbank", | |||
".hin" => "chemical/x-hin", | |||
".ist" => "chemical/x-isostar", | |||
".istr" => "chemical/x-isostar", | |||
".dx" => "chemical/x-jcamp-dx", | |||
".jdx" => "chemical/x-jcamp-dx", | |||
".kin" => "chemical/x-kinemage", | |||
".mcm" => "chemical/x-macmolecule", | |||
".mmd" => "chemical/x-macromodel-input", | |||
".mmod" => "chemical/x-macromodel-input", | |||
".mol" => "chemical/x-mdl-molfile", | |||
".rd" => "chemical/x-mdl-rdfile", | |||
".rxn" => "chemical/x-mdl-rxnfile", | |||
".sd" => "chemical/x-mdl-sdfile", | |||
".tgf" => "chemical/x-mdl-tgf", | |||
".mcif" => "chemical/x-mmcif", | |||
".mol2" => "chemical/x-mol2", | |||
".b" => "chemical/x-molconn-Z", | |||
".gpt" => "chemical/x-mopac-graph", | |||
".mop" => "chemical/x-mopac-input", | |||
".mopcrt" => "chemical/x-mopac-input", | |||
".mpc" => "chemical/x-mopac-input", | |||
".zmt" => "chemical/x-mopac-input", | |||
".moo" => "chemical/x-mopac-out", | |||
".mvb" => "chemical/x-mopac-vib", | |||
".prt" => "chemical/x-ncbi-asn1-ascii", | |||
".aso" => "chemical/x-ncbi-asn1-binary", | |||
".val" => "chemical/x-ncbi-asn1-binary", | |||
".pdb" => "chemical/x-pdb", | |||
".ros" => "chemical/x-rosdal", | |||
".sw" => "chemical/x-swissprot", | |||
".vms" => "chemical/x-vamas-iso14976", | |||
".vmd" => "chemical/x-vmd", | |||
".xtel" => "chemical/x-xtel", | |||
".xyz" => "chemical/x-xyz", | |||
".otf" => "font/ttf", | |||
".ttf" => "font/ttf", | |||
".woff" => "font/woff", | |||
".gif" => "image/gif", | |||
".ief" => "image/ief", | |||
".jp2" => "image/jp2", | |||
".jpg2" => "image/jp2", | |||
".jpe" => "image/jpeg", | |||
".jpeg" => "image/jpeg", | |||
".jpg" => "image/jpeg", | |||
".jpm" => "image/jpm", | |||
".jpf" => "image/jpx", | |||
".jpx" => "image/jpx", | |||
".pcx" => "image/pcx", | |||
".png" => "image/png", | |||
".svg" => "image/svg+xml", | |||
".svgz" => "image/svg+xml", | |||
".tif" => "image/tiff", | |||
".tiff" => "image/tiff", | |||
".djv" => "image/vnd.djvu", | |||
".djvu" => "image/vnd.djvu", | |||
".ico" => "image/vnd.microsoft.icon", | |||
".wbmp" => "image/vnd.wap.wbmp", | |||
".cr2" => "image/x-canon-cr2", | |||
".crw" => "image/x-canon-crw", | |||
".ras" => "image/x-cmu-raster", | |||
".cdr" => "image/x-coreldraw", | |||
".pat" => "image/x-coreldrawpattern", | |||
".cdt" => "image/x-coreldrawtemplate", | |||
".erf" => "image/x-epson-erf", | |||
".art" => "image/x-jg", | |||
".jng" => "image/x-jng", | |||
".bmp" => "image/x-ms-bmp", | |||
".nef" => "image/x-nikon-nef", | |||
".orf" => "image/x-olympus-orf", | |||
".psd" => "image/x-photoshop", | |||
".pnm" => "image/x-portable-anymap", | |||
".pbm" => "image/x-portable-bitmap", | |||
".pgm" => "image/x-portable-graymap", | |||
".ppm" => "image/x-portable-pixmap", | |||
".rgb" => "image/x-rgb", | |||
".xbm" => "image/x-xbitmap", | |||
".xpm" => "image/x-xpixmap", | |||
".xwd" => "image/x-xwindowdump", | |||
".eml" => "message/rfc822", | |||
".iges" => "model/iges", | |||
".igs" => "model/iges", | |||
".mesh" => "model/mesh", | |||
".msh" => "model/mesh", | |||
".silo" => "model/mesh", | |||
".vrml" => "model/vrml", | |||
".wrl" => "model/vrml", | |||
".x3db" => "model/x3d+binary", | |||
".x3dv" => "model/x3d+vrml", | |||
".x3d" => "model/x3d+xml", | |||
".appcache" => "text/cache-manifest; charset=utf-8", | |||
".ics" => "text/calendar; charset=utf-8", | |||
".icz" => "text/calendar; charset=utf-8", | |||
".css" => "text/css; charset=utf-8", | |||
".csv" => "text/csv; charset=utf-8", | |||
".323" => "text/h323; charset=utf-8", | |||
".htm" => "text/html", | |||
".html" => "text/html", | |||
".shtml" => "text/html", | |||
".uls" => "text/iuls; charset=utf-8", | |||
".markdown" => "text/markdown; charset=utf-8", | |||
".md" => "text/markdown; charset=utf-8", | |||
".mml" => "text/mathml; charset=utf-8", | |||
".asc" => "text/plain; charset=utf-8", | |||
".brf" => "text/plain; charset=utf-8", | |||
".conf" => "text/plain; charset=utf-8", | |||
".log" => "text/plain; charset=utf-8", | |||
".pot" => "text/plain; charset=utf-8", | |||
".spec" => "text/plain; charset=utf-8", | |||
".srt" => "text/plain; charset=utf-8", | |||
".text" => "text/plain; charset=utf-8", | |||
".txt" => "text/plain; charset=utf-8", | |||
".rtx" => "text/richtext; charset=utf-8", | |||
".sct" => "text/scriptlet; charset=utf-8", | |||
".wsc" => "text/scriptlet; charset=utf-8", | |||
".tsv" => "text/tab-separated-values; charset=utf-8", | |||
".tm" => "text/texmacs; charset=utf-8", | |||
".ttl" => "text/turtle; charset=utf-8", | |||
".vcard" => "text/vcard; charset=utf-8", | |||
".vcf" => "text/vcard; charset=utf-8", | |||
".jad" => "text/vnd.sun.j2me.app-descriptor; charset=utf-8", | |||
".wml" => "text/vnd.wap.wml; charset=utf-8", | |||
".wmls" => "text/vnd.wap.wmlscript; charset=utf-8", | |||
".bib" => "text/x-bibtex; charset=utf-8", | |||
".boo" => "text/x-boo; charset=utf-8", | |||
".h++" => "text/x-c++hdr; charset=utf-8", | |||
".hh" => "text/x-c++hdr; charset=utf-8", | |||
".hpp" => "text/x-c++hdr; charset=utf-8", | |||
".hxx" => "text/x-c++hdr; charset=utf-8", | |||
".c++" => "text/x-c++src; charset=utf-8", | |||
".cc" => "text/x-c++src; charset=utf-8", | |||
".cpp" => "text/x-c++src; charset=utf-8", | |||
".cxx" => "text/x-c++src; charset=utf-8", | |||
".h" => "text/x-chdr; charset=utf-8", | |||
".htc" => "text/x-component; charset=utf-8", | |||
".csh" => "text/x-csh; charset=utf-8", | |||
".c" => "text/x-csrc; charset=utf-8", | |||
".diff" => "text/x-diff; charset=utf-8", | |||
".patch" => "text/x-diff; charset=utf-8", | |||
".d" => "text/x-dsrc; charset=utf-8", | |||
".hs" => "text/x-haskell; charset=utf-8", | |||
".java" => "text/x-java; charset=utf-8", | |||
".ly" => "text/x-lilypond; charset=utf-8", | |||
".lhs" => "text/x-literate-haskell; charset=utf-8", | |||
".moc" => "text/x-moc; charset=utf-8", | |||
".p" => "text/x-pascal; charset=utf-8", | |||
".pas" => "text/x-pascal; charset=utf-8", | |||
".gcd" => "text/x-pcs-gcd; charset=utf-8", | |||
".pl" => "text/x-perl; charset=utf-8", | |||
".pm" => "text/x-perl; charset=utf-8", | |||
".py" => "text/x-python; charset=utf-8", | |||
".scala" => "text/x-scala; charset=utf-8", | |||
".etx" => "text/x-setext; charset=utf-8", | |||
".sfv" => "text/x-sfv; charset=utf-8", | |||
".sh" => "text/x-sh; charset=utf-8", | |||
".tcl" => "text/x-tcl; charset=utf-8", | |||
".tk" => "text/x-tcl; charset=utf-8", | |||
".cls" => "text/x-tex; charset=utf-8", | |||
".ltx" => "text/x-tex; charset=utf-8", | |||
".sty" => "text/x-tex; charset=utf-8", | |||
".tex" => "text/x-tex; charset=utf-8", | |||
".vcs" => "text/x-vcalendar; charset=utf-8", | |||
".3gp" => "video/3gpp", | |||
".ts" => "video/MP2T", | |||
".axv" => "video/annodex", | |||
".dl" => "video/dl", | |||
".dif" => "video/dv", | |||
".dv" => "video/dv", | |||
".fli" => "video/fli", | |||
".gl" => "video/gl", | |||
".mp4" => "video/mp4", | |||
".mpe" => "video/mpeg", | |||
".mpeg" => "video/mpeg", | |||
".mpg" => "video/mpeg", | |||
".ogv" => "video/ogg", | |||
".mov" => "video/quicktime", | |||
".qt" => "video/quicktime", | |||
".webm" => "video/webm", | |||
".mxu" => "video/vnd.mpegurl", | |||
".flv" => "video/x-flv", | |||
".lsf" => "video/x-la-asf", | |||
".lsx" => "video/x-la-asf", | |||
".mkv" => "video/x-matroska", | |||
".mpv" => "video/x-matroska", | |||
".mng" => "video/x-mng", | |||
".asf" => "video/x-ms-asf", | |||
".asx" => "video/x-ms-asf", | |||
".wm" => "video/x-ms-wm", | |||
".wmv" => "video/x-ms-wmv", | |||
".wmx" => "video/x-ms-wmx", | |||
".wvx" => "video/x-ms-wvx", | |||
".avi" => "video/x-msvideo", | |||
".movie" => "video/x-sgi-movie", | |||
".ice" => "x-conference/x-cooltalk", | |||
".sisx" => "x-epoc/x-sisx-app", | |||
".vrm" => "x-world/x-vrml", | |||
"README" => "text/plain; charset=utf-8", | |||
"Makefile" => "text/x-makefile; charset=utf-8", | |||
) | |||
cgi.assign = ( | cgi.assign = ( | ||
Line 68: | Line 615: | ||
".pyc" => "/usr/bin/python", | ".pyc" => "/usr/bin/python", | ||
) | ) | ||
## The following lines are only included by `webservice lighttpd` and not by `webservice lighttpd-plain` | |||
fastcgi.server += ( ".php" => | fastcgi.server += ( ".php" => | ||
(( | (( | ||
Line 86: | Line 633: | ||
)) | )) | ||
) | ) | ||
</ | </syntaxhighlight> | ||
(config as of | (config as of 2020-09-21) | ||
{{Collapse bottom}} | {{Collapse bottom}} | ||
See [[Phab:diffusion/OSTW/browse/master/ | See [[Phab:diffusion/OSTW/browse/master/toolsws/wstypes/lighttpd.py|lighttpd.py in toolsws/wstypes/]] for the canonical configuration. | ||
== Example configurations == | == Example configurations == | ||
=== FCGI Flask config === | === FCGI Flask config === | ||
< | <syntaxhighlight lang="lighttpd"> | ||
fastcgi.server += ( "/gerrit-patch-uploader" => | fastcgi.server += ( "/gerrit-patch-uploader" => | ||
(( | (( | ||
Line 104: | Line 651: | ||
)) | )) | ||
) | ) | ||
</ | </syntaxhighlight> | ||
For Flask, the fcgi handler looks like this: https://github.com/valhallasw/gerrit-patch-uploader/blob/master/app.fcgi | For Flask, the fcgi handler looks like this: https://github.com/valhallasw/gerrit-patch-uploader/blob/master/app.fcgi | ||
Line 111: | Line 658: | ||
:''Documentation: [https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModRewrite ModRewrite]'' | :''Documentation: [https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModRewrite ModRewrite]'' | ||
Note that rewrite rules always execute before redirect rules (regardless of their order in the config file). | Note that rewrite rules always execute before redirect rules (regardless of their order in the config file). | ||
A common rewrite scenario is a PHP application that uses a [[w:Front controller|front controller]] script (often ''index.php'') to decide how to process each request based on the path of the request. The '''url.rewrite-if-not-file''' directive can be used to do this while still letting lighttpd serve static files from ''$HOME/public_html'' normally: | |||
<syntaxhighlight lang="lighttpd"> | |||
url.rewrite-if-not-file += ( "(.*)" => "/index.php/$0" ) | |||
</syntaxhighlight> | |||
< | Alternately you can use '''url.rewrite-once''' to pick and choose which requests to rewrite: | ||
url.rewrite-once = ( | <syntaxhighlight lang="lighttpd"> | ||
url.rewrite-once += ( | |||
".*\.(js|css)" => "$0", | ".*\.(js|css)" => "$0", | ||
"^ | "^(/.*)" => "/index.php$1" | ||
) | ) | ||
</ | </syntaxhighlight> | ||
<syntaxhighlight lang="lighttpd"> | |||
url.rewrite-once += ( "/id/([0-9]+)" => "/index.php?id=$1", | |||
"/link/([a-zA-Z]+)" => "/index.php?link=$1" ) | |||
</syntaxhighlight> | |||
The | The <code>$0</code> matches the entire match from the left-hand side regular expression. | ||
=== Header, mimetype, character encoding, error handler === | === Header, mimetype, character encoding, error handler === | ||
< | {{Warning|Outdated information follows. The version of lighttpd used on Debian Stretch does not allow overriding some settings from the default configuration that were allowed previously. Specifically it is no longer possible to replace an existing value in a config map such as ''mimetype.assign''. See [[phab:T215683]] for more information. }} | ||
# Allow Cross-Origin Resource Sharing (CORS) | <syntaxhighlight lang="lighttpd"> | ||
setenv.add-response-header | # Allow Cross-Origin Resource Sharing (CORS) | ||
# Please read up on CORS before setting such headers https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS | |||
# If you are handling anything with authentication and/or multiple origins you likely should set the correct header for a specific webresource, instead of setting them for all calls. | |||
setenv.add-response-header += ( "Access-Control-Allow-Origin" => "en.wikipedia.org", | |||
"Access-Control-Allow-Methods" => "POST, GET, OPTIONS" ) | "Access-Control-Allow-Methods" => "POST, GET, OPTIONS" ) | ||
Line 140: | Line 694: | ||
} | } | ||
mimetype.assign | mimetype.assign += ( | ||
# Add custom mimetype | # Add custom mimetype | ||
".bulk" => "text/plain", | ".bulk" => "text/plain", | ||
Line 150: | Line 704: | ||
# Add custom error-404 handler | # Add custom error-404 handler | ||
server.error-handler-404 | server.error-handler-404 += "/error-404.php" | ||
</ | </syntaxhighlight> | ||
Details: [//redmine.lighttpd.net/projects/1/wiki/Docs_ModSetEnv ModSetEnv] [//redmine.lighttpd.net/projects/lighttpd/wiki/Mimetype_assignDetails Mimetype-Assign] [//redmine.lighttpd.net/projects/lighttpd/wiki/Server_error-handler-404Details Error-Handler-404] | Details: [//redmine.lighttpd.net/projects/1/wiki/Docs_ModSetEnv ModSetEnv] [//redmine.lighttpd.net/projects/lighttpd/wiki/Mimetype_assignDetails Mimetype-Assign] [//redmine.lighttpd.net/projects/lighttpd/wiki/Server_error-handler-404Details Error-Handler-404] | ||
[https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS HTTP access control (CORS)] | [https://developer.mozilla.org/en/docs/HTTP/Access_control_CORS HTTP access control (CORS)] | ||
=== {{anchor|lighttpd-conf-index}}Directory or file index === | === {{anchor|lighttpd-conf-index}}Directory or file index === | ||
< | <syntaxhighlight lang="lighttpd"> | ||
# Enable basic directory index | # Enable basic directory index | ||
$HTTP["url"] =~ "^/?" { | $HTTP["url"] =~ "^/?" { | ||
dir-listing.activate = "enable" | dir-listing.activate = "enable" | ||
} | } | ||
</ | </syntaxhighlight> | ||
=== {{anchor|lighttpd-conf-hidden}}Deny access to hidden files === | === {{anchor|lighttpd-conf-hidden}}Deny access to hidden files === | ||
< | <syntaxhighlight lang="lighttpd"> | ||
# Deny access to hidden files | # Deny access to hidden files | ||
$HTTP["url"] =~ "/\." { | $HTTP["url"] =~ "/\." { | ||
url.access-deny = ("") | url.access-deny = ("") | ||
} | } | ||
</ | </syntaxhighlight> | ||
Details: [//redmine.lighttpd.net/projects/1/wiki/Docs_ModAccess ModAccess] | Details: [https://redmine.lighttpd.net/projects/1/wiki/Docs_ModAccess ModAccess] | ||
=== Custom index === | === Custom index === | ||
< | <syntaxhighlight lang="lighttpd"> | ||
# Enable index for specific directory | # Enable index for specific directory | ||
$HTTP["url"] =~ "^/download($|/)" { | $HTTP["url"] =~ "^/download($|/)" { | ||
dir-listing.activate = "enable" | dir-listing.activate = "enable" | ||
} | } | ||
# Custom index file or custom directory generator | # Custom index file or custom directory generator | ||
index-file.names += ("index.py") | index-file.names += ("index.py") | ||
</ | </syntaxhighlight> | ||
Details: [//redmine.lighttpd.net/projects/1/wiki/Docs_ModDirlisting ModDirlisting] | Details: [//redmine.lighttpd.net/projects/1/wiki/Docs_ModDirlisting ModDirlisting] | ||
=== Request logging === | === {{Anchor|Request logging}}Additional debug logging === | ||
:''Documentation: [https://redmine.lighttpd.net/projects/lighttpd/wiki/DebugVariables DebugVariables]'' | :''Documentation: [https://redmine.lighttpd.net/projects/lighttpd/wiki/DebugVariables DebugVariables]'' | ||
Add the line: | Add the line: | ||
< | <syntaxhighlight lang="lighttpd"> | ||
# Enable request logging | # Enable request logging | ||
debug.log-request-handling = "enable" | debug.log-request-handling = "enable" | ||
</ | </syntaxhighlight> | ||
The debug output will be written to the <code>error.log</code> file. | The debug output will be written to the <code>error.log</code> file. | ||
=== Apache-like cgi-bin directory === | === Apache-like cgi-bin directory === | ||
Add the following stanza: | Add the following stanza: | ||
< | <syntaxhighlight lang="lighttpd"> | ||
$HTTP["url"] =~ "^ | $HTTP["url"] =~ "^/cgi-bin" { | ||
cgi.assign = ( "" => "" ) | cgi.assign = ( "" => "" ) | ||
} | } | ||
</ | </syntaxhighlight> | ||
This does require that cgi-bin be ''under'' your public_html rather than alongside it. | This does require that cgi-bin be ''under'' your public_html rather than alongside it. | ||
Line 208: | Line 762: | ||
To run CGI from any directory under your public_html only need this one line (w/out the $HTTP["url"] .. block) | To run CGI from any directory under your public_html only need this one line (w/out the $HTTP["url"] .. block) | ||
< | <syntaxhighlight lang="lighttpd"> | ||
cgi.assign += ( ".cgi" => "" ) | cgi.assign += ( ".cgi" => "" ) | ||
</ | </syntaxhighlight> | ||
The part to the left is the file name or extension ("" = any). The part to the right is the program which will run it ("" = any). Another example | The part to the left is the file name or extension ("" = any). The part to the right is the program which will run it ("" = any). Another example | ||
< | <syntaxhighlight lang="lighttpd"> | ||
cgi.assign += ( "script.sh" => "/bin/bash" ) | cgi.assign += ( "script.sh" => "/bin/bash" ) | ||
</ | </syntaxhighlight> | ||
=== Enable status and statistics === | === Enable status and statistics === | ||
<syntaxhighlight lang="lighttpd"> | |||
# Source: https://wikitech.wikimedia.org/wiki/Help:Toolforge/Web/Lighttpd#Enable_status_and_statistics | |||
server.modules += ("mod_status") | |||
status.status-url = "/server-status" | |||
status.statistics-url = "/server-statistics" | |||
</syntaxhighlight> | |||
Details: [https://redmine.lighttpd.net/projects/1/wiki/Docs_ModStatus ModStatus] | |||
== {{anchor|Logs}}<!-- This anchor is linked from HTTP 500 pages on toolforge.org -->Web logs == | |||
Lighttpd '''error logs''' can be found in the tool account's <code>$HOME/error.log</code>; this includes the standard error of invoked scripts. | |||
Beginning in October 2019, Lighttpd based webservices ''do not'' write access logs by default. Tool maintainers will be reminded of this by the following warning when starting a webservice: | |||
<pre> | <pre> | ||
****************************************************************************** | |||
Note that access.log is no longer enabled by default (see https://w.wiki/9go) | |||
****************************************************************************** | |||
</pre> | </pre> | ||
If a tool has a need for access log data, it can be enabled by adding the following line in the tool account's <code>$HOME/.lighttpd.conf</code> (replace <tt><tool></tt> with your tool account name): | |||
== | <syntaxhighlight lang="lighttpd"> | ||
accesslog.filename = "/data/project/<tool>/access.log" | |||
</syntaxhighlight> | |||
You'll need to do a <code>webservice restart</code> to activate the new settings. | |||
Please note that the web logs are anonymized in accordance with the Wikimedia Foundation’s privacy policy by preventing the tool's webservice from seeing the IP address of the visitor. | |||
== Error pages == | == Error pages == | ||
The proxy provides its own error pages when your application returns HTTP/500, HTTP/502 or HTTP/503. This behavior is | {{Tracked|T103662}} | ||
The proxy provides its own error pages when your application returns HTTP/500, HTTP/502 or HTTP/503. This behavior is intended to be friendly to tool users, but it can also make debugging more difficult for tool maintainers. [[phab:T103662]] may change the default behavior if consensus is reached. | |||
== Changing the document root == | == Changing the document root == | ||
=== With symlinks === | === With symlinks === | ||
The easiest way to change the document root is with a symlink to <code>$HOME/public_html</code>. However, before this is done, the existing public_html directory needs to be deleted or moved. This is because <code>ln -s $HOME/foo $HOME/public_html</code> would make <code>$HOME/public_html/foo</code> if the <code>$HOME/public_html</code> directory exists. Deleting the directory is done with <code>rm -rf $HOME/public_html</code> to delete the directory and all of | The easiest way to change the document root is with a symlink to <code>$HOME/public_html</code>. However, before this is done, the existing public_html directory needs to be deleted or moved. This is because <code>ln -s $HOME/foo $HOME/public_html</code> would make <code>$HOME/public_html/foo</code> if the <code>$HOME/public_html</code> directory exists. Deleting the directory is done with <code>rm -rf $HOME/public_html</code> to delete the directory and all of its contents, if you do not need anything in there, or with <code>mv $HOME/public_html $HOME/oldpublic_html</code> to move the directory to <code>$HOME/oldpublic_html</code>. | ||
To make the symlink, <code>ln -s $HOME/foo $HOME/public_html/</code> would make the contents of <code>$HOME/foo</code> available in <code>$HOME/public_html</code>. Replace <code>$HOME/foo</code> in the example with the directory you want lighttpd to serve. | To make the symlink, <code>ln -s $HOME/foo $HOME/public_html/</code> would make the contents of <code>$HOME/foo</code> available in <code>$HOME/public_html</code>. Replace <code>$HOME/foo</code> in the example with the directory you want lighttpd to serve. | ||
Line 253: | Line 820: | ||
PHP ini settings can be changed for your tool by creating a <code>$HOME/public_html/.user.ini</code> configuration file. This can be useful for setting the default timezone with <code>date.timezone</code>. See the [https://secure.php.net/manual/en/configuration.file.per-user.php documentation at php.net] for more details. | PHP ini settings can be changed for your tool by creating a <code>$HOME/public_html/.user.ini</code> configuration file. This can be useful for setting the default timezone with <code>date.timezone</code>. See the [https://secure.php.net/manual/en/configuration.file.per-user.php documentation at php.net] for more details. | ||
<!-- end noinclude started in lead section--></noinclude> | <!-- end noinclude started in lead section--></noinclude> | ||
{{:Help:Cloud Services communication}} | |||
[[Category:Toolforge|Lighttpd]] | |||
[[Category:Documentation]] | |||
[[Category:Cloud Services]] |
Latest revision as of 17:54, 22 May 2022
Overview
Lighttpd is the HTTP server used by both the lighttpd
and lighttpd-plain
types supported by webservice
. These types are supported by the Grid Engine backend. On the Kubernetes backend, the php7.4
type (and other PHP types) also uses lighttpd.
- The document root is
$HOME/public_html
.- See Changing the document root for some ideas on how to change that.
- Error logs from the lighttpd process are stored in
$HOME/error.log
- PHP scripts are automatically run using a FastCGI helper process.
- The lighttpd web server is configurable (including adding other FastCGI handlers). A
$HOME/.lighttpd.conf
file can be used to change the default configuration. - Everything runs as the tool user, regardless of file ownership.
The web server reads any configuration in $HOME/.lighttpd.conf
and merges it with the default configuration. Most tools will not need custom configuration.
Sometimes merge fails if an option is already set in the default configuration. When this happens, try using
option += value
instead of option = value
. Some settings cannot be changed, such as fastcgi.server += ( ".php" =>...
.
Default configuration
This is the default (if you don't specify any other/additional settings in your tool's .lighttpd.conf)
Default lighttpd configuration |
---|
The following content has been placed in a collapsed box for improved usability. |
server.modules = (
"mod_setenv",
"mod_access",
"mod_accesslog",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_rewrite",
"mod_fastcgi",
"mod_cgi",
)
server.port = {port}
server.use-ipv6 = "disable"
server.username = "{username}"
server.groupname = "{groupname}"
server.core-files = "disable"
server.document-root = "{home}/public_html"
server.pid-file = "/var/run/lighttpd/{toolname}.pid"
server.errorlog = "{home}/error.log"
server.breakagelog = "{home}/error.log"
server.follow-symlink = "enable"
server.max-connections = 300
server.stat-cache-engine = "simple"
server.event-handler = "linux-sysepoll"
ssl.engine = "disable"
index-file.names = ( "index.php", "index.html", "index.htm" )
dir-listing.encoding = "utf-8"
server.dir-listing = "disable"
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
accesslog.use-syslog = "disable"
# no longer enabled by default (T233347)
# accesslog.filename = "{home}/access.log"
mimetype.assign = (
".pcf.Z" => "application/x-font-pcf",
".tar.bz2" => "application/x-gtar-compressed",
".tar.gz" => "application/x-gtar-compressed",
".ez" => "application/andrew-inset",
".anx" => "application/annodex",
".atom" => "application/atom+xml",
".atomcat" => "application/atomcat+xml",
".atomsrv" => "application/atomserv+xml",
".lin" => "application/bbolin",
".cu" => "application/cu-seeme",
".davmount" => "application/davmount+xml",
".dcm" => "application/dicom",
".tsp" => "application/dsptype",
".es" => "application/ecmascript",
".pfr" => "application/font-tdpfr",
".spl" => "application/futuresplash",
".gz" => "application/gzip",
".hta" => "application/hta",
".jar" => "application/java-archive",
".ser" => "application/java-serialized-object",
".class" => "application/java-vm",
".js" => "application/javascript; charset=utf-8",
".json" => "application/json; charset=utf-8",
".m3g" => "application/m3g",
".hqx" => "application/mac-binhex40",
".cpt" => "application/mac-compactpro",
".nb" => "application/mathematica",
".nbp" => "application/mathematica",
".mbox" => "application/mbox",
".mdb" => "application/msaccess",
".doc" => "application/msword",
".dot" => "application/msword",
".mxf" => "application/mxf",
".asn" => "application/octet-stream",
".bin" => "application/octet-stream",
".deploy" => "application/octet-stream",
".ent" => "application/octet-stream",
".msp" => "application/octet-stream",
".msu" => "application/octet-stream",
".oda" => "application/oda",
".opf" => "application/oebps-package+xml",
".ogx" => "application/ogg",
".one" => "application/onenote",
".onepkg" => "application/onenote",
".onetmp" => "application/onenote",
".onetoc2" => "application/onenote",
".pdf" => "application/pdf",
".pgp" => "application/pgp-encrypted",
".key" => "application/pgp-keys",
".sig" => "application/pgp-signature",
".prf" => "application/pics-rules",
".ai" => "application/postscript",
".eps" => "application/postscript",
".eps2" => "application/postscript",
".eps3" => "application/postscript",
".epsf" => "application/postscript",
".epsi" => "application/postscript",
".ps" => "application/postscript",
".rar" => "application/rar",
".rdf" => "application/rdf+xml",
".rtf" => "application/rtf",
".stl" => "application/sla",
".smi" => "application/smil+xml",
".smil" => "application/smil+xml",
".xht" => "application/xhtml+xml",
".xhtml" => "application/xhtml+xml",
".xml" => "application/xml",
".xsd" => "application/xml",
".dtd" => "application/xml-dtd",
".xsl" => "application/xslt+xml",
".xslt" => "application/xslt+xml",
".xspf" => "application/xspf+xml",
".zip" => "application/zip",
".apk" => "application/vnd.android.package-archive",
".cdy" => "application/vnd.cinderella",
".ddeb" => "application/vnd.debian.binary-package",
".deb" => "application/vnd.debian.binary-package",
".udeb" => "application/vnd.debian.binary-package",
".sfd" => "application/vnd.font-fontforge-sfd",
".kml" => "application/vnd.google-earth.kml+xml",
".kmz" => "application/vnd.google-earth.kmz",
".xul" => "application/vnd.mozilla.xul+xml",
".xlb" => "application/vnd.ms-excel",
".xls" => "application/vnd.ms-excel",
".xlt" => "application/vnd.ms-excel",
".xlam" => "application/vnd.ms-excel.addin.macroEnabled.12",
".xlsb" => "application/vnd.ms-excel.sheet.binary.macroEnabled.12",
".xlsm" => "application/vnd.ms-excel.sheet.macroEnabled.12",
".xltm" => "application/vnd.ms-excel.template.macroEnabled.12",
".eot" => "application/vnd.ms-fontobject",
".thmx" => "application/vnd.ms-officetheme",
".cat" => "application/vnd.ms-pki.seccat",
".pps" => "application/vnd.ms-powerpoint",
".ppt" => "application/vnd.ms-powerpoint",
".ppam" => "application/vnd.ms-powerpoint.addin.macroEnabled.12",
".pptm" => "application/vnd.ms-powerpoint.presentation.macroEnabled.12",
".sldm" => "application/vnd.ms-powerpoint.slide.macroEnabled.12",
".ppsm" => "application/vnd.ms-powerpoint.slideshow.macroEnabled.12",
".potm" => "application/vnd.ms-powerpoint.template.macroEnabled.12",
".docm" => "application/vnd.ms-word.document.macroEnabled.12",
".dotm" => "application/vnd.ms-word.template.macroEnabled.12",
".odc" => "application/vnd.oasis.opendocument.chart",
".odb" => "application/vnd.oasis.opendocument.database",
".odf" => "application/vnd.oasis.opendocument.formula",
".odg" => "application/vnd.oasis.opendocument.graphics",
".otg" => "application/vnd.oasis.opendocument.graphics-template",
".odi" => "application/vnd.oasis.opendocument.image",
".odp" => "application/vnd.oasis.opendocument.presentation",
".otp" => "application/vnd.oasis.opendocument.presentation-template",
".ods" => "application/vnd.oasis.opendocument.spreadsheet",
".ots" => "application/vnd.oasis.opendocument.spreadsheet-template",
".odt" => "application/vnd.oasis.opendocument.text",
".odm" => "application/vnd.oasis.opendocument.text-master",
".ott" => "application/vnd.oasis.opendocument.text-template",
".oth" => "application/vnd.oasis.opendocument.text-web",
".cod" => "application/vnd.rim.cod",
".mmf" => "application/vnd.smaf",
".sdc" => "application/vnd.stardivision.calc",
".sds" => "application/vnd.stardivision.chart",
".sda" => "application/vnd.stardivision.draw",
".sdd" => "application/vnd.stardivision.impress",
".sdf" => "application/vnd.stardivision.math",
".sdw" => "application/vnd.stardivision.writer",
".sgl" => "application/vnd.stardivision.writer-global",
".sxc" => "application/vnd.sun.xml.calc",
".stc" => "application/vnd.sun.xml.calc.template",
".sxd" => "application/vnd.sun.xml.draw",
".std" => "application/vnd.sun.xml.draw.template",
".sxi" => "application/vnd.sun.xml.impress",
".sti" => "application/vnd.sun.xml.impress.template",
".sxm" => "application/vnd.sun.xml.math",
".sxw" => "application/vnd.sun.xml.writer",
".sxg" => "application/vnd.sun.xml.writer.global",
".stw" => "application/vnd.sun.xml.writer.template",
".sis" => "application/vnd.symbian.install",
".cap" => "application/vnd.tcpdump.pcap",
".pcap" => "application/vnd.tcpdump.pcap",
".vsd" => "application/vnd.visio",
".vss" => "application/vnd.visio",
".vst" => "application/vnd.visio",
".vsw" => "application/vnd.visio",
".wbxml" => "application/vnd.wap.wbxml",
".wmlc" => "application/vnd.wap.wmlc",
".wmlsc" => "application/vnd.wap.wmlscriptc",
".wpd" => "application/vnd.wordperfect",
".wp5" => "application/vnd.wordperfect5.1",
".wk" => "application/x-123",
".7z" => "application/x-7z-compressed",
".abw" => "application/x-abiword",
".dmg" => "application/x-apple-diskimage",
".bcpio" => "application/x-bcpio",
".torrent" => "application/x-bittorrent",
".bz2" => "application/x-bzip",
".cab" => "application/x-cab",
".cbr" => "application/x-cbr",
".cbz" => "application/x-cbz",
".cda" => "application/x-cdf",
".cdf" => "application/x-cdf",
".vcd" => "application/x-cdlink",
".pgn" => "application/x-chess-pgn",
".mph" => "application/x-comsol",
".cpio" => "application/x-cpio",
".dcr" => "application/x-director",
".dir" => "application/x-director",
".dxr" => "application/x-director",
".dms" => "application/x-dms",
".wad" => "application/x-doom",
".dvi" => "application/x-dvi",
".gsf" => "application/x-font",
".pfa" => "application/x-font",
".pfb" => "application/x-font",
".pcf" => "application/x-font-pcf",
".mm" => "application/x-freemind",
".gan" => "application/x-ganttproject",
".gnumeric" => "application/x-gnumeric",
".sgf" => "application/x-go-sgf",
".gcf" => "application/x-graphing-calculator",
".gtar" => "application/x-gtar",
".taz" => "application/x-gtar-compressed",
".tbz" => "application/x-gtar-compressed",
".tgz" => "application/x-gtar-compressed",
".hdf" => "application/x-hdf",
".hwp" => "application/x-hwp",
".ica" => "application/x-ica",
".info" => "application/x-info",
".ins" => "application/x-internet-signup",
".isp" => "application/x-internet-signup",
".iii" => "application/x-iphone",
".iso" => "application/x-iso9660-image",
".jam" => "application/x-jam",
".jnlp" => "application/x-java-jnlp-file",
".jmz" => "application/x-jmol",
".chrt" => "application/x-kchart",
".kil" => "application/x-killustrator",
".skd" => "application/x-koan",
".skm" => "application/x-koan",
".skp" => "application/x-koan",
".skt" => "application/x-koan",
".kpr" => "application/x-kpresenter",
".kpt" => "application/x-kpresenter",
".ksp" => "application/x-kspread",
".kwd" => "application/x-kword",
".kwt" => "application/x-kword",
".latex" => "application/x-latex",
".lha" => "application/x-lha",
".lyx" => "application/x-lyx",
".lzh" => "application/x-lzh",
".lzx" => "application/x-lzx",
".book" => "application/x-maker",
".fb" => "application/x-maker",
".fbdoc" => "application/x-maker",
".fm" => "application/x-maker",
".frame" => "application/x-maker",
".frm" => "application/x-maker",
".maker" => "application/x-maker",
".mif" => "application/x-mif",
".m3u8" => "application/x-mpegURL",
".application" => "application/x-ms-application",
".manifest" => "application/x-ms-manifest",
".wmd" => "application/x-ms-wmd",
".wmz" => "application/x-ms-wmz",
".bat" => "application/x-msdos-program",
".com" => "application/x-msdos-program",
".dll" => "application/x-msdos-program",
".exe" => "application/x-msdos-program",
".msi" => "application/x-msi",
".nc" => "application/x-netcdf",
".pac" => "application/x-ns-proxy-autoconfig",
".nwc" => "application/x-nwc",
".o" => "application/x-object",
".oza" => "application/x-oz-application",
".p7r" => "application/x-pkcs7-certreqresp",
".crl" => "application/x-pkcs7-crl",
".pyc" => "application/x-python-code",
".pyo" => "application/x-python-code",
".qgs" => "application/x-qgis",
".shp" => "application/x-qgis",
".shx" => "application/x-qgis",
".qtl" => "application/x-quicktimeplayer",
".rdp" => "application/x-rdp",
".rpm" => "application/x-redhat-package-manager",
".rss" => "application/x-rss+xml",
".rb" => "application/x-ruby",
".sce" => "application/x-scilab",
".sci" => "application/x-scilab",
".xcos" => "application/x-scilab-xcos",
".shar" => "application/x-shar",
".swf" => "application/x-shockwave-flash",
".swfl" => "application/x-shockwave-flash",
".scr" => "application/x-silverlight",
".sql" => "application/x-sql",
".sit" => "application/x-stuffit",
".sitx" => "application/x-stuffit",
".sv4cpio" => "application/x-sv4cpio",
".sv4crc" => "application/x-sv4crc",
".tar" => "application/x-tar",
".gf" => "application/x-tex-gf",
".pk" => "application/x-tex-pk",
".texi" => "application/x-texinfo",
".texinfo" => "application/x-texinfo",
".roff" => "application/x-troff",
".t" => "application/x-troff",
".tr" => "application/x-troff",
".man" => "application/x-troff-man",
".me" => "application/x-troff-me",
".ms" => "application/x-troff-ms",
".ustar" => "application/x-ustar",
".src" => "application/x-wais-source",
".wz" => "application/x-wingz",
".crt" => "application/x-x509-ca-cert",
".xcf" => "application/x-xcf",
".fig" => "application/x-xfig",
".xpi" => "application/x-xpinstall",
".xz" => "application/x-xz",
".amr" => "audio/amr",
".awb" => "audio/amr-wb",
".axa" => "audio/annodex",
".au" => "audio/basic",
".snd" => "audio/basic",
".csd" => "audio/csound",
".orc" => "audio/csound",
".sco" => "audio/csound",
".flac" => "audio/flac",
".kar" => "audio/midi",
".mid" => "audio/midi",
".midi" => "audio/midi",
".m4a" => "audio/mpeg",
".mp2" => "audio/mpeg",
".mp3" => "audio/mpeg",
".mpega" => "audio/mpeg",
".mpga" => "audio/mpeg",
".m3u" => "audio/mpegurl",
".oga" => "audio/ogg",
".ogg" => "audio/ogg",
".opus" => "audio/ogg",
".spx" => "audio/ogg",
".sid" => "audio/prs.sid",
".aif" => "audio/x-aiff",
".aifc" => "audio/x-aiff",
".aiff" => "audio/x-aiff",
".gsm" => "audio/x-gsm",
".wax" => "audio/x-ms-wax",
".wma" => "audio/x-ms-wma",
".ra" => "audio/x-realaudio",
".ram" => "audio/x-realaudio",
".rm" => "audio/x-realaudio",
".pls" => "audio/x-scpls",
".sd2" => "audio/x-sd2",
".wav" => "audio/x-wav",
".alc" => "chemical/x-alchemy",
".cac" => "chemical/x-cache",
".cache" => "chemical/x-cache",
".csf" => "chemical/x-cache-csf",
".cascii" => "chemical/x-cactvs-binary",
".cbin" => "chemical/x-cactvs-binary",
".ctab" => "chemical/x-cactvs-binary",
".cdx" => "chemical/x-cdx",
".cer" => "chemical/x-cerius",
".c3d" => "chemical/x-chem3d",
".chm" => "chemical/x-chemdraw",
".cif" => "chemical/x-cif",
".cmdf" => "chemical/x-cmdf",
".cml" => "chemical/x-cml",
".cpa" => "chemical/x-compass",
".bsd" => "chemical/x-crossfire",
".csm" => "chemical/x-csml",
".csml" => "chemical/x-csml",
".ctx" => "chemical/x-ctx",
".cef" => "chemical/x-cxf",
".cxf" => "chemical/x-cxf",
".emb" => "chemical/x-embl-dl-nucleotide",
".embl" => "chemical/x-embl-dl-nucleotide",
".spc" => "chemical/x-galactic-spc",
".gam" => "chemical/x-gamess-input",
".gamin" => "chemical/x-gamess-input",
".inp" => "chemical/x-gamess-input",
".fch" => "chemical/x-gaussian-checkpoint",
".fchk" => "chemical/x-gaussian-checkpoint",
".cub" => "chemical/x-gaussian-cube",
".gau" => "chemical/x-gaussian-input",
".gjc" => "chemical/x-gaussian-input",
".gjf" => "chemical/x-gaussian-input",
".gal" => "chemical/x-gaussian-log",
".gcg" => "chemical/x-gcg8-sequence",
".gen" => "chemical/x-genbank",
".hin" => "chemical/x-hin",
".ist" => "chemical/x-isostar",
".istr" => "chemical/x-isostar",
".dx" => "chemical/x-jcamp-dx",
".jdx" => "chemical/x-jcamp-dx",
".kin" => "chemical/x-kinemage",
".mcm" => "chemical/x-macmolecule",
".mmd" => "chemical/x-macromodel-input",
".mmod" => "chemical/x-macromodel-input",
".mol" => "chemical/x-mdl-molfile",
".rd" => "chemical/x-mdl-rdfile",
".rxn" => "chemical/x-mdl-rxnfile",
".sd" => "chemical/x-mdl-sdfile",
".tgf" => "chemical/x-mdl-tgf",
".mcif" => "chemical/x-mmcif",
".mol2" => "chemical/x-mol2",
".b" => "chemical/x-molconn-Z",
".gpt" => "chemical/x-mopac-graph",
".mop" => "chemical/x-mopac-input",
".mopcrt" => "chemical/x-mopac-input",
".mpc" => "chemical/x-mopac-input",
".zmt" => "chemical/x-mopac-input",
".moo" => "chemical/x-mopac-out",
".mvb" => "chemical/x-mopac-vib",
".prt" => "chemical/x-ncbi-asn1-ascii",
".aso" => "chemical/x-ncbi-asn1-binary",
".val" => "chemical/x-ncbi-asn1-binary",
".pdb" => "chemical/x-pdb",
".ros" => "chemical/x-rosdal",
".sw" => "chemical/x-swissprot",
".vms" => "chemical/x-vamas-iso14976",
".vmd" => "chemical/x-vmd",
".xtel" => "chemical/x-xtel",
".xyz" => "chemical/x-xyz",
".otf" => "font/ttf",
".ttf" => "font/ttf",
".woff" => "font/woff",
".gif" => "image/gif",
".ief" => "image/ief",
".jp2" => "image/jp2",
".jpg2" => "image/jp2",
".jpe" => "image/jpeg",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".jpm" => "image/jpm",
".jpf" => "image/jpx",
".jpx" => "image/jpx",
".pcx" => "image/pcx",
".png" => "image/png",
".svg" => "image/svg+xml",
".svgz" => "image/svg+xml",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".djv" => "image/vnd.djvu",
".djvu" => "image/vnd.djvu",
".ico" => "image/vnd.microsoft.icon",
".wbmp" => "image/vnd.wap.wbmp",
".cr2" => "image/x-canon-cr2",
".crw" => "image/x-canon-crw",
".ras" => "image/x-cmu-raster",
".cdr" => "image/x-coreldraw",
".pat" => "image/x-coreldrawpattern",
".cdt" => "image/x-coreldrawtemplate",
".erf" => "image/x-epson-erf",
".art" => "image/x-jg",
".jng" => "image/x-jng",
".bmp" => "image/x-ms-bmp",
".nef" => "image/x-nikon-nef",
".orf" => "image/x-olympus-orf",
".psd" => "image/x-photoshop",
".pnm" => "image/x-portable-anymap",
".pbm" => "image/x-portable-bitmap",
".pgm" => "image/x-portable-graymap",
".ppm" => "image/x-portable-pixmap",
".rgb" => "image/x-rgb",
".xbm" => "image/x-xbitmap",
".xpm" => "image/x-xpixmap",
".xwd" => "image/x-xwindowdump",
".eml" => "message/rfc822",
".iges" => "model/iges",
".igs" => "model/iges",
".mesh" => "model/mesh",
".msh" => "model/mesh",
".silo" => "model/mesh",
".vrml" => "model/vrml",
".wrl" => "model/vrml",
".x3db" => "model/x3d+binary",
".x3dv" => "model/x3d+vrml",
".x3d" => "model/x3d+xml",
".appcache" => "text/cache-manifest; charset=utf-8",
".ics" => "text/calendar; charset=utf-8",
".icz" => "text/calendar; charset=utf-8",
".css" => "text/css; charset=utf-8",
".csv" => "text/csv; charset=utf-8",
".323" => "text/h323; charset=utf-8",
".htm" => "text/html",
".html" => "text/html",
".shtml" => "text/html",
".uls" => "text/iuls; charset=utf-8",
".markdown" => "text/markdown; charset=utf-8",
".md" => "text/markdown; charset=utf-8",
".mml" => "text/mathml; charset=utf-8",
".asc" => "text/plain; charset=utf-8",
".brf" => "text/plain; charset=utf-8",
".conf" => "text/plain; charset=utf-8",
".log" => "text/plain; charset=utf-8",
".pot" => "text/plain; charset=utf-8",
".spec" => "text/plain; charset=utf-8",
".srt" => "text/plain; charset=utf-8",
".text" => "text/plain; charset=utf-8",
".txt" => "text/plain; charset=utf-8",
".rtx" => "text/richtext; charset=utf-8",
".sct" => "text/scriptlet; charset=utf-8",
".wsc" => "text/scriptlet; charset=utf-8",
".tsv" => "text/tab-separated-values; charset=utf-8",
".tm" => "text/texmacs; charset=utf-8",
".ttl" => "text/turtle; charset=utf-8",
".vcard" => "text/vcard; charset=utf-8",
".vcf" => "text/vcard; charset=utf-8",
".jad" => "text/vnd.sun.j2me.app-descriptor; charset=utf-8",
".wml" => "text/vnd.wap.wml; charset=utf-8",
".wmls" => "text/vnd.wap.wmlscript; charset=utf-8",
".bib" => "text/x-bibtex; charset=utf-8",
".boo" => "text/x-boo; charset=utf-8",
".h++" => "text/x-c++hdr; charset=utf-8",
".hh" => "text/x-c++hdr; charset=utf-8",
".hpp" => "text/x-c++hdr; charset=utf-8",
".hxx" => "text/x-c++hdr; charset=utf-8",
".c++" => "text/x-c++src; charset=utf-8",
".cc" => "text/x-c++src; charset=utf-8",
".cpp" => "text/x-c++src; charset=utf-8",
".cxx" => "text/x-c++src; charset=utf-8",
".h" => "text/x-chdr; charset=utf-8",
".htc" => "text/x-component; charset=utf-8",
".csh" => "text/x-csh; charset=utf-8",
".c" => "text/x-csrc; charset=utf-8",
".diff" => "text/x-diff; charset=utf-8",
".patch" => "text/x-diff; charset=utf-8",
".d" => "text/x-dsrc; charset=utf-8",
".hs" => "text/x-haskell; charset=utf-8",
".java" => "text/x-java; charset=utf-8",
".ly" => "text/x-lilypond; charset=utf-8",
".lhs" => "text/x-literate-haskell; charset=utf-8",
".moc" => "text/x-moc; charset=utf-8",
".p" => "text/x-pascal; charset=utf-8",
".pas" => "text/x-pascal; charset=utf-8",
".gcd" => "text/x-pcs-gcd; charset=utf-8",
".pl" => "text/x-perl; charset=utf-8",
".pm" => "text/x-perl; charset=utf-8",
".py" => "text/x-python; charset=utf-8",
".scala" => "text/x-scala; charset=utf-8",
".etx" => "text/x-setext; charset=utf-8",
".sfv" => "text/x-sfv; charset=utf-8",
".sh" => "text/x-sh; charset=utf-8",
".tcl" => "text/x-tcl; charset=utf-8",
".tk" => "text/x-tcl; charset=utf-8",
".cls" => "text/x-tex; charset=utf-8",
".ltx" => "text/x-tex; charset=utf-8",
".sty" => "text/x-tex; charset=utf-8",
".tex" => "text/x-tex; charset=utf-8",
".vcs" => "text/x-vcalendar; charset=utf-8",
".3gp" => "video/3gpp",
".ts" => "video/MP2T",
".axv" => "video/annodex",
".dl" => "video/dl",
".dif" => "video/dv",
".dv" => "video/dv",
".fli" => "video/fli",
".gl" => "video/gl",
".mp4" => "video/mp4",
".mpe" => "video/mpeg",
".mpeg" => "video/mpeg",
".mpg" => "video/mpeg",
".ogv" => "video/ogg",
".mov" => "video/quicktime",
".qt" => "video/quicktime",
".webm" => "video/webm",
".mxu" => "video/vnd.mpegurl",
".flv" => "video/x-flv",
".lsf" => "video/x-la-asf",
".lsx" => "video/x-la-asf",
".mkv" => "video/x-matroska",
".mpv" => "video/x-matroska",
".mng" => "video/x-mng",
".asf" => "video/x-ms-asf",
".asx" => "video/x-ms-asf",
".wm" => "video/x-ms-wm",
".wmv" => "video/x-ms-wmv",
".wmx" => "video/x-ms-wmx",
".wvx" => "video/x-ms-wvx",
".avi" => "video/x-msvideo",
".movie" => "video/x-sgi-movie",
".ice" => "x-conference/x-cooltalk",
".sisx" => "x-epoc/x-sisx-app",
".vrm" => "x-world/x-vrml",
"README" => "text/plain; charset=utf-8",
"Makefile" => "text/x-makefile; charset=utf-8",
)
cgi.assign = (
".pl" => "/usr/bin/perl",
".py" => "/usr/bin/python",
".pyc" => "/usr/bin/python",
)
## The following lines are only included by `webservice lighttpd` and not by `webservice lighttpd-plain`
fastcgi.server += ( ".php" =>
((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/var/run/lighttpd/php.socket.{toolname}",
"max-procs" => 2,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "2",
"PHP_FCGI_MAX_REQUESTS" => "500"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable",
"allow-x-send-file" => "enable"
))
)
(config as of 2020-09-21) |
The above content has been placed in a collapsed box for improved usability. |
See lighttpd.py in toolsws/wstypes/ for the canonical configuration.
Example configurations
FCGI Flask config
fastcgi.server += ( "/gerrit-patch-uploader" =>
((
"socket" => "/tmp/patchuploader-fcgi.sock",
"bin-path" => "/data/project/gerrit-patch-uploader/src/gerrit-patch-uploader/app.fcgi",
"check-local" => "disable",
"max-procs" => 1,
))
)
For Flask, the fcgi handler looks like this: https://github.com/valhallasw/gerrit-patch-uploader/blob/master/app.fcgi
URL rewrite
- Documentation: ModRewrite
Note that rewrite rules always execute before redirect rules (regardless of their order in the config file).
A common rewrite scenario is a PHP application that uses a front controller script (often index.php) to decide how to process each request based on the path of the request. The url.rewrite-if-not-file directive can be used to do this while still letting lighttpd serve static files from $HOME/public_html normally:
url.rewrite-if-not-file += ( "(.*)" => "/index.php/$0" )
Alternately you can use url.rewrite-once to pick and choose which requests to rewrite:
url.rewrite-once += (
".*\.(js|css)" => "$0",
"^(/.*)" => "/index.php$1"
)
url.rewrite-once += ( "/id/([0-9]+)" => "/index.php?id=$1",
"/link/([a-zA-Z]+)" => "/index.php?link=$1" )
The $0
matches the entire match from the left-hand side regular expression.
Header, mimetype, character encoding, error handler
![]() | Outdated information follows. The version of lighttpd used on Debian Stretch does not allow overriding some settings from the default configuration that were allowed previously. Specifically it is no longer possible to replace an existing value in a config map such as mimetype.assign. See phab:T215683 for more information. |
# Allow Cross-Origin Resource Sharing (CORS)
# Please read up on CORS before setting such headers https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
# If you are handling anything with authentication and/or multiple origins you likely should set the correct header for a specific webresource, instead of setting them for all calls.
setenv.add-response-header += ( "Access-Control-Allow-Origin" => "en.wikipedia.org",
"Access-Control-Allow-Methods" => "POST, GET, OPTIONS" )
# Set cache-control directive for static files and resources
$HTTP["url"] =~ "\.(jpg|gif|png|css|js|txt|ico)$" {
setenv.add-response-header += ( "Cache-Control" => "max-age=86400, public" )
}
mimetype.assign += (
# Add custom mimetype
".bulk" => "text/plain",
# Avoid [[Mojibake]] in JavaScript files
".js" => "application/javascript; charset=utf-8",
# Default MIME type with UTF-8 character encoding
"" => "text/plain; charset=utf-8"
)
# Add custom error-404 handler
server.error-handler-404 += "/error-404.php"
Details: ModSetEnv Mimetype-Assign Error-Handler-404 HTTP access control (CORS)
Directory or file index
# Enable basic directory index
$HTTP["url"] =~ "^/?" {
dir-listing.activate = "enable"
}
# Deny access to hidden files
$HTTP["url"] =~ "/\." {
url.access-deny = ("")
}
Details: ModAccess
Custom index
# Enable index for specific directory
$HTTP["url"] =~ "^/download($|/)" {
dir-listing.activate = "enable"
}
# Custom index file or custom directory generator
index-file.names += ("index.py")
Details: ModDirlisting
Additional debug logging
- Documentation: DebugVariables
Add the line:
# Enable request logging
debug.log-request-handling = "enable"
The debug output will be written to the error.log
file.
Apache-like cgi-bin directory
Add the following stanza:
$HTTP["url"] =~ "^/cgi-bin" {
cgi.assign = ( "" => "" )
}
This does require that cgi-bin be under your public_html rather than alongside it.
To run CGI from any directory under your public_html only need this one line (w/out the $HTTP["url"] .. block)
cgi.assign += ( ".cgi" => "" )
The part to the left is the file name or extension ("" = any). The part to the right is the program which will run it ("" = any). Another example
cgi.assign += ( "script.sh" => "/bin/bash" )
Enable status and statistics
# Source: https://wikitech.wikimedia.org/wiki/Help:Toolforge/Web/Lighttpd#Enable_status_and_statistics
server.modules += ("mod_status")
status.status-url = "/server-status"
status.statistics-url = "/server-statistics"
Details: ModStatus
Web logs
Lighttpd error logs can be found in the tool account's $HOME/error.log
; this includes the standard error of invoked scripts.
Beginning in October 2019, Lighttpd based webservices do not write access logs by default. Tool maintainers will be reminded of this by the following warning when starting a webservice:
****************************************************************************** Note that access.log is no longer enabled by default (see https://w.wiki/9go) ******************************************************************************
If a tool has a need for access log data, it can be enabled by adding the following line in the tool account's $HOME/.lighttpd.conf
(replace <tool> with your tool account name):
accesslog.filename = "/data/project/<tool>/access.log"
You'll need to do a webservice restart
to activate the new settings.
Please note that the web logs are anonymized in accordance with the Wikimedia Foundation’s privacy policy by preventing the tool's webservice from seeing the IP address of the visitor.
Error pages
The proxy provides its own error pages when your application returns HTTP/500, HTTP/502 or HTTP/503. This behavior is intended to be friendly to tool users, but it can also make debugging more difficult for tool maintainers. phab:T103662 may change the default behavior if consensus is reached.
Changing the document root
With symlinks
The easiest way to change the document root is with a symlink to $HOME/public_html
. However, before this is done, the existing public_html directory needs to be deleted or moved. This is because ln -s $HOME/foo $HOME/public_html
would make $HOME/public_html/foo
if the $HOME/public_html
directory exists. Deleting the directory is done with rm -rf $HOME/public_html
to delete the directory and all of its contents, if you do not need anything in there, or with mv $HOME/public_html $HOME/oldpublic_html
to move the directory to $HOME/oldpublic_html
.
To make the symlink, ln -s $HOME/foo $HOME/public_html/
would make the contents of $HOME/foo
available in $HOME/public_html
. Replace $HOME/foo
in the example with the directory you want lighttpd to serve.
With aliases
Note that you cannot add an alias URL for /toolname
because this has already been defined and can't be overridden in the local conf file.
PHP
The lighttpd
webservice type includes support for running PHP scripts from files with a .php
in $HOME/public_html
using a FastCGI helper process.
PHP ini settings can be changed for your tool by creating a $HOME/public_html/.user.ini
configuration file. This can be useful for setting the default timezone with date.timezone
. See the documentation at php.net for more details.
Communication and support
Support and administration of the WMCS resources is provided by the Wikimedia Foundation Cloud Services team and Wikimedia movement volunteers. Please reach out with questions and join the conversation:
- Chat in real time in the IRC channel #wikimedia-cloud connect, the bridged Telegram group, or the bridged Mattermost channel
- Discuss via email after you subscribed to the cloud@ mailing list