streaming via lighttpd is way much slower than streaming via apache
Added by phattran911 about 15 years ago
It is happening to my video site asianupload.com. When the site gets about 250 or more, streaming via lighttpd is very slow. My site is a video streaming site using clip-share script.
The OS is CentOS 5.4 x86_64. Here is an example
-Streaming via Apache
http://asianupload.com/test.htm
-Streaming via lighttpd
http://www.asianupload.com/video/4989/Hoa-Trong-Bao-14b
Again it only happens when there are over 250 connections. The server was using lighttpd. 1.4.22. After that I installed 1.4.26 and it still happens. I have disabled the connection.kbytes-per-second but it won't help.
Is it a bug in lighttpd, or what do I need to do to solve this issue?
Here is the lighttpd.conf[code]
- lighttpd configuration file #
- use it as a base for lighttpd 1.0.0 and above #
- $Id: lighttpd.conf,v 1.7 2004/11/03 22:26:05 weigon Exp $
- Options you really have to take care of ####################
- modules to load
- at least mod_access and mod_accesslog should be loaded
- all other module should only be loaded if really neccesary
- - saves some time
- - saves memory
server.modules = ( - "mod_rewrite",
- "mod_redirect",
- "mod_alias",
"mod_access", - "mod_cml",
- "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_flv_streaming", - "mod_h264_streaming",
"mod_evasive", - "mod_rrdtool",
"mod_accesslog" )
- a static document-root, for virtual-hosting take look at the
- server.virtual-* options
server.document-root = "/home/www3/public_html/flvideo/lighty/"
#server.document-root = "/var/www/lighttpd/" - 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" ) - mod secdownload settings
secdownload.secret = "raidergiant"
secdownload.document-root = "/home/www3/public_html/flvideo/"
secdownload.uri-prefix = "/vid/"
secdownload.timeout = 7200
- extension of flv files
flv-streaming.extensions = ( ".flv" )
- extension of mp4 files
#h264-streaming.extensions = ( ".mp4", ".flv" )
#connection.kbytes-per-second = 500
evasive.max-conns-per-ip = 3
- set the event-handler (read the performance section in the manual)
- server.event-handler = "freebsd-kqueue" # needed on OS X
- mimetype mapping
mimetype.assign = (
".flv" => "video/x-flv",
".mp4" => "video/mp4",
".rpm" => "application/x-rpm",
".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",
)
- Use the "Content-Type" extended attribute to obtain mime type if possible
#mimetype.use-xattr = "enable"
- send a different Server: header
- be nice and keep it at lighttpd
- server.tag = "lighttpd"
- 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" )
$HTTP["url"] =~ "\.pdf$" {
server.range-requests = "disable"
}
- 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 #######
- bind to port (default: 80)
server.port = 81
- bind to localhost (default: all interfaces)
#server.bind = "127.0.0.1"
- 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"
- virtual hosts ##
- If you want name-based virtual hosting add the next three settings and load
- mod_simple_vhost ##
- document-root =
- virtual-server-root + virtual-server-default-host + virtual-server-docroot
- or
- virtual-server-root + http-host + virtual-server-docroot
##
#simple-vhost.server-root = "/srv/www/vhosts/"
#simple-vhost.default-host = "www.example.org"
#simple-vhost.document-root = "/htdocs/"
- Format: <errorfile-prefix><status-code>.html
> ..../status-404.html for 'File not found'"
#server.errorfile-prefix = "/usr/share/lighttpd/errors/status
#server.errorfile-prefix = "/srv/www/errors/status-"
- virtual directory listings
#dir-listing.activate = "enable" - select encoding for directory listings
#dir-listing.encoding = "utf-8"
- enable debugging
#debug.log-request-header = "enable"
#debug.log-response-header = "enable"
debug.log-request-handling = "enable"
debug.log-file-not-found = "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 = "lighttpd"
- change uid to <uid> (default: don't care)
#server.groupname = "lighttpd"
- compress module
#compress.cache-dir = "/var/cache/lighttpd/compress/"
#compress.filetype = ("text/plain", "text/html")
- proxy module
- read proxy.txt for more info
#proxy.server = ( ".php" =>
- ( "localhost" =>
- (
- "host" => "192.168.0.101",
- "port" => 80
- )
- )
- )
- fastcgi module
- read fastcgi.txt for more info
- for PHP don't forget to set cgi.fix_pathinfo = 1 in the php.ini
#fastcgi.server = ( ".php" =>
- ( "localhost" =>
- (
- "socket" => "/var/run/lighttpd/php-fastcgi.socket",
- "bin-path" => "/usr/bin/php-cgi"
- )
- )
- )
- CGI module
#cgi.assign = ( ".pl" => "/usr/bin/perl",
- ".cgi" => "/usr/bin/perl" ) #
- SSL engine
#ssl.engine = "enable"
#ssl.pemfile = "/etc/ssl/private/lighttpd.pem"
- status module
#status.status-url = "/server-status"
#status.config-url = "/server-config"
- auth module
- read authentication.txt for more info
#auth.backend = "plain"
#auth.backend.plain.userfile = "lighttpd.user"
#auth.backend.plain.groupfile = "lighttpd.group"
#auth.backend.ldap.hostname = "localhost"
#auth.backend.ldap.base-dn = "dc=my-domain,dc=com"
#auth.backend.ldap.filter = "(uid=$)"
- (
- "method" => "digest",
- "realm" => "download archiv",
- "require" => "user=jan"
- ),
- "/server-config" =>
- (
- "method" => "digest",
- "realm" => "download archiv",
- "require" => "valid-user"
- )
- )
- url handling modules (rewrite, redirect, access)
#url.rewrite = ( "^/$" => "/server-status" )
#url.redirect = ( "^/wishlist/(.+)" => "http://www.123.org/$1" ) - both rewrite/redirect support back reference to regex conditional using %n
#$HTTP["host"] =~ "^www\.(.*)" {
- url.redirect = ( "^/(.*)" => "http://%1/$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 = "/srv/www/vhosts/%3/htdocs/"
- expire module
#expire.url = ( "/buggy/" => "access 2 hours", "/asdhas/" => "access plus 1 seconds 2 minutes")
- ssi
#ssi.extension = ( ".shtml" )
- rrdtool
#rrdtool.binary = "/usr/bin/rrdtool"
#rrdtool.db-name = "/var/lib/lighttpd/lighttpd.rrd"
- setenv
#setenv.add-request-header = ( "TRAV_ENV" => "mysql://user@host/db" )
#setenv.add-response-header = ( "X-Secret-Message" => "42" )
- for mod_trigger_b4_dl
- trigger-before-download.gdbm-filename = "/var/lib/lighttpd/trigger.db"
- trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
- trigger-before-download.trigger-url = "^/trigger/"
- trigger-before-download.download-url = "^/download/"
- trigger-before-download.deny-url = "http://127.0.0.1/index.html"
- trigger-before-download.trigger-timeout = 10
- for mod_cml
- don't forget to add index.cml to server.indexfiles
- cml.extension = ".cml"
- cml.memcache-hosts = ( "127.0.0.1:11211" )
- 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")
- include
#include /etc/lighttpd/lighttpd-inc.conf
- same as above if you run: "lighttpd -f /etc/lighttpd/lighttpd.conf"
#include "lighttpd-inc.conf"
- include_shell
#include_shell "echo var.a=1"
- the above is same as:
#var.a=1
- include configuration snippets, usually provided by packages
include_shell "find /etc/lighttpd/conf.d -maxdepth 1 -name '*.conf' -exec cat {} \;"
[/code]