|
|
CVS-Version: $Id: ChangeLog,v 1.18 2004/04/09 22:08:19 weigon Exp $
|
|
|
|
|
|
Feature Requests:
|
|
|
* complex
|
|
|
- limit read-queue to 64k and use traffic-shaping cap
|
|
|
- if fastcgi/cgi are not ready ignore incoming FDEVENT_IN for a while
|
|
|
-> reduce memory usage
|
|
|
- userdir + suphp
|
|
|
-> internal config-hash
|
|
|
- don't strip // from PATHINFO
|
|
|
- TLS
|
|
|
|
|
|
* moderate
|
|
|
- errorlog piping
|
|
|
- gracefull restart
|
|
|
- mod_accesslog_mysql
|
|
|
- mod_auth_mysql
|
|
|
- IPv6 for FastCGI
|
|
|
- man-page for spawn-fcgi
|
|
|
- server.base-directory
|
|
|
|
|
|
* simple
|
|
|
- file-mapping for alias
|
|
|
- hostnames for remote-FastCGI
|
|
|
- cgi exec via shell
|
|
|
- crash in read-post
|
|
|
- remove default port from Host:
|
|
|
|
|
|
15.06.2005 20:10 - 1.3.15
|
|
|
- mod_cml, mod_trigger_b4_dl
|
|
|
|
|
|
added both plugins
|
|
|
|
|
|
check http://trac.lighttpd.net/trac/log/branches/lighttpd-1.3.x/ for the
|
|
|
rest
|
|
|
|
|
|
15.06.2005 13:59 - 1.3.14
|
|
|
- documentation
|
|
|
|
|
|
more fix-ups for mod_fastcgi, configuration and mysql-vhost
|
|
|
|
|
|
- tests
|
|
|
|
|
|
unified test-scripts to use the same framework
|
|
|
|
|
|
14.06.2005 23:38
|
|
|
- documentation
|
|
|
|
|
|
updated docs for mod_proxy and mod_scgi
|
|
|
|
|
|
12.06.2005 12:55 - pre-release
|
|
|
- mod_fastcgi
|
|
|
|
|
|
fixed event handling after delayed connect
|
|
|
|
|
|
make retry timeout configurable
|
|
|
|
|
|
removed unused events if we switch to FCGI_STATE_READ
|
|
|
|
|
|
disabled adaptive spawning
|
|
|
|
|
|
- mod_proxy
|
|
|
|
|
|
added hash-based and round-robin balancing
|
|
|
|
|
|
use port 80 is default
|
|
|
|
|
|
fixed errorhandling on connection refused
|
|
|
|
|
|
fixed usage of dead hosts [285]
|
|
|
|
|
|
- mod_cgi
|
|
|
|
|
|
send 500 if the CGI died before we received any data
|
|
|
|
|
|
redirect the stderr of CGI to our errorlog
|
|
|
|
|
|
cleanup cgi-env after we finished our request
|
|
|
|
|
|
- uri-handling
|
|
|
|
|
|
don't replace + to space before the ?query part
|
|
|
|
|
|
accept characters > 127 again
|
|
|
|
|
|
- mod_auth
|
|
|
|
|
|
fixed segfault if debugging is enabled [371]
|
|
|
|
|
|
- mod_scgi
|
|
|
|
|
|
added SCGI support for python + WSGI [381], [382]
|
|
|
|
|
|
- mod_setenv
|
|
|
|
|
|
fixed conditionals for setenv.add-environment [109]
|
|
|
|
|
|
- generic
|
|
|
|
|
|
report an error on duplicate config-keys in configfile [267]
|
|
|
|
|
|
call initgroups to join the groups of the users [239]
|
|
|
|
|
|
fixed automatic redirects if SSL is used
|
|
|
|
|
|
fixed compilation on Solaris [283]
|
|
|
|
|
|
disable accept-filtering on FreeBSD if ssl is used [320]
|
|
|
|
|
|
fixed handling of range-request larger than 2Gb
|
|
|
|
|
|
fixed comparisions of mime-types to case-insensitive [266]
|
|
|
|
|
|
added quotation of ETags [376], [378]
|
|
|
|
|
|
06.03.2005 12:22 - 1.3.13
|
|
|
- mod_accesslog
|
|
|
|
|
|
fixed NULL dereference on logfile cycling if accesslog is not set
|
|
|
|
|
|
05.03.2005 17:30
|
|
|
- mod_proxy
|
|
|
|
|
|
handle delayed connect in the same way as mod_fastcgi
|
|
|
|
|
|
03.03.2005 19:00
|
|
|
- freebsd
|
|
|
|
|
|
handle remote-close gracefully
|
|
|
|
|
|
- ssl
|
|
|
|
|
|
handle remote-close gracefully
|
|
|
|
|
|
- dir-listing
|
|
|
|
|
|
added dir-listing.hide-dotfiles and added an option to set css files
|
|
|
|
|
|
02.03.2005 19:41
|
|
|
- fastcgi
|
|
|
|
|
|
fixed path-info for prefix-patterns
|
|
|
|
|
|
fixed path-info for PHP
|
|
|
|
|
|
02.03.2005 14:47 - 1.3.12
|
|
|
- mod_fastcgi
|
|
|
|
|
|
fixed handling of dead fastcgi process which sent their SIGCLD to
|
|
|
initd and not to lighttpd. Moving the daemonize before starting
|
|
|
the fastcgi procs fixes this.
|
|
|
|
|
|
01.03.2005 23:59
|
|
|
- irix
|
|
|
|
|
|
fixed minor compile issues with MIPSpro
|
|
|
|
|
|
01.03.2005 11:57
|
|
|
- request-handling
|
|
|
|
|
|
handle most duplicate headers as 400, Bug #25
|
|
|
|
|
|
- mod_fastcgi
|
|
|
|
|
|
added more checks
|
|
|
|
|
|
28.02.2005 18:26
|
|
|
- mod_expire
|
|
|
|
|
|
don't ignore 'modification' any more, Bug #39
|
|
|
only handles static files
|
|
|
|
|
|
- last-modified
|
|
|
|
|
|
really compare timestamps, Bug #34
|
|
|
|
|
|
28.02.2005 11:54
|
|
|
- buffer
|
|
|
|
|
|
rewrote int2buffer functions
|
|
|
|
|
|
simplified path_simplify
|
|
|
|
|
|
- pid-file
|
|
|
|
|
|
ignore EACCESS on unlink
|
|
|
|
|
|
28.02.2005 10:35
|
|
|
- mod_fastcgi
|
|
|
|
|
|
accept \n\n, Bug #32
|
|
|
|
|
|
- cygwin
|
|
|
|
|
|
moved functions used by plugin and main-program to *-glue.c
|
|
|
|
|
|
- lemon
|
|
|
|
|
|
removed warnings about shadowed variables
|
|
|
|
|
|
28.02.2005 01:00
|
|
|
- ssl
|
|
|
|
|
|
added ssl.ca-file, Bug #19
|
|
|
|
|
|
improved error-messages
|
|
|
|
|
|
27.02.2005 23:48
|
|
|
- test cases
|
|
|
|
|
|
rewrote to test-framework to use Perl + Test::More
|
|
|
ported more test-cases
|
|
|
|
|
|
22.02.2005 01:20
|
|
|
- mod_fastcgi
|
|
|
|
|
|
replaced inet_addr by inet_aton
|
|
|
|
|
|
- request-handling
|
|
|
|
|
|
fixed segfault if host is empty
|
|
|
|
|
|
20.02.2005 20:05
|
|
|
- cgi
|
|
|
|
|
|
fixed cgi.assign for empty handlers again
|
|
|
|
|
|
20.02.2005 16:54 - 1.3.11
|
|
|
- request handling
|
|
|
|
|
|
ignore \r\n before request-line in keep-alive requests (Bug #13)
|
|
|
|
|
|
- cgi, fastcgi
|
|
|
|
|
|
added REMOTE_PORT and SERVER_ADDR
|
|
|
|
|
|
fixed check for broken status-code in nph-scripts (Bug #14)
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
fixed passing cmdline options the spawned binary (Bug #16)
|
|
|
|
|
|
fixed failed reconnects (Bug #9)
|
|
|
|
|
|
- macos x
|
|
|
|
|
|
fixed build on max
|
|
|
|
|
|
- mod_secdownload
|
|
|
|
|
|
parse conditional secure-download.secret (Bug #8)
|
|
|
|
|
|
- mod_userdir
|
|
|
|
|
|
redirect if username is not followed by / (Bug #15)
|
|
|
|
|
|
13.02.2005 17:33
|
|
|
- mod_auth
|
|
|
|
|
|
fix crash if require, realm or method are empty (Bug #5)
|
|
|
|
|
|
13.02.2005 14:52
|
|
|
- network
|
|
|
|
|
|
handle EPIPE and ECONNRESET as 'client has closed connection' in writev()
|
|
|
(Bug #1)
|
|
|
|
|
|
- macosx
|
|
|
|
|
|
compile error on MacOS X due to missing environ (patch by Johan S<>rensen)
|
|
|
(Bug #2)
|
|
|
|
|
|
- indexfiles
|
|
|
|
|
|
append the detected indexfile only once to uri.path (reported by Thomas
|
|
|
Seifert)
|
|
|
(Bug #3)
|
|
|
|
|
|
06.02.2005 15:16 - 1.3.10
|
|
|
- fastcgi
|
|
|
|
|
|
display a error-message if a hostname if specified in fastcgi.server->host
|
|
|
we need an IP here
|
|
|
|
|
|
- debug
|
|
|
|
|
|
added debug.log-state-handling
|
|
|
|
|
|
- spawn-fcgi
|
|
|
|
|
|
accept a full commandline for spawning
|
|
|
|
|
|
06.02.2005 12:50
|
|
|
- fastcgi
|
|
|
|
|
|
fixed openssl handling
|
|
|
|
|
|
- network_freebsd_sendfilev
|
|
|
|
|
|
gracefull handling of connections closed on client-side
|
|
|
removed debug-message
|
|
|
|
|
|
06.02.2005 01:44 - 1.3.9
|
|
|
- documentation
|
|
|
|
|
|
added docs for SSL setup and mod_status
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
fixed config handling on PowerPC for local-spawning
|
|
|
|
|
|
05.02.2005 15:14
|
|
|
- fastcgi
|
|
|
|
|
|
added bin-environment to setup the environment of the spawned process
|
|
|
|
|
|
added bin-copy-environment to copy only the specified set of options
|
|
|
from the old environment
|
|
|
|
|
|
added handling of cmd-line options to bin-path
|
|
|
|
|
|
- setenv
|
|
|
|
|
|
fixed crashed in setenv.add-response-header
|
|
|
|
|
|
04.02.2005 18:09
|
|
|
- configure
|
|
|
|
|
|
fixed docs for --with-mysql
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
improved performance of building the header (drop strlen())
|
|
|
|
|
|
04.02.2005 01:59
|
|
|
- cgi
|
|
|
|
|
|
don't send file on error
|
|
|
|
|
|
check if cgi-handler exists before executing it
|
|
|
|
|
|
added support for nph-...
|
|
|
|
|
|
02.02.2005 21:18 - pre-release
|
|
|
- request parsing
|
|
|
|
|
|
handle invalid characters in URI
|
|
|
|
|
|
02.02.2005 15:12
|
|
|
- makefiles
|
|
|
|
|
|
dropped unused header files from the distribution
|
|
|
|
|
|
02.02.2005 14:18
|
|
|
- fastcgi
|
|
|
|
|
|
delete sockets on shutdown
|
|
|
|
|
|
- http/1.1
|
|
|
|
|
|
adding option to disable http/1.1
|
|
|
|
|
|
01.02.2005 12:03
|
|
|
- cygwin
|
|
|
|
|
|
fixed plugins_load to use the right extensions again
|
|
|
removed mmap check
|
|
|
added ssl support
|
|
|
|
|
|
01.02.2005 01:49
|
|
|
- configure
|
|
|
|
|
|
make check for valgrind.h covered by --with-valgrind
|
|
|
|
|
|
- mod_localizer, mod_maps
|
|
|
|
|
|
remove both plugins from the distribution
|
|
|
|
|
|
- file-not-found
|
|
|
|
|
|
handle file not found again
|
|
|
|
|
|
30.01.2005 16:44
|
|
|
- HEAD requests
|
|
|
|
|
|
don't send content on dynamic HEAD requests with status 200
|
|
|
|
|
|
30.01.2005 15:16 - 1.3.8
|
|
|
- network-handler
|
|
|
|
|
|
remove debug output on writev() if the remote side closed the connection
|
|
|
|
|
|
- directory index
|
|
|
|
|
|
handle EACCES correctly
|
|
|
|
|
|
29.01.2005 15:16 - pre-release
|
|
|
- mod_alias
|
|
|
|
|
|
fixed mod_alias + pathinfo handling
|
|
|
|
|
|
- mod_accesslog
|
|
|
|
|
|
added access-log to syslog patch from allan
|
|
|
|
|
|
28.01.2005 17:30
|
|
|
- directory redirect without Host-header
|
|
|
|
|
|
use server-ip instead of client-ip for the Location:
|
|
|
|
|
|
- fastcgi + pathinfo
|
|
|
|
|
|
if fastcgi-auth redirects to a directory which doesn't exist handle it
|
|
|
correctly (bug introduced in 1.3.8)
|
|
|
|
|
|
- requesting directories
|
|
|
|
|
|
clean physical.path if directory is requested and dir-listing is disabled
|
|
|
send 403 again (buf introduced in 1.3.8)
|
|
|
|
|
|
28.01.2005 12:08
|
|
|
- fastcgi
|
|
|
|
|
|
ignore FDEVENT_HUP for unix-sockets as a simple read + timeout will do
|
|
|
the job anyway
|
|
|
|
|
|
22.01.2005 20:28 - pre-release
|
|
|
- fastcgi
|
|
|
|
|
|
send content and headers if authorizer mode is used
|
|
|
|
|
|
use a new connection if connection is died to fastcgi
|
|
|
and we have not used it yet
|
|
|
|
|
|
18.01.2005 21:21 - pre-release
|
|
|
- plugins
|
|
|
|
|
|
added version-id to plugins to detect plugins which are not up-to-date
|
|
|
|
|
|
16.01.2005 23:11
|
|
|
- fastcgi
|
|
|
|
|
|
fixed write-failed after crash of fastcgi-child
|
|
|
|
|
|
16.01.2005 20:43
|
|
|
- setenv
|
|
|
|
|
|
fixed setenv.add-environment
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
fixed authorizer + added testcases
|
|
|
|
|
|
16.01.2005 17:40 - pre-release
|
|
|
- mod_status
|
|
|
|
|
|
beautified mod_status
|
|
|
|
|
|
- mod_setenv
|
|
|
|
|
|
added setenv.add-environment
|
|
|
|
|
|
- timeouts
|
|
|
|
|
|
add timeout to read-post
|
|
|
|
|
|
15.01.2005 12:57
|
|
|
- debug
|
|
|
|
|
|
added debug options to log
|
|
|
- missing files
|
|
|
- request header
|
|
|
- response header
|
|
|
- request handling
|
|
|
|
|
|
added a more usefull error message for the status-code changes in the
|
|
|
request parser
|
|
|
|
|
|
- server announcement
|
|
|
|
|
|
set Server: header for dynamic content too
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
fixed double free
|
|
|
|
|
|
don't crash on FDEVENT_ERR
|
|
|
|
|
|
added a comment for EAGAIN on connect()
|
|
|
|
|
|
08.01.2005 17:45
|
|
|
- ssl
|
|
|
|
|
|
report an error if ssl.engine is enable but no ssl support compiled in
|
|
|
|
|
|
08.01.2005 12:23
|
|
|
- mod_status
|
|
|
|
|
|
added request time to the output
|
|
|
|
|
|
(late changelog) added host and filename to the output (fobax)
|
|
|
(late changelog) HTMLalized the output (fobax)
|
|
|
|
|
|
06.01.2005 19:51 - pre-release
|
|
|
- error-handler
|
|
|
|
|
|
let the error-handler handle 403 requests too
|
|
|
|
|
|
make the error-handler setable by a module
|
|
|
|
|
|
- error-pages
|
|
|
|
|
|
reworked the error-page handling
|
|
|
|
|
|
05.01.2005 13:10
|
|
|
- keep-alive handling
|
|
|
|
|
|
made sure that keep-alive is really handled correctly
|
|
|
|
|
|
04.01.2005 17:02
|
|
|
- mod_setenv
|
|
|
|
|
|
added a module to added request and response headers on the fly
|
|
|
|
|
|
- error-log
|
|
|
|
|
|
send error log to syslog() if no errorlogfile is specified (again)
|
|
|
|
|
|
02.01.2005 22:44 - pre-release
|
|
|
- response handling
|
|
|
|
|
|
cut of body for status 301, 304 and 205
|
|
|
|
|
|
- buffer
|
|
|
|
|
|
optimized all _hex functions (Silvan Minghetti)
|
|
|
|
|
|
02.01.2005 20:32
|
|
|
- fastcgi
|
|
|
|
|
|
if bin-path is not specified, don't die (bug introduced in the last pre-rel)
|
|
|
|
|
|
- auth
|
|
|
|
|
|
if userfile is empty don't auth.
|
|
|
|
|
|
02.01.2005 19:06
|
|
|
- mod_compress
|
|
|
|
|
|
fixed off by one if cache-dir is not set
|
|
|
|
|
|
02.01.2005 16:10
|
|
|
- conditional config
|
|
|
|
|
|
fixed !~ and !=
|
|
|
|
|
|
- buffer
|
|
|
|
|
|
copy empty buffers correctly
|
|
|
|
|
|
31.12.2004 17:45
|
|
|
- ipv6 + pidfile
|
|
|
|
|
|
don't complain if we can't remove the pidfile (Silvan Minghetti)
|
|
|
|
|
|
remove ipv6 option from the commandline of lighttpd doesn't support
|
|
|
ipv6 (Silvan Minghetti)
|
|
|
|
|
|
31.12.2004 15:41 - pre-release
|
|
|
- kqueue
|
|
|
|
|
|
simplified event handling (adam)
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
fixed div-by-zero bugs in the adaptive process spawning
|
|
|
|
|
|
- mysql-vhost
|
|
|
|
|
|
added mysql-vhost (Christer Holgersson)
|
|
|
|
|
|
30.12.2004 19:09
|
|
|
- fastcgi
|
|
|
|
|
|
added adaptive spawning of FastCGI processes
|
|
|
|
|
|
- traffic shaping
|
|
|
|
|
|
added traffic shaping per virtual server
|
|
|
|
|
|
28.12.2004 23:26
|
|
|
- traffic shaping
|
|
|
|
|
|
added traffic shaping per connection
|
|
|
|
|
|
25.12.2004 22:58
|
|
|
- mod_status
|
|
|
|
|
|
fixed status.url again (Timo)
|
|
|
|
|
|
21.12.2004 11:29
|
|
|
- configure
|
|
|
|
|
|
added check for signal and select (compile fix for netbsd 1.4 and 1.5)
|
|
|
|
|
|
11.12.2004 12:38 - 1.3.7
|
|
|
- fastcgi + php
|
|
|
|
|
|
retry to connect to another PHP child if one of them dies after
|
|
|
connect
|
|
|
|
|
|
- cgi + multipart
|
|
|
|
|
|
don't transform CONTENT_TYPE to HTTP_CONTENT_TYPE
|
|
|
|
|
|
- debian
|
|
|
|
|
|
more cleanup, updated changelog, added more deps and suggests
|
|
|
(Chris Brown)
|
|
|
|
|
|
10.12.2004 22:33
|
|
|
- event handler
|
|
|
|
|
|
fixed crashes in kqueue
|
|
|
|
|
|
10.12.2004 13:57 - pre-release
|
|
|
- mod_status
|
|
|
|
|
|
fixed wraparound in total requests and total traffic
|
|
|
|
|
|
- debian
|
|
|
|
|
|
updated licence and packaging
|
|
|
|
|
|
- security
|
|
|
|
|
|
call setgroups() to get rid of all groups
|
|
|
|
|
|
- ssl
|
|
|
|
|
|
handle SSL_shutdown() == 0 correctly
|
|
|
|
|
|
fixed openssl detection in configure
|
|
|
|
|
|
fixed handling of chunked encoding
|
|
|
|
|
|
- request handling
|
|
|
|
|
|
handle Connection: keep-alive correctly (case as not ignored)
|
|
|
|
|
|
21.11.2004 02:39
|
|
|
- windows
|
|
|
|
|
|
merged basic native windows port (compiles with mingw)
|
|
|
|
|
|
20.11.2004 18:43
|
|
|
- conditional
|
|
|
|
|
|
ported
|
|
|
- cgi
|
|
|
- secdownload
|
|
|
- expire
|
|
|
- localizer
|
|
|
- usertrack
|
|
|
- status
|
|
|
- proxy
|
|
|
|
|
|
- server-tag
|
|
|
|
|
|
Server: ... can now be specified by server.tag = "..."
|
|
|
|
|
|
- spawn-fcgi
|
|
|
|
|
|
fixed typo in usage text
|
|
|
|
|
|
- ssl
|
|
|
|
|
|
fixed detection of libs and headers
|
|
|
|
|
|
05.11.2004 16:01
|
|
|
- fastcgi
|
|
|
|
|
|
added more usefull error messages
|
|
|
|
|
|
04.11.2004 23:01
|
|
|
- ssi
|
|
|
|
|
|
added support for ${...}
|
|
|
|
|
|
03.11.2004 14:51 - 1.3.6
|
|
|
- fastcgi
|
|
|
|
|
|
added spawn-fcgi to the distribution
|
|
|
added spawn-local-fastcgi yourself ( bin-path )
|
|
|
|
|
|
03.11.2004 11:22
|
|
|
- accesslog
|
|
|
|
|
|
don't cycle accesslogs of external processes are used
|
|
|
|
|
|
02.11.2004 15:34
|
|
|
- fastcgi
|
|
|
|
|
|
handle END-OF-REQUEST correctly if chunk-encoding is not used
|
|
|
|
|
|
02.11.2004 10:53
|
|
|
- internal redirects
|
|
|
|
|
|
fixed handling of query strings in internal redirects for directories
|
|
|
|
|
|
02.11.2004 09:54 - pre-release
|
|
|
- cgi
|
|
|
|
|
|
add REMOTE_USER, suppress AUTHORIZATION
|
|
|
handle payloads > 4k
|
|
|
|
|
|
- mod_alias
|
|
|
|
|
|
fixed url checking
|
|
|
|
|
|
- follow-symlink
|
|
|
|
|
|
fixed config
|
|
|
|
|
|
31.10.2004 11:30 - 1.3.5
|
|
|
- writev
|
|
|
|
|
|
fixed seg-fault in debug-message if write() fails and LFS is enabled
|
|
|
handle EINTR
|
|
|
|
|
|
- sendfile linux
|
|
|
|
|
|
handle EINTR
|
|
|
|
|
|
31.10.2004 09:09
|
|
|
- freebsd
|
|
|
|
|
|
added missing header in joblist.c
|
|
|
fixed test-scripts for zsh
|
|
|
|
|
|
30.10.2004 22:26
|
|
|
- modules
|
|
|
|
|
|
added mod_userdir and mod_alias
|
|
|
added docs for the new modules
|
|
|
|
|
|
30.10.2004 19:52
|
|
|
- porting
|
|
|
|
|
|
added defines for MAP_FAILED for NetBSD 1.3.x
|
|
|
|
|
|
30.10.2004 18:54 - pre-release
|
|
|
- pipelining
|
|
|
|
|
|
fixed offset calculations
|
|
|
|
|
|
- ipv6
|
|
|
|
|
|
IPv6 might be disabled at compile-time
|
|
|
|
|
|
- rewrite
|
|
|
|
|
|
close mem-leak
|
|
|
|
|
|
- auth
|
|
|
|
|
|
forgot to reset the global-config handler
|
|
|
|
|
|
- symlink
|
|
|
|
|
|
add option to disable follow-symlink
|
|
|
|
|
|
- ssi
|
|
|
|
|
|
added support for exec-cmd
|
|
|
|
|
|
23.10.2004 - 1.3.4
|
|
|
- max-fds
|
|
|
|
|
|
set the upper limit of fds only if server.max-fds is set
|
|
|
|
|
|
23.10.2004 13:49
|
|
|
- accesslog
|
|
|
|
|
|
use a shell to handle accesslog-pipes
|
|
|
|
|
|
22.10.2004 17:00
|
|
|
- accesslog
|
|
|
|
|
|
added logging of user-supplied data via %{...}o and
|
|
|
X-LIGHTTPD-* header
|
|
|
|
|
|
22.10.2004 14:57 - pre-release
|
|
|
- openwrt
|
|
|
|
|
|
fixed configure-checks and Makefile.am's to build cleanly with a
|
|
|
cross-compiler
|
|
|
|
|
|
builds cleanly for openwrt
|
|
|
|
|
|
22.10.2004 13:03
|
|
|
- out-of-fd
|
|
|
|
|
|
improved the out-of-fd handler
|
|
|
|
|
|
- cgi, fastcgi
|
|
|
|
|
|
set SERVER_NAME to server.name or the value submitted by Host:
|
|
|
|
|
|
- error-handler
|
|
|
|
|
|
only set old status code if it wasn't set by a handler
|
|
|
|
|
|
21.10.2004 22:36 - pre-release
|
|
|
- fastcgi
|
|
|
|
|
|
don't crash on out-of-fd condition
|
|
|
|
|
|
- out-of-fd
|
|
|
|
|
|
try handle the out-of-fd condition in a sane way
|
|
|
|
|
|
21.10.2004 15:03
|
|
|
- mod_auth
|
|
|
|
|
|
seperated auth.backend.*.userfile for plain, htpasswd and htdigest
|
|
|
|
|
|
added 'digest-auth' against 'plain-backend'
|
|
|
|
|
|
added auth.debug for debugging
|
|
|
|
|
|
16.10.2004 10:18 - 1.3.3
|
|
|
- mod_simple_vhost, mod_evhost
|
|
|
|
|
|
conditional-ized
|
|
|
|
|
|
- mod_rrdtool
|
|
|
|
|
|
maintain the request-counter for each conditional-config (adam)
|
|
|
|
|
|
14.10.2004 11:30
|
|
|
- accesslogs
|
|
|
|
|
|
cycle all access-logs
|
|
|
|
|
|
- mod_rewrite
|
|
|
|
|
|
tell the user to install pcre.h if he wants to use mod_rewrite
|
|
|
|
|
|
10.10.2004 10:11 - pre-release
|
|
|
- error-handler
|
|
|
|
|
|
added a error-handler for status 404 (server.error-handler-404)
|
|
|
|
|
|
09.10.2004 16:28 - pre-release
|
|
|
- cgi
|
|
|
|
|
|
added support for \n in headers
|
|
|
|
|
|
- mod_auth
|
|
|
|
|
|
added conditional auth
|
|
|
|
|
|
01.10.2004 09:28
|
|
|
- plugins
|
|
|
|
|
|
fixed off by one error in plugin initialization (Mike)
|
|
|
related into a segfault on AMD64
|
|
|
|
|
|
30.09.2004 21:44 - 1.3.2
|
|
|
- file-cache
|
|
|
|
|
|
disabled the file-cache it was taken the wrong files from the cache
|
|
|
|
|
|
30.09.2004 08:39 - 1.3.1
|
|
|
- file-cache
|
|
|
|
|
|
drop a unused file-cache entry after 10 seconds
|
|
|
reuse unused entries
|
|
|
|
|
|
- request-parser
|
|
|
|
|
|
accept IPv6 adresses in Host header
|
|
|
|
|
|
- tests
|
|
|
|
|
|
modified the scripts to work with zsh (check on Linux, Irix and FreeBSD)
|
|
|
|
|
|
26.09.2004 12:28
|
|
|
- comparission function
|
|
|
|
|
|
file-cache has delivering the wrong entry if only the last character of
|
|
|
the filename differed and the filesize was the same.
|
|
|
|
|
|
- cgi + cygwin
|
|
|
|
|
|
cgi need s SYSTEMROOT environment
|
|
|
|
|
|
|
|
|
22.09.2004 08:55
|
|
|
- network
|
|
|
|
|
|
detect of file has been shrinked while we are sending it out and terminate
|
|
|
the connection if would run over the edge
|
|
|
|
|
|
22.09.2004 07:56
|
|
|
- mod rewrite, fastcgi, ...
|
|
|
|
|
|
keep REQUEST_URI after rewrite
|
|
|
|
|
|
21.09.2004 22:49
|
|
|
- fastcgi authorizer
|
|
|
|
|
|
fixed cleanup code (matt)
|
|
|
|
|
|
21.09.2004 20:08
|
|
|
- rrdtool
|
|
|
|
|
|
rrdtool.db-name is now conditional
|
|
|
|
|
|
fixed check if write() failed (adam)
|
|
|
|
|
|
17.09.2004 17:50 - 1.3.0
|
|
|
- rewrite
|
|
|
|
|
|
added url.rewrite-final = ...
|
|
|
|
|
|
17.09.2004 15:55
|
|
|
- code cleanup
|
|
|
|
|
|
integrated the fixes from cygwin into the main tree
|
|
|
|
|
|
- kqueue
|
|
|
|
|
|
init kqueue after daemonizing (broken since 12.09.2004 14:02)
|
|
|
|
|
|
16.09.2004 21:00
|
|
|
- cygwin + macosx
|
|
|
|
|
|
finished the cygwin port
|
|
|
this port seems to fix the problems on macosx too
|
|
|
|
|
|
12.09.2004 14:02
|
|
|
- socket handling
|
|
|
|
|
|
added support to handle more than one server socket
|
|
|
|
|
|
11.09.2004 12:23 - 1.2.8
|
|
|
- EINTR
|
|
|
|
|
|
handle EINTR for linux-sendfile
|
|
|
|
|
|
- configfile
|
|
|
|
|
|
ignore an extra comma at the end of the array declaration
|
|
|
|
|
|
11.09.2004 09:46
|
|
|
- mod_proxy
|
|
|
|
|
|
pass remote-addr as X-Forwarded-For to the real server behind the proxy
|
|
|
|
|
|
- code cleanup
|
|
|
|
|
|
moved all cut'n'paste versions of the inet_ntop cache to inet_ntop_cache.c
|
|
|
|
|
|
- fcgi
|
|
|
|
|
|
don't overwrite the fd in fcgi_establish connection if connect fails. this
|
|
|
results in various problem in other places.
|
|
|
|
|
|
05.09.2004 09:46
|
|
|
- file-cache
|
|
|
|
|
|
cache the mimetype
|
|
|
|
|
|
- last-modified
|
|
|
|
|
|
don't complain if the If-Modified-Since contains a valid comment/option
|
|
|
like <timestamp>; length = ...
|
|
|
|
|
|
05.09.2004 09:13
|
|
|
- expires
|
|
|
|
|
|
overwrite the Expire if it is set by a previous plugin
|
|
|
|
|
|
- conditional config
|
|
|
|
|
|
conditional config as disabled in 1.2.7 by accident
|
|
|
|
|
|
04.09.2004 10:02 - 1.2.7
|
|
|
- mod-proxy
|
|
|
|
|
|
remove the \0 before the post content
|
|
|
|
|
|
- cgi
|
|
|
|
|
|
fixed hanging process if cgi-crash terminates to fast (before we read its
|
|
|
response)
|
|
|
|
|
|
- extented attributes
|
|
|
|
|
|
added xattr support, submitted by Ari
|
|
|
|
|
|
29.08.2004 16:00
|
|
|
- rrdtool
|
|
|
|
|
|
moved the rrdtool support from mod_status into its own module mod_rrdtool
|
|
|
|
|
|
rrdtool.binary = "/usr/bin/rrdtool"
|
|
|
rrdtool.db-name = "/var/www/lighttpd.rrd"
|
|
|
|
|
|
29.08.2004 11:00 - pre-release
|
|
|
- timeouts
|
|
|
|
|
|
server.max-keep-alive-requests = 0 replaces
|
|
|
server.use-keep-alive = "disable"
|
|
|
|
|
|
added
|
|
|
server.max-keep-alive-idle
|
|
|
server.max-read-idle
|
|
|
server.max-write-idle
|
|
|
|
|
|
- docs
|
|
|
|
|
|
added a entry for each config-value into configuration.txt
|
|
|
added simple docs for
|
|
|
rewrite
|
|
|
redirect
|
|
|
compress
|
|
|
cgi
|
|
|
simple-vhost
|
|
|
|
|
|
29.08.2004 10:05
|
|
|
- config options
|
|
|
|
|
|
complain if no configfile is specified
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
removed stupid allocation bug which might cause a problem in really rare
|
|
|
cases
|
|
|
|
|
|
26.08.2004 22:06 - 1.2.6
|
|
|
- optimize
|
|
|
|
|
|
use array_strcasecmp() in favour of strcasecmp() as it is slightly
|
|
|
faster.
|
|
|
|
|
|
apply the case-insentive conversion also on the last character. (adam)
|
|
|
|
|
|
sort the checked elements in request.c and filter apply the logic to
|
|
|
compare some less fields, if the header is not used.
|
|
|
|
|
|
improved the config-patch function to use our internal buffer-compare
|
|
|
functions instead of strcmp
|
|
|
|
|
|
22.08.2004 16:09 - pre-release
|
|
|
- cgi
|
|
|
|
|
|
added missing cleanup code
|
|
|
|
|
|
- fastcgi
|
|
|
|
|
|
remove double-free
|
|
|
added handling of EINTR in some places
|
|
|
|
|
|
- leaks
|
|
|
|
|
|
fixed some leaks in the new config code
|
|
|
|
|
|
- array_strcasecmp
|
|
|
|
|
|
fixed alignment in the improved array_strcasecmp function (adam)
|
|
|
|
|
|
20.08.2004 14:46 - pre-release
|
|
|
- performance
|
|
|
|
|
|
optimized a few useless strlen() away as we either know the length from
|
|
|
buffer->used - 1 or by sizeof(str) - 1 if it is constant.
|
|
|
|
|
|
optimized the 'find the \r\n\r\n' function.
|
|
|
|
|
|
improved the array_strcasecmp() based on another idea from (ralf)
|
|
|
|
|
|
- accesslog
|
|
|
|
|
|
enabled the strftime cache again
|
|
|
|
|
|
15.08.2004 23:41
|
|
|
- accesslog
|
|
|
|
|
|
added apache-like CustomLog handling in accesslog.format
|
|
|
|
|
|
accesslog.format = "..."
|
|
|
|
|
|
15.08.2004 21:08
|
|
|
- test-cases
|
|
|
|
|
|
remove testdir
|
|
|
|
|
|
- configfiles
|
|
|
|
|
|
handle escaping of " in strings properly
|
|
|
|
|
|
13.08.2004 12:07
|
|
|
- array
|
|
|
|
|
|
improved inner-loop of array_strcasecmp() (ralf)
|
|
|
|
|
|
11.08.2004 14:14
|
|
|
- fcgi socket
|
|
|
|
|
|
use SUN_LEN if available
|
|
|
|
|
|
- keep-alive
|
|
|
|
|
|
disable keep-alive on request
|
|
|
|
|
|
server.use-keep-alive = "disable"
|
|
|
|
|
|
10.08.2004 15:59 - 1.2.5
|
|
|
- conditional config
|
|
|
|
|
|
mod_fastcgi
|
|
|
mod_rewrite
|
|
|
mod_redirect
|
|
|
mod_access
|
|
|
mod_compress
|
|
|
mod_accesslog
|
|
|
|
|
|
are ported
|
|
|
|
|
|
10.08.2004 13:05
|
|
|
- pipelining
|
|
|
|
|
|
fixed very stupid pipelining bug
|
|
|
|
|
|
09.08.2004 22:07 - pre-release
|
|
|
- conditional config
|
|
|
|
|
|
first code for conditional config
|
|
|
|
|
|
09.08.2004 14:21
|
|
|
- fcgi
|
|
|
|
|
|
fixed access to free()'d memory (doesn't create any harm)
|
|
|
|
|
|
- isdigit, warings
|
|
|
|
|
|
signed -> unsigned for 2 more isdigit() calls (adam)
|
|
|
removed some unused var's if pcre is not available (adam)
|
|
|
|
|
|
08.08.2004 20:57 - pre-release
|
|
|
- debian
|
|
|
|
|
|
added a chmod to /var/log/lighttpd/ (allan)
|
|
|
|
|
|
08.08.2004 12:05
|
|
|
- kqueue
|
|
|
|
|
|
use EV_SET() instead of setting the ev-struct by hand (adam)
|
|
|
|
|
|
- fcgi
|
|
|
|
|
|
fixed the EINPROGRESS handling to use getsockopt (er)
|
|
|
fixed a leak of server is disabled (er)
|
|
|
|
|
|
- solaris 10 port-api
|
|
|
|
|
|
added a skeleton for the sol10 port api
|
|
|
|
|
|
06.08.2004 10:18
|
|
|
- mod_ssi
|
|
|
|
|
|
fix DATE_LOCAL so it displays the correct time zone (Jeremy Hinegardner)
|
|
|
|
|
|
04.08.2004 11:43
|
|
|
- openbsd fixes
|
|
|
|
|
|
dropped usage of MAX() in buffer.c
|
|
|
added prober includes for md5.h if openssl is enabled (brad)
|
|
|
|
|
|
- memory usage
|
|
|
|
|
|
documented the way how lighttpd caches memory blocks
|
|
|
reset the buffers after they have been written by the network-layer
|
|
|
|
|
|
- kqueue
|
|
|
|
|
|
modify fd-bitmask only if kevent succeeded (adam)
|
|
|
|
|
|
|
|
|
03.08.2004 15:09
|
|
|
- mod_compress
|
|
|
|
|
|
compress even if you have no cachedir set
|
|
|
|
|
|
03.08.2004 13:26 - pre-release
|
|
|
- Makefile
|
|
|
|
|
|
fixed dependencies for parallel build in mod_ssi_expr.c
|
|
|
|
|
|
- combo patch
|
|
|
|
|
|
* Tinker with kqueue(). Add a reset method so that the kqueue file
|
|
|
descriptor can be re-enabled after a fork(). Emulate the devpoll driver
|
|
|
in that adds and deletes are sent to the notification mechanism im-
|
|
|
mediately, which should cut down on phantom events. Use
|
|
|
ev->kq_results as a sliding window.
|
|
|
|
|
|
* Change F_SETFD calls to use the preferred FD_CLOEXEC instead of 1.
|
|
|
|
|
|
* Remove unnecessary fdevent fcntl handlers. It appears that the only
|
|
|
driver that needs one is Linux RT signals.
|
|
|
|
|
|
* Quiet compiler warning about unused parameter.
|
|
|
|
|
|
* Set the close-on-exec flag for the /dev/poll and epoll_create() file
|
|
|
descriptors.
|
|
|
|
|
|
* Return failure if /dev/poll could not be opened instead of logging
|
|
|
and continuing.
|
|
|
|
|
|
* Detect EAGAIN after writev() failures. FreeBSD sendfile() doesn't need
|
|
|
protection, as the man page says:
|
|
|
|
|
|
When using a socket marked for non-blocking I/O, sendfile() may send
|
|
|
fewer bytes than requested. In this case, the number of bytes success-
|
|
|
fully written is returned in *sbytes (if specified), and the error
|
|
|
EAGAIN is returned.
|
|
|
|
|
|
(adam, georg, matt)
|
|
|
|
|
|
|
|
|
02.08.2004 18:08
|
|
|
- mod_ssi
|
|
|
|
|
|
check for pcre before compiling the module
|
|
|
|
|
|
- fdevents
|
|
|
|
|
|
dropped fdevent_fcntl added by the last patch (adam)
|
|
|
kqueue: events == FDEVENT_IN -> events & FDEVENT_IN (adam)
|
|
|
|
|
|
31.07.2004 22:07 - 1.2.4
|
|
|
- fdevents
|
|
|
|
|
|
* Test at configure time for kqueue() and <sys/event.h>
|
|
|
* Remove various hard-coded constants from event handlers
|
|
|
* Move maxfds into the event structure, and out of the
|
|
|
fdevent_*_init handlers. Event handlers can use the maxfds
|
|
|
member to size arrays.
|
|
|
* Various event structure renames to discourage clashes
|
|
|
* Remove extra (ignored) call to fdevent_event_next_fdndx() in
|
|
|
the main server loop.
|
|
|
* Wrestle with kqueue(). The implementation has to deal with
|
|
|
phantom events (for fds which have been deleted/closed), similar
|
|
|
to the Linux RT signals code. Like the RT code, it maintains a
|
|
|
bitmask of active fds. After a successful call to kevent(), the
|
|
|
code will compress/overwrite dead events. The other annoyance is
|
|
|
that the handler must track the event filter for each fd, even
|
|
|
though you cannot support both read and write filters for the same
|
|
|
fd in one kqueue. The handler maintains a separate bitmask for fd
|
|
|
filters (1 == EVFILT_IN, 0 == EVFILT_OUT).
|
|
|
(adam)
|
|
|
|
|
|
- server side includes
|
|
|
|
|
|
added native server-side includes based on the docs from apache:
|
|
|
http://httpd.apache.org/docs/mod/mod_include.html
|
|
|
|
|
|
not supported are:
|
|
|
- exec
|
|
|
- nested virtual
|
|
|
- config.errmsg
|
|
|
- echo.encoding
|
|
|
|
|
|
24.07.2004
|
|
|
- fdevents
|
|
|
|
|
|
added a bitset to figure out if we received a event for an unregistered fd
|
|
|
in rt-signal (adam)
|
|
|
|
|
|
- kqueue
|
|
|
|
|
|
added kqueue support (Matt Levine)
|
|
|
|
|
|
13.07.2004 08:58
|
|
|
- configfile
|
|
|
|
|
|
parse keys correctly that contain a digit (Geoff Adams)
|
|
|
|
|
|
- fcgi
|
|
|
|
|
|
fixed large post uploads (Geoff Adams)
|
|
|
fixed uri if docroot is set (Geoff Adams)
|
|
|
|
|
|
03.07.2004 22:50 - 1.2.3
|
|
|
- index-files
|
|
|
|
|
|
rewrite uri.path to the index-file instead of keeping it at .../
|
|
|
this fixes index-file handling in FastCGI/CGI docroot is used
|
|
|
|
|
|
- close-on-exec
|
|
|
|
|
|
enable close-on-exec handling to simplify FD handling in CGI code
|
|
|
|
|
|
- cgi
|
|
|
|
|
|
keep error-log-fd open to catch the error handling for execve()
|
|
|
|
|
|
report error if cgi-exec file doesn't exist
|
|
|
|
|
|
- proxy
|
|
|
|
|
|
pass page-content on error to the user (E.R.)
|
|
|
code cleanup (E.R.)
|
|
|
|
|
|
- ssi
|
|
|
|
|
|
first skeleton of a plugin for ServerSideIncludes
|
|
|
|
|
|
- security
|
|
|
|
|
|
limit the headerlength again to 64k max
|
|
|
|
|
|
03.07.2004 14:23
|
|
|
- configure
|
|
|
|
|
|
fixed compile-check for libpcre if pcre-config doesn't point to /usr/lib
|
|
|
|
|
|
02.07.2004 18:17
|
|
|
- buffers
|
|
|
|
|
|
always allocate a multiply of 64bytes. this should reduce the number of
|
|
|
realloc()s and still doesn't has a too high overhead.
|
|
|
|
|
|
02.07.2004 11:07
|
|
|
- fds
|
|
|
|
|
|
connect stdin, stdout and stderr to /dev/null instead of just closing it
|
|
|
use dup2() instead of dup()
|
|
|
|
|
|
- accesslog
|
|
|
|
|
|
if accesslog.filename starts with a | spawn a process which will get data
|
|
|
in one chunk once in a while
|
|
|
|
|
|
01.07.2004 11:00
|
|
|
- sample config
|
|
|
|
|
|
added text/css and text/javascript mimetypes
|
|
|
|
|
|
28.06.2004 12:18
|
|
|
- proxy module
|
|
|
|
|
|
added a proxy module (based on the fastcgi module) and added some
|
|
|
documentation
|
|
|
|
|
|
25.06.2004 21:41
|
|
|
- last-modified handling
|
|
|
|
|
|
replaced %Z by GMT. otherwise the last-modified check will most often fail.
|
|
|
|
|
|
24.06.2004 20:20
|
|
|
- relax http-parser
|
|
|
|
|
|
don't reply 400 in case of an empty header-field, just ignore it
|
|
|
|
|
|
23.06.2004 22:10
|
|
|
- file-cache
|
|
|
|
|
|
don't cache mmap() for files larger than 64k as we run out of RAM otherwise
|
|
|
too fast (check with some 200mb files)
|
|
|
|
|
|
- 64bit fixes
|
|
|
|
|
|
fixed buffer_equal on sparc64
|
|
|
|
|
|
15.06.2004 19:09 - 1.2.2
|
|
|
- mmap cache
|
|
|
|
|
|
fixed mmap-caching in network_write.c and network_writev.c after a direct
|
|
|
hint by E.Rodichev
|
|
|
|
|
|
- sendfile + linux
|
|
|
|
|
|
check at config-time if sendfile() works on Linux
|
|
|
|
|
|
11.06.2004 15:09
|
|
|
- fcgi + unix sockets
|
|
|
|
|
|
added support for unix domain sockets (spawn-fcgi 1.2.0 required)
|
|
|
|
|
|
10.06.2004 11:49
|
|
|
- configure
|
|
|
|
|
|
use pcre-config to determine the position of the pcre headers
|
|
|
|
|
|
05.06.2004 22:06
|
|
|
- filehandle-cache
|
|
|
|
|
|
remove mmap-segment if filecache gets invalidated
|
|
|
|
|
|
30.05.2004 14:13 - lighttpd 1.2.1
|
|
|
- response headers
|
|
|
|
|
|
request headers that appear twice are grouped together like expected by
|
|
|
the CGI spec (concat with a ", ")
|
|
|
response headers behaved the same way but are not grouped anymore. They
|
|
|
stay seperated. Actually they are concated by \r\n<key>: <value> which is
|
|
|
the same in the end.
|
|
|
|
|
|
- file uploads
|
|
|
|
|
|
the handling of longer post requests is fixed now.
|
|
|
|
|
|
28.05.2004 09:13
|
|
|
- cgi
|
|
|
|
|
|
added support for direct calls to cgi-binary
|
|
|
|
|
|
22.05.2004 21:58
|
|
|
- pipeling
|
|
|
|
|
|
the code cleanup is finished successfully. Now all cases of pipelining are
|
|
|
handle the right way. POST pipelining was still not working up to now.
|
|
|
|
|
|
22.05.2004 12:55
|
|
|
- code cleanup
|
|
|
|
|
|
use the well-tested code from the write-queue as the base for the
|
|
|
read-queues and simplify the pipeline handling alot that way.
|
|
|
|
|
|
20.05.2004 15:08
|
|
|
- network backends
|
|
|
|
|
|
enabled sendfile support again (__FreeBSD__ instead of __freebsd__)
|
|
|
|
|
|
added a mmap cache as part of the filedescriptor cache
|
|
|
|
|
|
added AIX specific send_file() support (untested)
|
|
|
|
|
|
20.05.2004 10:40
|
|
|
- segfaults
|
|
|
|
|
|
fixed some minor segfaults on startup when no config file is used.
|
|
|
|
|
|
17.05.2004 10:58 - lighttpd 1.2.0
|
|
|
- documentation
|
|
|
|
|
|
reformated the documentation the doc/ directory
|
|
|
|
|
|
15.05.2004 14:45
|
|
|
- localizer
|
|
|
|
|
|
fixed build of localizer extension
|
|
|
|
|
|
15.05.2004 12:35
|
|
|
- POST requests
|
|
|
|
|
|
there is no need to die if we spot a simple POST request on a static file
|
|
|
|
|
|
- pipelining
|
|
|
|
|
|
fixed HTTP/1.1 pipelining which caused the problems with opera
|
|
|
|
|
|
- array handling
|
|
|
|
|
|
how did that bug survive such a long time ? a wrong compare function was
|
|
|
used in one case, but not the other.
|
|
|
|
|
|
15.05.2004 03:20
|
|
|
- secure and fast downloads
|
|
|
|
|
|
added a module which allows secure and fast downloading of files:
|
|
|
1. the application (.php, ...) controls the access to the files
|
|
|
2. the webserver is handling the transfer (and check the app generated
|
|
|
tokens)
|
|
|
|
|
|
the token is based on
|
|
|
- a secret
|
|
|
- a timestamp
|
|
|
- the filename
|
|
|
this means even if the token is is distributed by the user it will get
|
|
|
invalid after a given timeout (default 60 seconds)
|
|
|
|
|
|
- errorfiles
|
|
|
|
|
|
check for errorfiles before using them
|
|
|
|
|
|
- code cleanup
|
|
|
|
|
|
applied cleanup fixes from adam
|
|
|
|
|
|
14.05.2004 18:47
|
|
|
- fdevent handling
|
|
|
|
|
|
added a more generic callback interface to the fdevent structures which
|
|
|
simplifies the writing of plugins. this might destabilize lighttpd for a
|
|
|
while
|
|
|
|
|
|
- cgi
|
|
|
|
|
|
fixed header parsing of the header is sent in chunks and the terminator is
|
|
|
sent in a single chunk
|
|
|
|
|
|
- EINTR
|
|
|
|
|
|
fixed some occurences of EINTR which read()
|
|
|
|
|
|
03.05.2004 23:55
|
|
|
- portability
|
|
|
|
|
|
E.R.:
|
|
|
* portability fixes for Solaris 2.5
|
|
|
|
|
|
02.05.2004 10:15
|
|
|
- Expect: Handling
|
|
|
|
|
|
added incomplete support for Expect: 100-continue (RFC 2616 8.2.3) by
|
|
|
sending always 417 for every Expect-request (see 14.20)
|
|
|
|
|
|
we have been blamed for not supporting it:
|
|
|
http://lists.w3.org/Archives/Public/ietf-http-wg/2004JanMar/0059.html
|
|
|
|
|
|
29.04.2004 23:07 - 1.1.9
|
|
|
- usertracking
|
|
|
|
|
|
added a very basic usertracking cookie handler
|
|
|
|
|
|
29.04.2004 19:37
|
|
|
- network-writev
|
|
|
|
|
|
Adam:
|
|
|
* call munmap() on error in write()
|
|
|
|
|
|
- docs
|
|
|
|
|
|
E.R:
|
|
|
* documented 'check-local'
|
|
|
|
|
|
- test-env
|
|
|
|
|
|
made the shell scripts more portable (checked with zsh, bash and ksh)
|
|
|
|
|
|
fixed compilation on NetBSD
|
|
|
|
|
|
28.04.2004 22:22
|
|
|
- FastCGI
|
|
|
|
|
|
E.Rodichev:
|
|
|
* added "Authorizer" mode for FastCGI
|
|
|
|
|
|
27.04.2004 18:08
|
|
|
- ssl
|
|
|
|
|
|
Alexey Slynko:
|
|
|
* handle SSL_ERROR_WANT_READ or SSL_ERROR_WANT_WRITE in SSL_write the
|
|
|
right way.
|
|
|
|
|
|
- FastCGI
|
|
|
|
|
|
add 'check-local' instead of the implicit 'if-docroot-is-set' handling
|
|
|
implemented at 24.04.2004 14:34
|
|
|
|
|
|
E.Rodichev:
|
|
|
* remove useless extra-/ in before uri.path
|
|
|
* add 'prefix' notation for FastCGI processes
|
|
|
|
|
|
26.04.2004 16:52
|
|
|
- code cleanup
|
|
|
|
|
|
patches from Alexey Slynko:
|
|
|
* remove the pidfile if lighttpd terminates the normal way (if not in chroot)
|
|
|
* init SSL before getting daemonized
|
|
|
|
|
|
25.04.2004 19.15
|
|
|
- mem-leak
|
|
|
|
|
|
fixed mem-leak on broken HTTP-headers
|
|
|
|
|
|
- FastCGI
|
|
|
|
|
|
patches from E.Rodichev:
|
|
|
|
|
|
1. CONTENT_LENGTH
|
|
|
"If no data are attached, then this metavariable is either NULL or not
|
|
|
defined".
|
|
|
|
|
|
2. QUERY_STRING
|
|
|
If the Script-URI does not include a query component, the QUERY_STRING
|
|
|
metavariable MUST be defined as an empty string ("").
|
|
|
|
|
|
3. Doubling of REMOTE_ADDR removed.
|
|
|
|
|
|
patches from adam:
|
|
|
* fixed bug in the sizeof() patches from yesterday.
|
|
|
* some more *_long to *_off_t
|
|
|
|
|
|
24.04.2004 14:34
|
|
|
- FastCGI
|
|
|
|
|
|
don't check for localfile if 'docroot' for a FastCGI host is specified.
|
|
|
|
|
|
24.04.2004 12:13
|
|
|
- POST
|
|
|
|
|
|
fixed POST request handling
|
|
|
|
|
|
- chunk-encoding
|
|
|
|
|
|
the generated HEX strings where broken since the 1.1.8
|
|
|
(this effected all HTTP/1.1 requests without Content-Length like FastCGI-PHP)
|
|
|
|
|
|
- code cleanup
|
|
|
|
|
|
patches from adam:
|
|
|
* malloc + memset -> calloc
|
|
|
* sizeof(int) -> sizeof(<variable>)
|
|
|
* assign fd_set instead of memcpy()
|
|
|
* init fd -> connection fd pointers to -1
|
|
|
|
|
|
16.04.2004 08:48 - 1.1.8
|
|
|
- code cleanup
|
|
|
|
|
|
don't reuse buffer > 64k (see settings.h)
|
|
|
|
|
|
added server.max-request-size to limit the maximum request-body size
|
|
|
(in kBytes)
|
|
|
|
|
|
don't accept HTTP-request headers larger then 32kBytes (see settings.h)
|
|
|
|
|
|
minor speed improvements in the request-parser
|
|
|
|
|
|
More cleanup patches from adam:
|
|
|
|
|
|
* change pre-ANSI C/valid C++ syntax for function declarations/definitions
|
|
|
from using () to (void). Ex: int foo(); --> int foo(void);
|
|
|
* use static linkage as much as possible, to limit possible symbol
|
|
|
collisions
|
|
|
* whack more unneeded variables
|
|
|
* try and prevent any errno clobbering by storing the old errno value before
|
|
|
any subsequent system calls, and restoring before function exit.
|
|
|
* change printf syntax for unsigned variables from %d to %u
|
|
|
|
|
|
15.04.2004 18:41
|
|
|
- code cleanup
|
|
|
|
|
|
handle all int != size_t cases in fcgi.c correctly
|
|
|
|
|
|
check headerfields to have a value
|
|
|
|
|
|
handle both EINVAL cases of writev() before the can occur
|
|
|
|
|
|
limit content-length to SSIZE_MAX
|
|
|
disallow negative content-length
|
|
|
|
|
|
the usage of ltostr() has been reduced to the minimum in favour of
|
|
|
buffer_/append|copy)_(long|off_t)
|
|
|
|
|
|
dropped ultostr() and ultohex() in favour of buffer_*
|
|
|
|
|
|
15.04.2004 16:35
|
|
|
- portablity
|
|
|
|
|
|
more patches from adam:
|
|
|
|
|
|
* remove warnings for unused parameters and variables
|
|
|
* remove warnings for mismatched pointer assignments
|
|
|
* change "gtime_r" to "gmtime_r"
|
|
|
|
|
|
13.04.2004 20:48
|
|
|
- test-cases
|
|
|
|
|
|
made the 'make check' target self-contained
|
|
|
|
|
|
In our case we have to call the targets in the following order:
|
|
|
|
|
|
$ ./configure ...
|
|
|
$ make
|
|
|
$ make install
|
|
|
$ make check
|
|
|
|
|
|
because the path to the plugins is hardcoded in the binary itself
|
|
|
|
|
|
using
|
|
|
|
|
|
$ ./configure --prefix=/tmp/lighttpd-1.1.x/
|
|
|
...
|
|
|
|
|
|
will help if you don't really want to install before testing.
|
|
|
|
|
|
13.04.2004 00:05
|
|
|
- portability
|
|
|
|
|
|
adam sent another patchset:
|
|
|
|
|
|
* Wrap PCRE-specific data member access with an #ifdef
|
|
|
* Add const to pointer using return value from dlerror()
|
|
|
* Explicitly initialize pointer in the lemon parser to 0,
|
|
|
in order to catch missing else { } clause
|
|
|
* Use a time_t rather than an int for gmtime() call. On some
|
|
|
systems (including 32- and 64-bit SPARC) time_t is a long.
|
|
|
|
|
|
12.04.2004 17:00 - 1.1.7
|
|
|
- fastcgi
|
|
|
|
|
|
strip WS after HTTP-response headers coming from the FastCGI process
|
|
|
|
|
|
added REMOTE_USER to the Server->FastCGI headers
|
|
|
removed HTTP_AUTHORIZATION from the Server->FastCGI headers
|
|
|
|
|
|
12.04.2004 10:24
|
|
|
- cgi
|
|
|
|
|
|
if we don't get a partial HTTP-response-header send the content out as soon
|
|
|
as the cgi script is finished
|
|
|
|
|
|
12.04.2004 01:23
|
|
|
- compression
|
|
|
|
|
|
added bzip2 compression (supported by w3m)
|
|
|
|
|
|
12.04.2004 00:12
|
|
|
- configfile
|
|
|
|
|
|
add some usefull error messages if the tokenizer or the parser fail to
|
|
|
read the configfile
|
|
|
|
|
|
11.04.2004 22:04
|
|
|
- configure
|
|
|
|
|
|
added --with-ldap and --disable-lfs to the configure options
|
|
|
|
|
|
11.04.2004 20:28
|
|
|
- 64bit offset size
|
|
|
|
|
|
disable linux-sendfile support for linux 2.4.x for now as it don't
|
|
|
support 64bit transfers
|
|
|
|
|
|
fixed all assignments on the path from the stat() to the Content-Length
|
|
|
HTTP-header
|
|
|
|
|
|
- head requests
|
|
|
set content-length in HEAD requests
|
|
|
|
|
|
- accesslog
|
|
|
|
|
|
write accesslog entry on network error
|
|
|
|
|
|
write the correct amount of byte written to the accesslog
|
|
|
|
|
|
11.04.2004 11:48
|
|
|
- code cleanup
|
|
|
|
|
|
moved the config for the cgi-plugin from config.c to the plugin.
|
|
|
|
|
|
moved some buffers which were only used by a one or two plugin from
|
|
|
the server-structure to the plugins
|
|
|
|
|
|
keeping the plugins independent from the server-core is a 'good thing'
|
|
|
|
|
|
10.04.2004 19:06
|
|
|
- configfile parser
|
|
|
|
|
|
removed the leaks from the configfile parser
|
|
|
|
|
|
09.04.2004 23:15 - 1.1.6
|
|
|
- stricter http-parser
|
|
|
|
|
|
added line-folding although noone really seems to use it.
|
|
|
|
|
|
09.04.2004 18:42
|
|
|
- configfile parser
|
|
|
|
|
|
the hand-written configfile parser has been replaced by a LALR(1) one.
|
|
|
'lemon' from the sqlite guys has been used to generate the parser.
|
|
|
|
|
|
- by-host, by-url, by-file, by ...
|
|
|
|
|
|
$HTTP["url"] =~ "~$" {
|
|
|
access.deny = "all"
|
|
|
}
|
|
|
|
|
|
$HTTP["host"] =~ "." {
|
|
|
simple-vhost.server-root = "/home/weigon/wwwroot/servers/"
|
|
|
simple-vhost.default-host = "grisu.home.kneschke.de"
|
|
|
simple-vhost.document-root = "pages"
|
|
|
}
|
|
|
|
|
|
$HTTP["host"] == "incremental.home.kneschke.de" {
|
|
|
server.docroot = "/hasdasd"
|
|
|
}
|
|
|
|
|
|
at least the parser can handle it now. Currently there is no real support
|
|
|
for this context-based config-option. But the syntax and the parser are
|
|
|
done.
|
|
|
|
|
|
09.04.2004 10:58
|
|
|
- ssl support
|
|
|
|
|
|
enable ssl support again
|
|
|
|
|
|
- mmap
|
|
|
|
|
|
enabled mmap+write again
|
|
|
|
|
|
08.04.2004 12:34
|
|
|
- stricter http-parser
|
|
|
|
|
|
based on a thread at
|
|
|
|
|
|
http://lists.w3.org/Archives/Public/ietf-http-wg/2004JanMar/0050.html
|
|
|
|
|
|
the HTTP-parser has been adjusted to be more correct when it comes to
|
|
|
request-header fieldnames
|
|
|
|
|
|
the whitespace handling around the ':' has been relaxed as requested
|
|
|
|
|
|
07.04.2004 17:06
|
|
|
- sigaction
|
|
|
|
|
|
use sigaction instead of signal if possible
|
|
|
|
|
|
07.04.2004 13:55
|
|
|
- accesslog
|
|
|
|
|
|
use localtime-timestamps in accesslogs if struct tm has a tm_gmtoff field
|
|
|
|
|
|
07.04.2004 10:41 - 1.1.5
|
|
|
- -D_REENTRANT
|
|
|
|
|
|
solaris + localtime_r() needs it
|
|
|
|
|
|
07.04.2004 02:54
|
|
|
- mod_auth + ldap
|
|
|
|
|
|
added a ldap backend to the auth plugin.
|
|
|
|
|
|
06.04.2004 13:37
|
|
|
- pidfile
|
|
|
|
|
|
fixed the permissions of the pidfile (Matthijs van der Klip)
|
|
|
|
|
|
- specfile
|
|
|
|
|
|
merge the RedHat and SuSE specfile with Matthijs
|
|
|
|
|
|
- 64bit file-offsets
|
|
|
|
|
|
moved the FILE_OFFSET_BITS settings from the config.h the Makefile to enable
|
|
|
64bit offsets the right way
|
|
|
|
|
|
06.04.2004 12:32
|
|
|
- mod_expire
|
|
|
|
|
|
added an apache compatible mod_expire which adds Expires: headers to the
|
|
|
request
|
|
|
|
|
|
expire.url = ( "/buggy/" => "access 2 hours" )
|
|
|
|
|
|
05.04.2004 22:34
|
|
|
- solaris devpoll
|
|
|
|
|
|
forgot to provide the infrastructure to actually enable the devpoll event
|
|
|
handler. the same has been done for the freebsd-kqueue handler (which
|
|
|
doesn't work yet)
|
|
|
|
|
|
fixed the devpoll support while testing it on a real solaris box
|
|
|
|
|
|
05.04.2004 09:49
|
|
|
- debian
|
|
|
|
|
|
added debian packaging support written by Vincent Wagelaar
|
|
|
|
|
|
- solaris
|
|
|
|
|
|
Another set of patches for Solaris from Adam
|
|
|
* Detect <sys/devpoll.h>
|
|
|
* Detect and include <sys/filio.h> for definition of FIONREAD
|
|
|
* Detect and link against the library exporting hstrerror
|
|
|
* Correct typo in SENDFILE_LIB
|
|
|
* Use__sun instead of __solaris__ for detecting operating system.
|
|
|
Please see http://predef.sourceforge.net/preos.html for more
|
|
|
detail
|
|
|
* Explicitly cast arguments to isalpha() and toupper() to unsigned
|
|
|
char. The man page says that the functions support the range of
|
|
|
an unsigned char, and EOF.
|
|
|
* Include <limits.h> and define UIO_MAXIOV as IOV_MAX for Solaris.
|
|
|
|
|
|
04.04.2004 18:05 - 1.1.4
|
|
|
- pidfile
|
|
|
|
|
|
added pidfile writing after deamonizing
|
|
|
|
|
|
04.04.2004 01:05
|
|
|
- fdevent
|
|
|
|
|
|
added framework for freebsd_kqueue and solaris_devpoll
|
|
|
|
|
|
the solaris_devpoll one might event work (untested)
|
|
|
|
|
|
03.04.2004 16:41
|
|
|
- network
|
|
|
|
|
|
added framework for filebased chunks
|
|
|
- read-write + mmap-write
|
|
|
- linux-sendfile
|
|
|
- freebsd-sendfile
|
|
|
- solaris-sendfilev (untested)
|
|
|
|
|
|
and memorybased chunks
|
|
|
- write
|
|
|
- writev
|
|
|
|
|
|
made TCP_CORK a 'global' flag around the write_chunkqueue-calls
|
|
|
|
|
|
the writev() support should improve the performance for all non-static
|
|
|
pages.
|
|
|
|
|
|
170 req/s against 158 req/s for the following script if writev() is used
|
|
|
instead of write()
|
|
|
|
|
|
<?php
|
|
|
|
|
|
for ($i = 0; $i < 1000; $i++) {
|
|
|
print $i."<br />\n";
|
|
|
flush();
|
|
|
}
|
|
|
|
|
|
?>
|
|
|
|
|
|
28.03.2004 13:42
|
|
|
- cleanup
|
|
|
|
|
|
applied some cleanup patches submitted by Adam:
|
|
|
* variables modified in signal handlers should be sig_atomic_t
|
|
|
* assert statements should not have side effects
|
|
|
* STD{IN,OUT,ERR}_FILENO preferred instead of {0,1,2}
|
|
|
* dieing --> dying
|
|
|
* SEGFAULT calls abort directly, instead of derefencing a NULL pointer
|
|
|
|
|
|
- mod_accesslog
|
|
|
|
|
|
modified the accesslog format to be CLF compatible
|
|
|
set locale for LC_TIME to C
|
|
|
|
|
|
26.03.2004 16:13
|
|
|
- path info
|
|
|
|
|
|
enabled the pathinfo code again
|
|
|
|
|
|
|
|
|
25.03.2004 13:30 - 1.1.3
|
|
|
- portability
|
|
|
|
|
|
compiles fine now without any patches on IRIX
|
|
|
|
|
|
- hostname detection
|
|
|
|
|
|
reworked "get the hostname for HTTP/1.0 requests which don't specify a
|
|
|
Host: ..." to only query the name in this single case for the server side
|
|
|
of the connection
|
|
|
|
|
|
- errorlog handling
|
|
|
|
|
|
stderr is only used until the errorlog is init'ed
|
|
|
if no error-log is specified, syslog() is used
|
|
|
if cycling error-log fails, syslog() is used
|
|
|
|
|
|
- accesslog cycling
|
|
|
|
|
|
don't fall back to stdout anymore
|
|
|
|
|
|
- event-handler
|
|
|
|
|
|
use poll() as the default event-handler again
|
|
|
|
|
|
24.03.2004 01:37 - 1.1.2a
|
|
|
- error messages
|
|
|
|
|
|
added some hints to the failing error-messages
|
|
|
|
|
|
22.03.2004 01:58 - 1.1.2
|
|
|
- configure
|
|
|
|
|
|
some protability changes to get the 'inline' working with the MIPS CC
|
|
|
|
|
|
21.03.2004 22:00
|
|
|
- mod_rewrite, mod_redirect
|
|
|
|
|
|
reading the config for those two plugins was not working
|
|
|
|
|
|
- fdevents
|
|
|
|
|
|
changed the compile time setting for the event handling into a run-time
|
|
|
setting.
|
|
|
|
|
|
server.event-handler = "select" # poll, linux-rtsig, linux-sysepoll
|
|
|
|
|
|
added sys_epoll() for linux 2.6
|
|
|
|
|
|
select - all systems
|
|
|
poll - Linux 2.1.23+, all XPG4-UNIX
|
|
|
sigio - linux 2.4.0+
|
|
|
sysepoll - linux 2.5.66+
|
|
|
|
|
|
1000-4k-nok 1000-100k-nok
|
|
|
select 1776.99 296.52
|
|
|
poll 678.02 607.28
|
|
|
sigio 3754.46 1411.23
|
|
|
sysepoll 3817.67 1431.02
|
|
|
|
|
|
21.03.2004 00:10
|
|
|
- configure script
|
|
|
|
|
|
rewrote large parts of the lib/header detection of the configure script
|
|
|
|
|
|
20.03.2004 01:39
|
|
|
- fastcgi
|
|
|
|
|
|
as the docroot on external hosts might be different than the webserver
|
|
|
docroot it can now be specified in the config:
|
|
|
|
|
|
fastcgi.server = ( ".php" =>
|
|
|
( "grisu" =>
|
|
|
(
|
|
|
"host" => "192.168.2.41",
|
|
|
"docroot" => "/home/jan/servers/",
|
|
|
"port" => 1026
|
|
|
)
|
|
|
)
|
|
|
)
|
|
|
|
|
|
a huge internal cleanup in the config handling made the code more readable.
|
|
|
some more warnings and error checking should track most of the config
|
|
|
errors for the fastcgi plugin
|
|
|
|
|
|
19.03.2004 12:34
|
|
|
- external patches
|
|
|
|
|
|
Matthijs van der Klip submitted three nice patches:
|
|
|
- turn off writing in mod_status if status.rrd-reports is set to disable
|
|
|
- fix for a debug message
|
|
|
- get the hostname for HTTP/1.0 requests which don't specify a Host: ...
|
|
|
- rc-script for RedHat
|
|
|
|
|
|
- documentation
|
|
|
|
|
|
added a documentation section about authentification
|
|
|
- doc/authentification.txt
|
|
|
|
|
|
19.03.2004 05:11
|
|
|
- optimizations
|
|
|
|
|
|
implemented special versions of
|
|
|
- strcasecmp (array_strcasecmp)
|
|
|
- isdigit, isalpha, isalnum (light_*)
|
|
|
|
|
|
added a faster check for a finished header
|
|
|
|
|
|
after disabling all modules it is still possible to get 20 kreq/s.
|
|
|
|
|
|
15.03.2004 19:45 - 1.1.1
|
|
|
- localizer server
|
|
|
|
|
|
added the localizer-server module to the code
|
|
|
|
|
|
- chunked-encoding
|
|
|
|
|
|
Apple's Safari or HTTP-Handler doesn't handle chunked-extensions defined by
|
|
|
RFC 2616 correctly and doesn't ignore them. Disabled the chunked-extension
|
|
|
which were just used for debugging purposes.
|
|
|
|
|
|
07.03.2004 12:20
|
|
|
- optimization
|
|
|
|
|
|
moved the checks if a plugins support a given function from the dispatcher
|
|
|
(plugins_call) to plugins_call_init() to do the check only once.
|
|
|
|
|
|
equalized the plugins functions to only two types:
|
|
|
SERVER_FUNC()
|
|
|
CONNECTION_FUNC()
|
|
|
|
|
|
replaced all handwritten plugin_call-handlers with macros
|
|
|
|
|
|
made all plugin-functions 'static'
|
|
|
|
|
|
with all plugins loaded we are at 15kreq/s gain
|
|
|
without any plugin loaded at 16kreq/s
|
|
|
|
|
|
before the change we were at 13kreq/s
|
|
|
|
|
|
06.03.2004 21:13
|
|
|
- compilation fixes
|
|
|
|
|
|
fixed some warnings on FreeBSD and NetBSD by adding
|
|
|
#include <netinet/in.h>
|
|
|
|
|
|
ifdef'ed a pcre-entry in base.h
|
|
|
|
|
|
remove #define _XOPEN_SOURCE from http_auth.c for IRIX
|
|
|
crypt() on Linux needs _XOPEN_SOURCE
|
|
|
|
|
|
06.03.2004 19:18 - 1.1.0
|
|
|
- authentification
|
|
|
|
|
|
added htpasswd and htdigest backends to work against user-files generated
|
|
|
by htpasswd and htdigest.
|
|
|
|
|
|
for basic auth:
|
|
|
- plain
|
|
|
- htpasswd (crypt only)
|
|
|
- htdigest
|
|
|
|
|
|
for digest auth:
|
|
|
- plain
|
|
|
- htdigest
|
|
|
|
|
|
06.03.2004 17:35
|
|
|
- authentification
|
|
|
|
|
|
check the method in the authorization header againt the configured method
|
|
|
|
|
|
06.03.2004 14:54
|
|
|
- hostname parsing
|
|
|
|
|
|
added a RFC-2396 conforming "Host:" parser
|
|
|
added 17 checks for the parser
|
|
|
|
|
|
06.03.2004 10:25
|
|
|
- configuration
|
|
|
|
|
|
added a warning for unknown configuration variables.
|
|
|
|
|
|
dropped the 'specific-for.url' ideas for now as it is not known yet how to
|
|
|
implement it the right way
|
|
|
|
|
|
renamed some config-variables to reflect there actual meaning
|
|
|
- server.host -> server.bind
|
|
|
- server.virtual-* -> simple-vhost.*
|
|
|
- server.userid -> server.username
|
|
|
- server.groupid -> server.groupname
|
|
|
- server.docroot -> server.document-root
|
|
|
|
|
|
|
|
|
05.03.2004 15:36
|
|
|
- fastcgi
|
|
|
|
|
|
internals: moved all mod_fastcgi settings from the global struct to the
|
|
|
plugin itself
|
|
|
|
|
|
- vhosting
|
|
|
|
|
|
got a patch for enhanced virtualhosting from christian kruse -> mod_evhost
|
|
|
|
|
|
moved the virtual hosting config (server.virtual-*) to it's own module
|
|
|
called mod_simple_vhost
|
|
|
|
|
|
23.02.2004 10:06
|
|
|
- configfile
|
|
|
|
|
|
rearragned the config-file structure again to be able to add settings for
|
|
|
a given URL, Host, Filename, ...
|
|
|
This change affects some config-options directly (access.deny,
|
|
|
url.rewrite, url.redirect, virtual-hosting, ...)
|
|
|
|
|
|
added 'specific-for.url' for url specific config settings
|
|
|
|
|
|
- digest auth
|
|
|
|
|
|
FIX: md5-sess type
|
|
|
|
|
|
seperate the auth-backend stuff
|
|
|
|
|
|
13.02.2004 22:23 - lighttpd 1.0.3
|
|
|
- content-length + POST
|
|
|
|
|
|
FIX: If header and content didn't fit into one single packet the rest of
|
|
|
the content was not read correctly
|
|
|
|
|
|
13.02.2004 01:07
|
|
|
- content-length + POST
|
|
|
|
|
|
the check for content-length on a POST request vanished somehow in one of
|
|
|
the previous releases.
|
|
|
|
|
|
- header search
|
|
|
|
|
|
FIX: the search for header fields was up to now case-sensitive. Now it is
|
|
|
like required by the standard case-in-sensitive.
|
|
|
|
|
|
- browser bugs
|
|
|
|
|
|
w3m 0.2.5 adds an additional \r\n at the end of the POST requests which is
|
|
|
handled now
|
|
|
|
|
|
10.02.2004 10:12
|
|
|
- start script
|
|
|
|
|
|
took the suse rc-skeleton which states to be LSB compliant and modified it
|
|
|
for lighttpd needs
|
|
|
|
|
|
09.02.2004 11:48
|
|
|
- HEAD requests
|
|
|
|
|
|
FIX: HEAD requests for static files delived the content from the GET
|
|
|
request. (test case is added)
|
|
|
|
|
|
08.02.2004 15:53
|
|
|
- directory listings
|
|
|
|
|
|
FIX: the pathname has not encoded at all before it was transfered to the
|
|
|
browser. a proper url and html-encoding has been added.
|
|
|
|
|
|
added modification-time and filesize to the output
|
|
|
|
|
|
added a basic css for the virtual listings
|
|
|
|
|
|
07.02.2004 22:15 - lighttpd 1.0.2
|
|
|
- sample configfile
|
|
|
|
|
|
rearranged the config-file to have all the important options at the top
|
|
|
|
|
|
- docs
|
|
|
|
|
|
added a mod-rewrite options
|
|
|
|
|
|
- mod_accesslog
|
|
|
|
|
|
stdout is no longer used a default for the accesslog
|
|
|
|
|
|
- error-messages
|
|
|
|
|
|
the 404 is now reported in the error-log
|
|
|
|
|
|
07.02.2004 17:30
|
|
|
- configfile handling
|
|
|
|
|
|
if a key is used twice like
|
|
|
|
|
|
url.rewrite = ( "url1" => "url")
|
|
|
url.rewrite = ( "url2" => "url")
|
|
|
|
|
|
you get an error now. You have to write:
|
|
|
|
|
|
url.rewrite = ( "url1" => "url",
|
|
|
"url2" => "url")
|
|
|
|
|
|
31.01.2004 12:22 - lighttpd 1.0.1
|
|
|
- log cycling
|
|
|
|
|
|
added a sighup-handler to the plugin interface and fixed the log-cycling
|
|
|
for access-logs
|
|
|
|
|
|
- portability
|
|
|
|
|
|
disabled the interval-time optimization on IRIX
|
|
|
|
|
|
- documentation
|
|
|
|
|
|
added a lot of new documentation to README
|
|
|
|
|
|
31.01.2004 10:59
|
|
|
- status module
|
|
|
|
|
|
added two new options rrd-dir and rrd-reports:
|
|
|
|
|
|
rrd-reports = (boolean) # enables RRD-reports
|
|
|
rrd-dir = (string) # path for the daily status-files
|
|
|
|
|
|
fixed the "status-files in /"-bug this way
|
|
|
|
|
|
|
|
|
22.01.2004 13:38 - lighttpd 1.0.0
|
|
|
- simple docroot
|
|
|
|
|
|
fixed handling of docroots if virtual-host is disabled
|
|
|
|
|
|
27.12.2003 11:12
|
|
|
- license handling
|
|
|
|
|
|
added the first interface to license handling.
|
|
|
|
|
|
25.12.2003 23:48
|
|
|
- protability
|
|
|
|
|
|
Verified again that the code compiles and runs cleanly on Linux, FreeBSD,
|
|
|
NetBSD and IRIX
|
|
|
|
|
|
compiling with gcc and the option -pedantic works fine
|
|
|
compiling with mipspro cc works fine, too
|
|
|
|
|
|
- tests
|
|
|
|
|
|
added some more tests: 39 tests
|
|
|
|
|
|
25.12.2003 16:01
|
|
|
- protability
|
|
|
|
|
|
some compile fixes for FreeBSD have been applied and a new switch has been
|
|
|
added to choose between IPv4 and IPv6 on FreeBSD.
|
|
|
(cmdline: -6, configfile: server.use-ipv6)
|
|
|
|
|
|
- packaging
|
|
|
|
|
|
cleaned up the specfile for building RPMs
|
|
|
|
|
|
21.12.2003 01:00
|
|
|
- authorization
|
|
|
|
|
|
brought basic and digest auth back to life. this module as the last one
|
|
|
which had to be updated after the config-file changes
|
|
|
|
|
|
- test harness framework
|
|
|
|
|
|
add 3 tests for basic auth
|
|
|
|
|
|
20.12.2003 22:10
|
|
|
- compression
|
|
|
|
|
|
added gzip compression (gzip-header + deflate + crc)
|
|
|
|
|
|
- test harness framework
|
|
|
|
|
|
added a 22 tests to verify the correct behaviour of lighttpd
|
|
|
|
|
|
- request parsing
|
|
|
|
|
|
GET http://www.yahoo.com/ HTTP/1.0
|
|
|
|
|
|
is handled now as
|
|
|
|
|
|
GET / HTTP/1.0
|
|
|
|
|
|
- plugins
|
|
|
|
|
|
moved FastCGI and CGI handling into modules which can be loaded at run-time
|
|
|
|
|
|
17.12.2003 13:18
|
|
|
- compression
|
|
|
|
|
|
the directory structure is now build automaticly
|
|
|
|
|
|
15.12.2003 01:00
|
|
|
- compression
|
|
|
|
|
|
added a compression cache to the compression module (mod_compress)
|
|
|
|
|
|
Vary: Accept-Encoding is set now as it influences to delivered stream of
|
|
|
bytes. This is important for caches.
|
|
|
|
|
|
10.12.2003 00:24
|
|
|
- config files
|
|
|
|
|
|
a new config-file format is ready for the final release of lighttpd.
|
|
|
|
|
|
it supports:
|
|
|
|
|
|
server.docroot = "string"
|
|
|
server.host = integer
|
|
|
server.modules = ( "string", "string" )
|
|
|
server.mimetypes = ( "key" => "value" )
|
|
|
server.complex = ( "key" => ( "string", integer ),
|
|
|
"string",
|
|
|
integer )
|
|
|
|
|
|
the syntax should look familar to all who worked with Perl or PHP.
|
|
|
|
|
|
config-file handling has been seperated into a parser and a lexer. Both
|
|
|
are currently written by hand and will propably be rewritten into bison +
|
|
|
flex if time permits. But that would be a cosmetical change.
|
|
|
|
|
|
05.12.2003 03:07
|
|
|
- status-page
|
|
|
|
|
|
improved the status page to display
|
|
|
- the current connection-stati
|
|
|
- average throughput over 5 seconds
|
|
|
(requests/s and output-bound traffic)
|
|
|
|
|
|
now you can see what is going on in the server
|
|
|
|
|
|
- access-log
|
|
|
|
|
|
the accesslog is now a module and can be disabled by just removing the
|
|
|
plugin from the list of loaded plugins
|
|
|
|
|
|
04.12.2003 16:18
|
|
|
- chroot-ing
|
|
|
|
|
|
how-to: using chroot
|
|
|
|
|
|
- chroot to /home/www/
|
|
|
- docroot at /servers/<hostname>/pages/
|
|
|
- defaulthost www.example.org
|
|
|
|
|
|
e.g. (external view)
|
|
|
/home/www/servers/www.example.org/pages/index.html
|
|
|
|
|
|
(in chroot)
|
|
|
/servers/www.example.org/pages/index.html
|
|
|
|
|
|
config:
|
|
|
|
|
|
chroot /home/www/
|
|
|
userid wwwrun
|
|
|
groupid nogroup
|
|
|
|
|
|
virtual-server-root /servers/
|
|
|
virtual-server-default-host www.example.org
|
|
|
virtual-server-docroot /pages/
|
|
|
|
|
|
The FastCGI process is living outside this chroot definition as it is
|
|
|
started seperatly.
|
|
|
|
|
|
01.12.2003 02:06
|
|
|
- cleanup
|
|
|
|
|
|
in preparation for the first stable release some internals had to be
|
|
|
cleaned up. Basicly it was a cleanup of workflow of the creation of the
|
|
|
response-header. All modules can use a clean interface for this purpose
|
|
|
now. This is espacially usefull for all modules which have to pass some
|
|
|
HTTP-headers to the client.
|
|
|
|
|
|
29.11.2003 22:22
|
|
|
- modules
|
|
|
|
|
|
finally moved the modules to shared libraries and cleaned up some code
|
|
|
path to become more readable.
|
|
|
|
|
|
So far we have:
|
|
|
|
|
|
mod_rewrite
|
|
|
mod_redirect
|
|
|
mod_access
|
|
|
mod_auth
|
|
|
mod_cache
|
|
|
mod_chat
|
|
|
mod_status
|
|
|
mod_maps
|
|
|
|
|
|
28.11.2003 18:16
|
|
|
- redirects
|
|
|
|
|
|
as lighttpd supports url-rewriting redirection was a few lines of new code.
|
|
|
|
|
|
redirect ^/wishlist/(.+) http://jan.kneschke.de/wishlist/$1
|
|
|
|
|
|
rewrite ^/wishlist/(.+) /new/wishlist/$1
|
|
|
|
|
|
28.11.2003 17:00
|
|
|
- signal stuff
|
|
|
|
|
|
setitimer is used to send a event every second to call time() only once a
|
|
|
second. another system call which has been remove from the main-loop.
|
|
|
|
|
|
sending HUP to lighttpd will close and re-open the logfiles. this is used
|
|
|
for cycling logfiles.
|
|
|
|
|
|
#! /bin/sh
|
|
|
|
|
|
###
|
|
|
#
|
|
|
# a simple logfile rotator for lighttpd
|
|
|
#
|
|
|
|
|
|
DATE=`date +"%Y%m%d-%H%M"`
|
|
|
LPID=`pidof lighttpd`
|
|
|
mv access.log access.log.${DATE}
|
|
|
kill -HUP ${LPID}
|
|
|
gzip access.log.${DATE}
|
|
|
|
|
|
27.11.2003 01:07
|
|
|
- native win32 port
|
|
|
|
|
|
a first attempt for a native win32 has been done. For now mingw is the
|
|
|
base for the development as it provides a basic unix-like framework for
|
|
|
building native win32 applications.
|
|
|
|
|
|
the most internal files have been ported and the over all progress is
|
|
|
going well. At the end this will just be a prove of concept.
|
|
|
|
|
|
26.11.2003 01:17
|
|
|
- access denied
|
|
|
|
|
|
added a access-deny filter to block specific urls like
|
|
|
|
|
|
access-deny ~
|
|
|
access-deny .inc
|
|
|
|
|
|
17.11.2003 01:06
|
|
|
- bug fixing
|
|
|
|
|
|
a fstat() on a opened fd which has changed reports wrong the file-info.
|
|
|
Using stat() again helps to solve this problem.
|
|
|
|
|
|
the sig-io version doesn't suffer from this problem.
|
|
|
|
|
|
the etags are now used for verifing file-cache-entries.
|
|
|
|
|
|
- chat
|
|
|
|
|
|
enabled the internal login mechanism again
|
|
|
|
|
|
added support transfering session-infos over MySQL.
|
|
|
|
|
|
15.11.2003 00:19
|
|
|
- optimizing
|
|
|
|
|
|
added a buffer_equal_reverse function which is optimized version of strcmp
|
|
|
which is going backwards as pathnames are often the same for in the first
|
|
|
bytes.
|
|
|
|
|
|
wrote a one-pass parser for the request-header. The combination of
|
|
|
strstr(..., "\r\n") to seperate lines and strchr(..., ':') to seperate
|
|
|
keys from values more or less touched every byte twice.
|
|
|
|
|
|
we are still at 18.000 req/s for 4kb keep-alive requests even with etags
|
|
|
and handling all header fields.
|
|
|
|
|
|
14.11.2003 17:26
|
|
|
- fcgi
|
|
|
|
|
|
Content-Type wasn't passed correctly to the FastCGI app. HTTP_CONTENT_TYPE
|
|
|
was sent instead.
|
|
|
|
|
|
- cache
|
|
|
|
|
|
provided access to the Session-ID
|
|
|
|
|
|
- error-log
|
|
|
|
|
|
the timestamp is now written in a human readable form
|
|
|
|
|
|
22.10.2003 00:06
|
|
|
- fcgi, cgi
|
|
|
|
|
|
added a special set of array-functions which are optimised for the "insert
|
|
|
only once" case.
|
|
|
|
|
|
this provides access to the headers which are now forwarded to the external
|
|
|
interfaces. Before this change only a limited set of request-headers were
|
|
|
forwarded.
|
|
|
|
|
|
21.10.2003 11:58
|
|
|
- modules
|
|
|
|
|
|
added a new module-hook after the basic-init of the module for handling
|
|
|
config-settings and prepare the overall operartion (like building
|
|
|
db-connections, compiling regexes, ...)
|
|
|
|
|
|
- cache
|
|
|
|
|
|
use turckmm-cache 2.4.3 to get some numbers for the php-latency:
|
|
|
|
|
|
/usr/sbin/ab -n 10000 -c 10 http://alba.home.kneschke.de:1025/index.php
|
|
|
|
|
|
handling the cache-decision and the cache-hit in php:
|
|
|
|
|
|
cache-miss: 100% (-> $version = 0)
|
|
|
|
|
|
plain : 108.13 req/s
|
|
|
turckmm-cache: 218.39 req/s
|
|
|
|
|
|
cache-hit: 100% (-> $version = 1)
|
|
|
|
|
|
plain : 164.45 req/s
|
|
|
turckmm-cache: 653.98 req/s
|
|
|
|
|
|
handling the cache-decision and the cache-hit in the server:
|
|
|
|
|
|
cache-hit: 100%, but using index.cml
|
|
|
|
|
|
cml: 4918.84 req/s (no keep-alive)
|
|
|
cml: 6901.31 req/s (keep-alive)
|
|
|
|
|
|
cache-miss: 100%, but using index.cml
|
|
|
|
|
|
plain : 108.39 req/s
|
|
|
turckmm-cache: 217.84 req/s
|
|
|
|
|
|
Conclusion:
|
|
|
- there is no loss in the cache-miss case through the cml-handling
|
|
|
- the cache-hit case can be improved dramaticly with lighttpd-cache
|
|
|
- turckmm-cache improves the cache-miss case alot
|
|
|
|
|
|
20.10.2003 00:40
|
|
|
- cache
|
|
|
|
|
|
the first 'real-life' test showed dramatic improvements in the req/s
|
|
|
handling.
|
|
|
|
|
|
The basic idea was to move the decision if a php-page can be taken from
|
|
|
the cache from the php-code to the webserver.
|
|
|
|
|
|
See here why this is a good thing:
|
|
|
|
|
|
the quite common code which works for http://jan.kneschke.de/ is using
|
|
|
templates and is quite static, but depends on 4 external files (the
|
|
|
menu-structure, the template, the current content, the class-file).
|
|
|
|
|
|
the index-file is always:
|
|
|
|
|
|
include_once "jk.inc";
|
|
|
|
|
|
$v = new view();
|
|
|
print $v->get(array(array ("file" => "content.html")));
|
|
|
|
|
|
It is more or less the same for all pages.
|
|
|
|
|
|
This basic setup can deliver 100 requests/s.
|
|
|
|
|
|
The next step has:
|
|
|
- application bases caching
|
|
|
|
|
|
as we know that each pages depends on those 4 files, you can check if they
|
|
|
have been modified since the last request and deliver the content from the
|
|
|
cache otherwise.
|
|
|
|
|
|
this increased the throughput to 150 req/s. (cache-hit ratio 100%)
|
|
|
|
|
|
The next logic step is to move the decision-making process out of the PHP
|
|
|
code as PHP is to slow for the cache-hit path:
|
|
|
|
|
|
a CML (Cache-Markup-Language) has been written which describes the whole
|
|
|
decision process which has been written in PHP-code before:
|
|
|
|
|
|
|
|
|
output.content-type text/html
|
|
|
|
|
|
output.include _cache.html
|
|
|
|
|
|
trigger.handler index.php
|
|
|
|
|
|
trigger.if file.mtime("../lib/php/menu.csv") > file.mtime("_cache.html")
|
|
|
trigger.if file.mtime("templates/jk.tmpl") > file.mtime("_cache.html")
|
|
|
trigger.if file.mtime("content.html") > file.mtime("_cache.html")
|
|
|
|
|
|
if one of the 'trigger.if' statements is true the 'trigger.handler' is
|
|
|
called to generate the pages.
|
|
|
|
|
|
if none of the them is trigger the files from 'output.include' are sent to
|
|
|
the browser with content-type specified in the first line:
|
|
|
|
|
|
The result was very 'promissing':
|
|
|
|
|
|
5900 req/s with keep-alive
|
|
|
3800 req/s without keep-alive
|
|
|
|
|
|
(both for a cache-hit ratio of 100%)
|
|
|
|
|
|
for keep-alive this is factor <b>59</b> against the plain un-cached
|
|
|
version and still <b>39</b> againt the php-cache-version which is doing
|
|
|
exactly the same.
|
|
|
|
|
|
Time for party. :)
|
|
|
|
|
|
19.10.2003 - 18:55
|
|
|
- cache
|
|
|
|
|
|
the handling of functions has been improved. they are now 'plugable'. just
|
|
|
the dlopen() stuff is missing.
|
|
|
|
|
|
a new datatype has been added: the string
|
|
|
|
|
|
this makes it possible to evaluate something like:
|
|
|
|
|
|
trigger.if unix.time.now() - file.mtime("head.html") > 30
|
|
|
trigger.if mysql.query("SELECT count(*) " + \
|
|
|
" FROM structure AS struc, session AS sess " + \
|
|
|
" WHERE struct.user = sess.user" + \
|
|
|
" AND sess.id = \"" + mysql.escape("ab\"c") + "\"")
|
|
|
|
|
|
you see:
|
|
|
- string operations (concat)
|
|
|
- handing of escape-sequences
|
|
|
- functions
|
|
|
- comparisions
|
|
|
|
|
|
18.10.2003 - 13:39
|
|
|
- cvs
|
|
|
|
|
|
imported everything into the cvs server which makes the whole revision
|
|
|
handler a lot easier. The CVS server was up all the time but not used.
|
|
|
Importing required 5 minutes of work which included merge the freebsd and
|
|
|
the linux tree.
|
|
|
|
|
|
- compilers + platforms
|
|
|
|
|
|
on a regular various compilers and platform are check to compile with with
|
|
|
the current code base:
|
|
|
|
|
|
platform | os | compiler | state
|
|
|
---------+---------------------+--------------+---------
|
|
|
ia32 | Linux 2.4.22 | gcc 2.95.3 | ok
|
|
|
ia32 | FreeBSD 5.1-CURRENT | gcc 3.3.1 | ok
|
|
|
mips64 | IRIX 6.5 | gcc 3.2.2 | ok
|
|
|
misp64 | IRIX 6.5 | MIPSpro 7.41 | ok
|
|
|
|
|
|
the mipspro compiler revealed some warning which resulted in a nice
|
|
|
code-cleanup that made the code more readable.
|
|
|
|
|
|
18.10.2003 - 03:00
|
|
|
- e-tags and friends
|
|
|
|
|
|
in preparation for the php-conference at the begin of november in
|
|
|
frankfurt/main the server has the support some more caching/proxy tags
|
|
|
like:
|
|
|
- E-Tag (14.19) [done]
|
|
|
- If-Match (14.24)
|
|
|
- If-None-Match (14.26) [done]
|
|
|
- If-Range (14.27)
|
|
|
|
|
|
Section (13.3.3) binds them together. [RFC 2616]
|
|
|
|
|
|
using lxr.kde.org and lxr.mozilla.org revealed that
|
|
|
- konqui only uses if-none-match
|
|
|
- mozilla uses if-none-match and if-range
|
|
|
|
|
|
it looks like it isn't that easy to trigger the if-range case.
|
|
|
|
|
|
As ulf suggested the etag is a hash of file-size, inode-number and mtime.
|
|
|
|
|
|
- fd-caching
|
|
|
|
|
|
ulf just phoned me ask proposed the free the cache more agressivly in case
|
|
|
of fd-shortage. increasing the the fd-limit is the better idea. :)
|
|
|
|
|
|
17.10.2003 12:45
|
|
|
- chat
|
|
|
|
|
|
finished the mysql-support for storing the sessions
|
|
|
|
|
|
12.10.2003 20:56
|
|
|
- valgrind
|
|
|
|
|
|
used valgrind again to verify that the code a free of mem-leaks and found
|
|
|
a 'leak generator' in the chunk-api.
|
|
|
|
|
|
the last few leaks were just some missing free()'s at the end of the
|
|
|
program run which would have been freed anyway.
|
|
|
|
|
|
at the end valgrind couldn't find any missing free()'s.
|
|
|
|
|
|
11.10.2003 12:09
|
|
|
- FastCGI
|
|
|
|
|
|
reduced the number of system calls for FastCGI to WebServer to 2 calls per
|
|
|
fd-event. (ioctl() + read())
|
|
|
|
|
|
this has no direct effect of the performance of the server, but improves
|
|
|
the possible througput of the load-balancer.
|
|
|
|
|
|
10.10.2003 21:09
|
|
|
- FastCGI - load-balancing
|
|
|
|
|
|
a brown paper bug has been fixed which caused to decreasing throughput if
|
|
|
load-balancing was enabled.
|
|
|
|
|
|
|
|
|
benchmarking the req/s with load-balancing shows really nice results:
|
|
|
|
|
|
|
|
|
server : req/s comment
|
|
|
---------+--------------------------------------------------
|
|
|
ulf : 764.06 (php)
|
|
|
lappi : 800.06 (php)
|
|
|
|
|
|
ulf+lappi: 1526.95 (2 * php)
|
|
|
|
|
|
grisu : 1265.66 (php + ab + lighttpd)
|
|
|
|
|
|
|
|
|
all : 1647.72 (3 * php + ab + lighttpd)
|
|
|
all(nice): 1904.40 (same as all, but the local php on grisu
|
|
|
has been 'nice -20'd)
|
|
|
|
|
|
|
|
|
if a php is run on the load-balancer it has to get a lower priority than
|
|
|
the load-balancer itself as to handle the work of (here) 3 php-servers.
|
|
|
|
|
|
|
|
|
10.10.2003 15:11
|
|
|
- java ?
|
|
|
|
|
|
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jk2/common/AJPv13.html
|
|
|
|
|
|
08.10.2003 21:08
|
|
|
- gigE
|
|
|
|
|
|
Last week 3 RTL8169S gigE cards arrived and were installed in the
|
|
|
test-framework.
|
|
|
|
|
|
They are very cheap (20 Euros) and are a good start for a low-level
|
|
|
benchmark network.
|
|
|
|
|
|
First result show us:
|
|
|
|
|
|
48 Mb/s with ab.
|
|
|
|
|
|
The webserver and the test-server are equipped with a 2000+ AMD CPU. The
|
|
|
system load 95%, user load is 3%, the rest is idle on both plattforms.
|
|
|
|
|
|
After some calculations at gets clear that there are various bottlenecks:
|
|
|
|
|
|
1. The PCI-Bus (32bit/33Mhz) can only transfer 133Mb/s
|
|
|
- 48 Mb/s TCP-Traffic results in 55Mb/s Ethernet-Traffic (verified with
|
|
|
slurm) [outgoing]
|
|
|
- there is about 10Mb/s incomming traffic at the PCI bus which the
|
|
|
requests
|
|
|
- the rest of the devices at the PCI bus are eating the last few mb/s
|
|
|
2. IRQ-Handling
|
|
|
- There are reasons why the RTL8169S cards are so cheap
|
|
|
- they can't send jumbo-frames
|
|
|
- only 8k/64k buffers which results in a interrupt every 3 packets
|
|
|
- they are at least handling checksum offloading for ip, udp and tcp
|
|
|
|
|
|
In the end there is a need for new hardware to limit the throughput by the
|
|
|
Ethernet again.
|
|
|
- PCI-X, 64bit-PCI, ...
|
|
|
- 'real' gigE-Network cards
|
|
|
- ...
|
|
|
|
|
|
|
|
|
BTW: 2.4.22 + the r8139 driver are very flacky and resulted in 3 lock-ups
|
|
|
for today.
|
|
|
|
|
|
In another test the dual-PPro-FreeBSD 5.1-CURRENT machine has been used as
|
|
|
server with a gigE interface (re0) at has shown that the CPU is the limit
|
|
|
for this combination. The maximum thoughput was 7Mb/s.
|
|
|
|
|
|
Another small benchmark:
|
|
|
$ ab -n 1000 -c 10 http://192.168.2.41:<port>/lighttpd-20030925.tar
|
|
|
|
|
|
port | server | CPU Idle
|
|
|
------+-------<2D>---------+-----------
|
|
|
1025 | lighttpd | 75%
|
|
|
1026 | thttpd 2.23b1 | 75%
|
|
|
1027 | boa-0.94.14rc17 | 69% *
|
|
|
1028 | apache 1.3.x | 77%
|
|
|
|
|
|
|
|
|
In all 4 cases the thoughput was 8600 kbytes/s.
|
|
|
|
|
|
* boa had 9 failed transfers.
|
|
|
|
|
|
- FreeBSD
|
|
|
|
|
|
The problems with FreeBSD 5.0-RELEASE vanished after updating to
|
|
|
5.1-CURRENT.
|
|
|
|
|
|
26.09.2003 18:22
|
|
|
- FreeBSD
|
|
|
|
|
|
A SMP-machine has been added to the test-farm. It is running FreeBSD
|
|
|
5.1-RELEASE and will help to the improve the scalability.
|
|
|
|
|
|
fixed sendfile() handling.
|
|
|
|
|
|
- FreeBSD problems
|
|
|
|
|
|
FreeBSD-5.1-RELEASE-SMP
|
|
|
2 * Pentium Pro 200 MHz
|
|
|
192.168.2.38 (doubleheart)
|
|
|
(webserver [lighttpd at port 1025, thttpd at port 1027])
|
|
|
|
|
|
Linux 2.4.20
|
|
|
1 * AMD 2000+
|
|
|
192.168.2.10 (grisu)
|
|
|
(ab)
|
|
|
|
|
|
Problem:
|
|
|
Connections are reset by the kernel without any application intervention.
|
|
|
|
|
|
Calling 'ab' (apachebench) at grisu with the following paramters:
|
|
|
|
|
|
/usr/sbin/ab -n 10000 -c 10 http://192.168.2.38:1025/index.html
|
|
|
|
|
|
results in the following output:
|
|
|
|
|
|
...
|
|
|
Time taken for tests: 40.610 seconds
|
|
|
Complete requests: 10000
|
|
|
Failed requests: 5980
|
|
|
(Connect: 0, Length: 5980, Exceptions: 0)
|
|
|
...
|
|
|
|
|
|
|
|
|
This is reproducable and the number of failed requests is always
|
|
|
5980 +/- 50 requests. In other words: after 4000 requests tcpdump shows
|
|
|
the following output:
|
|
|
|
|
|
tcpdump shows:
|
|
|
|
|
|
00:53:48.923029 192.168.2.10.39774 > 192.168.2.38.1025: S [tcp sum ok]
|
|
|
1013737315:1013737315(0) win 5840 <mss 1460,sackOK,timestamp 5208461
|
|
|
0,nop,wscale0> (DF) (ttl 64, id 7918, len 60)
|
|
|
0x0000 4500 003c 1eee 4000 4006 964d c0a8 020a E..<..@.@..M....
|
|
|
0x0010 c0a8 0226 9b5e 0401 3c6c 6763 0000 0000 ...&.^..<lgc....
|
|
|
0x0020 a002 16d0 eeaa 0000 0204 05b4 0402 080a ................
|
|
|
0x0030 004f 798d 0000 0000 0103 0300 .Oy.........
|
|
|
|
|
|
00:53:48.923330 192.168.2.38.1025 > 192.168.2.10.39774: S [tcp sum ok]
|
|
|
1803860672:1803860672(0) ack 1013737316 win 65535 <mss 1460,nop,wscale
|
|
|
1,nop,nop,timestamp 4459794 5208461> (DF) (ttl 64, id 6821, len 60)
|
|
|
0x0000 4500 003c 1aa5 4000 4006 9a96 c0a8 0226 E..<..@.@......&
|
|
|
0x0010 c0a8 020a 0401 9b5e 6b84 bac0 3c6c 6764 .......^k...<lgd
|
|
|
0x0020 a012 ffff d4ce 0000 0204 05b4 0103 0301 ................
|
|
|
0x0030 0101 080a 0044 0d12 004f 798d .....D...Oy.
|
|
|
|
|
|
00:53:48.924009 192.168.2.10.39774 > 192.168.2.38.1025: . [tcp sum ok] ack 1
|
|
|
win 5840 <nop,nop,timestamp 5208461 4459794> (DF)
|
|
|
(ttl 64, id 7919, len 52)
|
|
|
0x0000 4500 0034 1eef 4000 4006 9654 c0a8 020a E..4..@.@..T....
|
|
|
0x0010 c0a8 0226 9b5e 0401 3c6c 6764 6b84 bac1 ...&.^..<lgdk...
|
|
|
0x0020 8010 16d0 e9c3 0000 0101 080a 004f 798d .............Oy.
|
|
|
0x0030 0044 0d12
|
|
|
|
|
|
00:53:48.924150 192.168.2.10.39774 > 192.168.2.38.1025: P [tcp sum ok]
|
|
|
1:29(28) ack 1 win 5840 <nop,nop,timestamp 5208461 4459794> (DF)
|
|
|
(ttl 64, id 7920, len 80)
|
|
|
0x0000 4500 0050 1ef0 4000 4006 9637 c0a8 020a E..P..@.@..7....
|
|
|
0x0010 c0a8 0226 9b5e 0401 3c6c 6764 6b84 bac1 ...&.^..<lgdk...
|
|
|
0x0020 8018 16d0 27e4 0000 0101 080a 004f 798d ....'........Oy.
|
|
|
0x0030 0044 0d12 4745 5420 2f69 6e64 6578 2e68 .D..GET./index.h
|
|
|
0x0040 746d 6c20 4854 5450 2f31 2e30 0d0a 0d0a tml.HTTP/1.0....
|
|
|
|
|
|
00:53:48.924728 192.168.2.38.1025 > 192.168.2.10.39774: R [tcp sum ok]
|
|
|
1803860673:1803860673(0) win 0 (ttl 64, id 6831, len 40)
|
|
|
0x0000 4500 0028 1aaf 0000 4006 daa0 c0a8 0226 E..(....@......&
|
|
|
0x0010 c0a8 020a 0401 9b5e 6b84 bac1 0000 0000 .......^k.......
|
|
|
0x0020 5004 0000 64ba 0000
|
|
|
|
|
|
SYN, SYN+ACK, ACK, DATA, RST
|
|
|
|
|
|
strace shows that no connection attempt has been reported to the
|
|
|
application which is poll()'ing the server socket.
|
|
|
|
|
|
/* the common loop without any block attempts */
|
|
|
|
|
|
accept(3, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, [0]) = 5
|
|
|
fcntl(5, F_SETFL, O_RDWR|O_NONBLOCK) = 0
|
|
|
read(5, "GET /index.html HTTP/1.0\r\n\r\n", 4095) = 28
|
|
|
stat("/home/jan/lighttpd-0.1.0/servers/", {st_mode=S_IFDIR|0755, st_size=512, ...}) = 0
|
|
|
fstat(6, {st_mode=S_IFREG|0644, st_size=4348, ...}) = 0
|
|
|
write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
|
|
|
write(2, "1064875136: (network.c.210) 235 "..., 33) = 33
|
|
|
syscall_393(0x6, 0x5, 0, 0, 0x10fc, 0, 0xbfbff2c0, 0) = 0
|
|
|
close(5) = 0
|
|
|
|
|
|
/* no futher waiting connections */
|
|
|
|
|
|
accept(3, 0xbfbff700, [1852702730]) = -1 EAGAIN (Resource temporarily unavailable)
|
|
|
|
|
|
/* enter the main-loop */
|
|
|
|
|
|
gettimeofday({1769235301, 1663069807}, NULL) = 0
|
|
|
poll([{fd=3, events=POLLIN}], 1, 1000) = 0
|
|
|
gettimeofday({4294967295, 65537}, NULL) = 0
|
|
|
poll([{fd=3, events=POLLIN}], 1, 1000) = 0
|
|
|
gettimeofday({4294967295, 65537}, NULL) = 0
|
|
|
poll([{fd=3, events=POLLIN}], 1, 1000) = 0
|
|
|
...
|
|
|
|
|
|
(strace is broken for accept() and gettimeofday(), syscall_393() is sendfile())
|
|
|
|
|
|
after entering the main-loop the webserver doesn't receive any new POLLIN
|
|
|
events at all for the next 10-15 seconds. Any connection-attempt within
|
|
|
the period is, as you can see in the tcpdump output, accepted by the
|
|
|
kernel and the received data is thrown away as the kernel sends a RST.
|
|
|
After those 10-15 seconds the application gets a POLLIN event for the
|
|
|
server socket and the normal data-transfer taken place for the next 4000
|
|
|
requests.
|
|
|
|
|
|
This behaviour is reproducable with thttpd 2.20c and the current lighttpd.
|
|
|
|
|
|
|
|
|
26.09.2003 11:42
|
|
|
- localizer
|
|
|
|
|
|
ported the localizer-server application into a module for lighttpd. After
|
|
|
30 minutes the code was ported and funtional. This modules provides access
|
|
|
to the localizer-db by a HTTP-Interface and generates the response as
|
|
|
HTML, CSV and plain-text.
|
|
|
|
|
|
So far, the module-interface looks good and flexible enough.
|
|
|
|
|
|
7000 req/s is good enough too. Generating the HTML and querying the DB
|
|
|
needs some time.
|
|
|
|
|
|
22.09.2003 08:40
|
|
|
- modules
|
|
|
|
|
|
introduced a simple module interface which allow to hook into the process
|
|
|
of handling the requests. Basicly it allows to move the url-rewriter, the
|
|
|
auth-sub-system and the cache out of the main-code. The module-interface
|
|
|
will be extended to allow the cgi and the fastcgi sub-processes to be
|
|
|
moved into a module.
|
|
|
|
|
|
15.09.2003 09:36
|
|
|
- error-handling
|
|
|
|
|
|
fastcgi and cgi connections are now closed correctly if the corresponding
|
|
|
client-connection has died.
|
|
|
|
|
|
14.09.2003 10:40
|
|
|
- cgi
|
|
|
|
|
|
finally streaming works with CGI, too
|
|
|
|
|
|
this enable support for cgiirc.sf.net and friends which use streaming as
|
|
|
there transport mechanism.
|
|
|
|
|
|
streaming has been verified with cgiirc-0.5.2.
|
|
|
|
|
|
- fdevents
|
|
|
|
|
|
there where some reports that sigio didn't work as expected. It just
|
|
|
reported no events at all. Looks like a known bug in the glibc on
|
|
|
those platforms.
|
|
|
|
|
|
Using poll() instead solve the problems.
|
|
|
|
|
|
27.08.2003 22:12
|
|
|
- rewrite
|
|
|
|
|
|
a pcre based rewrite engine has been integrated
|
|
|
|
|
|
- cgi
|
|
|
|
|
|
the file-based cgi interface has been replace by two pipes.
|
|
|
|
|
|
23.07.2003 13:29
|
|
|
- fdevents
|
|
|
|
|
|
the whole fd-event handling has been reworked and several smaller bugs
|
|
|
and design-errors have fixed.
|
|
|
|
|
|
sigio, poll() and select() are working fine again.
|
|
|
|
|
|
On IRIX 6.5 SIGIO could be used, but without further testing poll() is used.
|
|
|
|
|
|
- cgi
|
|
|
CGI-support is still broken.
|
|
|
|
|
|
21.07.2003 18:46
|
|
|
- dnotify
|
|
|
|
|
|
using the F_NOTIFY feautre of the Linux 2.4.x kernel gives anothre nice
|
|
|
performance boost as lighttpd can cache the stat()'s the right way, now.
|
|
|
|
|
|
23009.66 @ 5-4k-k which means +10% against 30.06.2003 14:03
|
|
|
|
|
|
for 1000-4k-nok the performace nearly doubles: 3730.23 goes up to 6144.39
|
|
|
|
|
|
17.07.2003 13:21
|
|
|
- FreeBSD
|
|
|
|
|
|
a small patch (#include <>) to compile lighttpd on FreeBSD again.
|
|
|
|
|
|
08.07.2003 10:48
|
|
|
- fileinfo-cache
|
|
|
|
|
|
A reallife test showed that the cache wasn't perfect at all as it made
|
|
|
lighttpd crash. This is fixed now.
|
|
|
|
|
|
30.06.2003 17:40
|
|
|
- lighttpd-bench
|
|
|
|
|
|
After some problems with other benchmarking tools for webservers the first
|
|
|
version of lighttpd-bench has been written.
|
|
|
|
|
|
It a revealed a nasty strange behaviour which was fixed by increasing the
|
|
|
listen-backlog from 5 to 1024.
|
|
|
|
|
|
30.06.2003 14:03
|
|
|
- fileinfo-cache
|
|
|
|
|
|
the fileinfo-cache has been relaxed a little bit and there are always 2
|
|
|
fstat()'s per file-request now. This isn't that dramatic:
|
|
|
|
|
|
21800.74 req/s is still a very good result (7-4k-k).
|
|
|
|
|
|
29.06.2003 03:29
|
|
|
- fileinfo-cache
|
|
|
|
|
|
a fileinfo cache has been added to reduce the number of system-calls to
|
|
|
stat and open a file.
|
|
|
|
|
|
in the releases before the same file was stat'ed at least 2 times plus a
|
|
|
stat on the docroot for each request. Now the stat()'s and the
|
|
|
corresponding open() + close() calls are cached and the number of system
|
|
|
calls has been reduced to the minimum:
|
|
|
|
|
|
$ strace -eopen,stat64,read,write,sendfile,accept,shutdown,close \
|
|
|
-p `pidof lighttpd`
|
|
|
|
|
|
/* first connection */
|
|
|
accept(3, {sin_family=AF_INET6, sin6_port=htons(56211),
|
|
|
inet_pton(AF_INET6, "::ffff:192.168.2.10", &sin6_addr), sin6_flowinfo=0,
|
|
|
sin6_scope_id=0}, [28]) = 5
|
|
|
accept(3, 0xbffff470, [28]) = -1 EAGAIN
|
|
|
read(5, "GET /index.html HTTP/1.0\r\nUser-A"..., 4095) = 91
|
|
|
stat64("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages/",
|
|
|
{st_mode=S_IFDIR|0755, st_size=3656, ...}) = 0
|
|
|
stat64("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages//index.html",
|
|
|
{st_mode=S_IFREG|0644, st_size=4348, ...}) = 0
|
|
|
open("/home/weigon/projects/lighttpd/servers/grisu.home.kneschke.de:1025/pages//index.html",
|
|
|
O_RDONLY) = 6
|
|
|
write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
|
|
|
sendfile(5, 6, [0], 4348) = 4348
|
|
|
shutdown(5, 1 /* send */) = 0
|
|
|
close(5) = 0
|
|
|
|
|
|
/* second connection */
|
|
|
accept(3, {sin_family=AF_INET6, sin6_port=htons(56212), inet_pton(AF_INET6,
|
|
|
"::ffff:192.168.2.10", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, [28])
|
|
|
= 5
|
|
|
accept(3, 0xbffff470, [28]) = -1 EAGAIN
|
|
|
read(5, "GET /index.html HTTP/1.0\r\nUser-A"..., 4095) = 91
|
|
|
write(5, "HTTP/1.0 200 OK\r\nConnection: clo"..., 235) = 235
|
|
|
sendfile(5, 6, [0], 4348) = 4348
|
|
|
shutdown(5, 1 /* send */) = 0
|
|
|
close(5) = 0
|
|
|
|
|
|
|
|
|
In the end we have a new speed record:
|
|
|
|
|
|
(ab -c 8 -n 100000 http://192.168.2.10:1025/index.html with poll())
|
|
|
Requests per second: 23435.67 [#/sec] (mean)
|
|
|
|
|
|
This is a speed increasement of 20-30% against the last internal benchmark.
|
|
|
|
|
|
|
|
|
28.06.2003 02:30
|
|
|
- caching framework
|
|
|
|
|
|
the trigger.if directive is working fine. the basic algebra is done ( +,
|
|
|
-, *, / and comperations =, <=, >=, >, < and the boolean logic
|
|
|
&& and || including braces)
|
|
|
|
|
|
two basic function are available:
|
|
|
- unix.time.now
|
|
|
- file.mtime(...)
|
|
|
|
|
|
25.06.2003 17:33
|
|
|
- caching framework
|
|
|
|
|
|
added output.include, output.content-type for a cache-hit and
|
|
|
trigger.handler for a cache-miss.
|
|
|
|
|
|
the actual decision is made be trigger.if which will be added tomorrow.
|
|
|
|
|
|
15.06.2003 15:33
|
|
|
- sig-io
|
|
|
|
|
|
After several other smaller optimisations lighttpd performs better with
|
|
|
sig-io under high load:
|
|
|
|
|
|
sigio+poll poll
|
|
|
c1000-4k-nok : 2635.95 1643.39
|
|
|
c1000-4k-k : 7335.68 6788.87
|
|
|
c1000-100k-nok: 2353.49 1217.73
|
|
|
c1000-100k-k : 3097.89 2080.73
|
|
|
|
|
|
|
|
|
The user-space part has been optimized a lot. Now it is time to optimized
|
|
|
the number of context-switches between user and kernel-mode.
|
|
|
|
|
|
user 0m0.180s
|
|
|
sys 0m1.160s
|
|
|
|
|
|
a fileinfo-cache is the way to go.
|
|
|
|
|
|
struct {
|
|
|
buffer *name;
|
|
|
struct stat st;
|
|
|
int handler;
|
|
|
...
|
|
|
|
|
|
int fd;
|
|
|
void *mmap_p;
|
|
|
}
|
|
|
|
|
|
11.06.2003 14:57
|
|
|
- sig-io is back again
|
|
|
|
|
|
and it works fine.
|
|
|
|
|
|
sigio (Realtime-Signals under Linux 2.4.x) sends one signal per event and
|
|
|
buffers the rest of the events in a kernel queue. If the is full a SIGIO
|
|
|
is sent and poll() gets all events at once for further processing.
|
|
|
|
|
|
|
|
|
Currently the behaviour is a little bit strange:
|
|
|
- sig-io + poll() is good for non-keep-alive connections
|
|
|
- poll() for keep-alive connections
|
|
|
|
|
|
c1000-4k-nok: (1000 concurrent request, 4k filesize, no keepalive)
|
|
|
poll : 1521.38
|
|
|
sigio+poll: 2124.00
|
|
|
|
|
|
c1000-4k-k: (1000 concurrent request, 4k filesize, keepalive)
|
|
|
poll : 5882.35
|
|
|
sigio+poll: 1239.46
|
|
|
|
|
|
Very strange for now.
|
|
|
|
|
|
09.06.2003 23:59
|
|
|
- code-cleanup
|
|
|
|
|
|
the event-handling code has been rewritten to handle single events better
|
|
|
as they are expected from sig-io.
|
|
|
|
|
|
the fallback-mode of sig-io is broken now, but the normal poll() mode got
|
|
|
a 10% increasement in speed. This means the we are back the speed level of
|
|
|
20030308-0155 are as fast as zeus again.
|
|
|
|
|
|
Especially under higher load the current lighttpd performes better.
|
|
|
|
|
|
09.06.2003 11:51
|
|
|
- sig-io benchmark
|
|
|
|
|
|
20030609-1151 20030608-2110 20030308-0155
|
|
|
-c 10 sigio select() poll() poll()
|
|
|
4k : 7870.92 7937.77 8035.36 9443.76
|
|
|
4k (keep-alive) : 14098.41 14590.02 14275.52 17985.61
|
|
|
100k : 3366.32 3382.03 3261.15 3722.32
|
|
|
100k (keep-alive) : 5544.77 5576.00 5573.20 5975.86
|
|
|
-c 100
|
|
|
4k : 6144.77 5821.40 5714.29 6724.95
|
|
|
4k (keep-alive) : 9097.53 9213.19 8979.08 10833.06
|
|
|
100k : 2549.33 2495.94 2318.95 2607.36
|
|
|
100k (keep-alive) : 4267.67 4283.94 4094.17 4314.06
|
|
|
|
|
|
|
|
|
For -c 100 4k and 100k sig-io gives a small increasment.
|
|
|
|
|
|
09.06.2003 01:00
|
|
|
- sig-io
|
|
|
|
|
|
writing large files works now as expected. After removing the limit for
|
|
|
the chunks of sendfile the write-buffer-is-empty-again signal is
|
|
|
generated. that was missing.
|
|
|
|
|
|
321 of 10000 connections still have the wrong length. After that is fixed
|
|
|
it is time to start some benchmarks again.
|
|
|
|
|
|
08.06.2003 21:10
|
|
|
- sig-io
|
|
|
|
|
|
first attempts in getting SIGIO support running which were not very
|
|
|
successfull yet.
|
|
|
|
|
|
- poll()/select() benchmark
|
|
|
|
|
|
20030608-2110 20030525-1623 20030308-0155
|
|
|
-c 10 select() poll() poll() poll()
|
|
|
4k : 7937.77 8035.36 8166.60 9443.76
|
|
|
4k (keep-alive) : 14590.02 14275.52 14781.97 17985.61
|
|
|
100k : 3382.03 3261.15 3176.42 3722.32
|
|
|
100k (keep-alive) : 5576.00 5573.20 5809.56 5975.86
|
|
|
-c 100
|
|
|
4k : 5821.40 5714.29 5669.26 6724.95
|
|
|
4k (keep-alive) : 9213.19 8979.08 8418.22 10833.06
|
|
|
100k : 2495.94 2318.95 2314.28 2607.36
|
|
|
100k (keep-alive) : 4283.94 4094.17 4456.92 4314.06
|
|
|
|
|
|
|
|
|
as the overall processing cycle has been rearranged the overall figures
|
|
|
changed in minor ranges. c100-4k-k increased, *-100k-k decreased.
|
|
|
|
|
|
At least it still works.
|
|
|
|
|
|
08.06.2003 12:45
|
|
|
- select()/poll()
|
|
|
|
|
|
implementate an abstration layer for fd-events (like eevry other webserver).
|
|
|
currently we support poll() and select().
|
|
|
|
|
|
This should bring us support for Mac OS X and propably Windows.
|
|
|
|
|
|
04.06.2003 18:35
|
|
|
- configure
|
|
|
|
|
|
lighttpd can now be build without ssl-support even if openssl is installed
|
|
|
|
|
|
- protability
|
|
|
|
|
|
- on IRIX IPv6 is supported now out of the box
|
|
|
- for FreeBSD some missing haeders have been added
|
|
|
|
|
|
04.06.2003 14:34
|
|
|
- pipelining
|
|
|
|
|
|
adding support for pipeling introduces a problem if the request-header
|
|
|
was broken. this has been fixed now.
|
|
|
|
|
|
- unneccesary slashes
|
|
|
|
|
|
when building pathes from different portions of a string (e.g. docroot +
|
|
|
virt-server-docroot + request-uri) slashes where added for security and
|
|
|
simplicity. This resulted in up to 5 adjacent slashes which caused no harm
|
|
|
but looked strange. (fixed)
|
|
|
|
|
|
04.06.2003 09:57
|
|
|
- start/stop messages
|
|
|
|
|
|
the error-log contains the start and end-times of the lighttpd process,
|
|
|
now.
|
|
|
|
|
|
- configfile
|
|
|
|
|
|
the config-file parser has been relaxed to accepts tabs instead of spaces.
|
|
|
|
|
|
- better error-handling
|
|
|
|
|
|
fixed a <a
|
|
|
href="http://bugs.php.net/?id=24009">bug in the FastCGI-SAPI of PHP</a>
|
|
|
|
|
|
if the fastcgi process dies or closes the connection unexpectedly we
|
|
|
return 500 now instead of closing the connection to the client.
|
|
|
|
|
|
- Location
|
|
|
|
|
|
the CGI/1.1-rev-03 specification requires us to send Status 302 if a
|
|
|
Location-header is sent by the client and a Status-header is missing.
|
|
|
|
|
|
- PATH_TRANSLATED
|
|
|
|
|
|
if PHP is compiled without --discard-path PATH_TRANSLATED has to be
|
|
|
provided.
|
|
|
|
|
|
27.05.2003 15:54
|
|
|
- directory listings
|
|
|
|
|
|
if a directory is requested and the directory doesn't contain a index-file
|
|
|
a directory-listing can be displayed. You have to enable directory-listings
|
|
|
in the config-file (directory-listings on)
|
|
|
|
|
|
- url-decoding
|
|
|
|
|
|
up to know urls where not decoded at all (%26 -> . and so on). This has
|
|
|
been added. Unicode isn't supported as we use 8-bit chars internally.
|
|
|
|
|
|
26.05.2003 00:44
|
|
|
- pipelining
|
|
|
|
|
|
as Sascha required pipelining for his benchmarking tool it has been
|
|
|
implemented.
|
|
|
|
|
|
pipelining allows sending a bunch of requests at once without waiting for
|
|
|
the actual responses. This reduces the network-overhead and the
|
|
|
round-trip-time.
|
|
|
|
|
|
- non-free()d memory
|
|
|
|
|
|
dmalloc helped to close some non-free()d memory. For the normal operation
|
|
|
this isn't important as only memory chunks which had to be free()d at the
|
|
|
end of the live-time of the lighttpd-process were not de-allocated.
|
|
|
|
|
|
- partly-initialized variables
|
|
|
|
|
|
lighttpd wasn't initializing the main-structure which resulted in strange
|
|
|
behaviour in rare circumstances.
|
|
|
|
|
|
|
|
|
25.05.2003 16:23
|
|
|
- benchmarks
|
|
|
|
|
|
after removing some useless internal copies we are more or less at the old
|
|
|
speed levels.
|
|
|
|
|
|
after adding virtual-hosts 10% of the performance were lost. Using less
|
|
|
memcpy() operations might add several other boosts.
|
|
|
|
|
|
I've just checked how lighttpd compares to Zeus.
|
|
|
|
|
|
lighttpd (current) (old)
|
|
|
-c 10 20030525-1623 20030308-0155 Zeus 4_2
|
|
|
4k : 8166.60 9443.76 7278.55
|
|
|
4k (keep-alive) : 14781.97 17985.61 16496.21
|
|
|
100k : 3176.42 3722.32 3156.37
|
|
|
100k (keep-alive) : 5809.56 5975.86 5460.30
|
|
|
-c 100
|
|
|
4k : 5669.26 6724.95 5134.26
|
|
|
4k (keep-alive) : 8418.22 10833.06 8010.25
|
|
|
100k : 2314.28 2607.36 2688.32
|
|
|
100k (keep-alive) : 4456.92 4314.06 4240.70
|
|
|
|
|
|
23.05.2003 14:38
|
|
|
- cgi-variables
|
|
|
|
|
|
HTTP_HOST was missing for the cgi-module while the fcgi-module passed it
|
|
|
through to the handler. Fixed that.
|
|
|
|
|
|
- fcgi-errors
|
|
|
|
|
|
the connection to the fcgi was dropped and poll() reported an error, the
|
|
|
error wasn't reported to the client the right way.
|
|
|
|
|
|
22.05.2003 23:02
|
|
|
- authorization
|
|
|
|
|
|
the first password-storage has been added:
|
|
|
|
|
|
[auth]
|
|
|
backend plan
|
|
|
plain-userfile <filename>
|
|
|
|
|
|
require /download/ user=jan|user=anom
|
|
|
http-auth /download/ "download archiv" digest
|
|
|
|
|
|
groups are prepared but not implemented. basic and digest are working fine.
|
|
|
|
|
|
20.05.2003 17:53
|
|
|
- authentification
|
|
|
|
|
|