|
Montag, 11. Mai 2009
Ausgangssituation ist ein mit VMware Server virtualisierter Webserver auf Basis von Ubuntu 8.10 Server. Auf ihm laufen 3 Webanwendungen, 2x PHP und 1x Perl. Hostsystem ist ein DUAL Pentium 3. Das is war mal richtig Performance, ... vor ungefähr 10 Jahren.
Problematisch ist ...
... ,dass eine PHP-Applikation so dermaßen schlecht programmiert ist, dass die CPU-Last selbst bei einem einzigen User auf 100% ansteigt. Die Antwortzeiten lagen bei über 6 sec. Die anderen beiden Anwendungen begnügen sich mit wenig Systemressourcen.
Bisher lief alles auf einem apache2, mehr schlecht als recht.
Nun kommt Lighttpd zum Einsatz. Ich nehme mal so viel vorweg - nach dem Wechsel rennt läuft die Anwendung um einiges schneller.
Installation auf Ubuntu (getestet mit Hardy 8.10; sollte laut Ubuntu-Wiki auch mit allen Versionen ab Dapper 6.06 funktionieren)
apt-get update
apt-get install lighttpd php5-cgi
Soo, als nächstes aktivieren wir PHP
lighty-enable-mod fastcgi
und Perl
lighty-enable-mod cgi
Konfig Die Hauptkonfig befindet sich unter "/etc/lighttpd/lighttpd.conf" Für OTRS gibt es eine extra Konfig, siehe unter der lighttpd.conf. Nach dem bearbeiten der Konfig, muss der lighttpd neu gestartet werden
/etc/init.d/lighttpd restart
# /etc/lightttpd/lighttpd.conf # Debian lighttpd configuration file #
############ Options you really have to take care of ####################
## modules to load # mod_access, mod_accesslog and mod_alias are loaded by default # all other module should only be loaded if neccesary # - saves some time # - saves memory
server.modules = ( "mod_access", "mod_alias", "mod_accesslog", "mod_compress", "mod_rewrite", "mod_simple_vhost" # "mod_redirect", # "mod_evhost", # "mod_usertrack", # "mod_rrdtool", # "mod_webdav", # "mod_expire", # "mod_flv_streaming", # "mod_evasive" )
## a static document-root, for virtual-hosting take look at the ## server.virtual-* options server.document-root = "/var/www/"
## where to upload files to, purged daily. server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
## where to send error-messages to server.errorlog = "/var/log/lighttpd/error.log"
## files to check for if .../ is requested index-file.names = ( "index.php", "index.html", "index.htm", "default.htm", "index.lighttpd.html" )
## Use the "Content-Type" extended attribute to obtain mime type if possible # mimetype.use-xattr = "enable"
#mimetype mapping
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" => "audio/x-wav", ".wav" => "audio/x-wav", ".gif" => "image/gif", ".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; charset=ISO-8859-1", ".htm" => "text/html; charset=ISO-8859-1", ".js" => "text/javascript; charset=ISO-8859-1", ".asc" => "text/plain", ".c" => "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" )
#### accesslog module accesslog.filename = "/var/log/lighttpd/access.log"
## deny access the file-extensions # # ~ is for backupfiles from vi, emacs, joe, ... # .inc is often used for code includes which should in general not be part # of the document-root url.access-deny = ( "~", ".inc" )
## # which extensions 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" )
######### Options that are good to be but not neccesary to be changed #######
## Use ipv6 only if available. include_shell "/usr/share/lighttpd/use-ipv6.pl"
## bind to port (default: 80) server.port = 80
## bind to localhost only (default: all interfaces) ## server.bind = "localhost"
## error-handler for status 404 #server.error-handler-404 = "/error-handler.html" #server.error-handler-404 = "/error-handler.php"
## to help the rc.scripts server.pid-file = "/var/run/lighttpd.pid"
## ## Format: <errorfile-prefix><status>.html ## -> ..../status-404.html for 'File not found' #server.errorfile-prefix = "/var/www/"
## virtual directory listings #dir-listing.encoding = "utf-8" dir-listing.encoding = "iso8859-1" server.dir-listing = "enable"
## send unhandled HTTP-header headers to error-log #debug.dump-unknown-headers = "enable"
### only root can use these options # # chroot() to directory (default: no chroot() ) #server.chroot = "/"
## change uid to <uid> (default: don't care) server.username = "www-data"
## change uid to <uid> (default: don't care) server.groupname = "www-data"
#### compress module compress.cache-dir = "/var/cache/lighttpd/compress/" compress.filetype = ("text/plain", "text/html", "application/x-javascript", "text/css")
#### url handling modules (rewrite, redirect, access) # url.rewrite = ( "^/$" => "/server-status" ) # url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" )
# # define a pattern for the host url finding # %% => % sign # %0 => domain name + tld # %1 => tld # %2 => domain name without tld # %3 => subdomain 1 name # %4 => subdomain 2 name # # evhost.path-pattern = "/home/storage/dev/www/%3/htdocs/"
#### expire module # expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
#### rrdtool # rrdtool.binary = "/usr/bin/rrdtool" # rrdtool.db-name = "/var/www/lighttpd.rrd"
#### variable usage: ## variable name without "." is auto prefixed by "var." and becomes "var.bar" #bar = 1 #var.mystring = "foo"
## integer add #bar += 1 ## string concat, with integer cast as string, result: "www.foo1.com" #server.name = "www." + mystring + var.bar + ".com" ## array merge #index-file.names = (foo + ".php") + index-file.names #index-file.names += (foo + ".php")
#### external configuration files ## mimetype mapping #include_shell "/usr/share/lighttpd/create-mime.assign.pl"
## load enabled configuration files, ## read /etc/lighttpd/conf-available/README first include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
#### handle Debian Policy Manual, Section 11.5. urls ## by default allow them only from localhost ## (This must come last due to #445459) ## Note: =~ "127.0.0.1" works with ipv6 enabled, whereas == "127.0.0.1" doesn't $HTTP["remoteip"] =~ "127.0.0.1" { alias.url += ( "/doc/" => "/usr/share/doc/", "/images/" => "/usr/share/images/" ) $HTTP["url"] =~ "^/doc/|^/images/" { dir-listing.activate = "enable" } }
alias.url += ("/otrs/" => "/opt/otrs/bin/cgi-bin/" ) alias.url += ("/otrs-web/" => "/opt/otrs/var/httpd/htdocs/" )
$HTTP["url"] =~ "^/otrs/" { cgi.assign = ( "" => "" ) index-file.names = ("index.pl", "index.html") }
So, jetzt die Konfig für OTRS, abgespeichert unter /etc/lighttpd/conf-enabled/otrs
$HTTP["host"] == "FQDN" { url.rewrite = ( "^/$" => "/otrs" ) alias.url += ( "/otrs-web" => "/opt/otrs/var/httpd/htdocs", "/otrs" => "/opt/otrs/bin/cgi-bin", ) $HTTP["url"] =~ "^/otrs/" { cgi.assign = ("" => "") index-file.names = ("index.pl") } debug.log-request-handling = "enable" }
A very big Problem
Falls eine Anwendung im HTML-Header den Zeichensatz "UTF-8" angibt, schlägt die Interpretation fehl, Umlaute werden nicht richtig angezeigt. Das selbe Problem hab ich im apache2 durch folgenden Eintrag in die "/etc/apache2/conf.d/charset" gelöst:
AddDefaultCharset ISO-8859-1
Unter lighttpd bekomme ich das nicht hin ...
Das wars erstmal.
Thanks to http://wiki.ubuntuusers.de/lighttpd
|