lighttpd 1.4.x
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Glenn Strauss 036d3d3d66 [mod_proxy] simple host/url mapping in headers (fixes #152)
Provide a simple mechanism for mapping host and urlpath header strings
in proxied request and response well-known headers.  This *is not*
intended as a one-size-fits-all, infinitely extensible, regex rewriting
engine.  Instead, the proxy.header directive aims to provide built-in
functionality in mod_proxy for a few common use cases by performing
simple host matching or urlpath prefix matching, and using the
mapping of the first match.  More complex use cases could possibly be
handled by a custom lighttpd module (which does not currently exist).

Note: the contents of the HTTP request-line and HTTP headers may or
may not be in normalized canonical forms, which may or may not influence
the simple matching performed.  Admins should take care to provide safe
defaults (fail closed) if mapping is expected to occur and blindly
passing non-mapped requests is undesirable.

proxy.header = (
    #"map-host-request" => (
        #"-" => "...",#replace provided given Host request authority
        #"..." => "-",#preserve existing authority (no further matching)
        #"..." => "", #preserve existing authority (no further matching)
        #             #(equivalent to "xxx" => "xxx")
        #"xxx" => "yyy", #map one string ("xxx") to another ("yyy")
    #"map-host-response" => (
        #"-" => "...",#replace authority used in backend request
        #"..." => "-",#replace with original authority
        #"..." => "", #preserve existing authority (no further matching)
        #             #(equivalent to "xxx" => "xxx")
        #"xxx" => "yyy", #map one string ("xxx") to another ("yyy")
    #"map-urlpath" => (
        #"/xxx"  => "/yyy",#map one urlpath prefix to another
        #"/xxx/" => "/",   #map one urlpath prefix to another
        #"/xxx"  => "",    #map one urlpath prefix to another
        #"/key"  => "/value",
        # Note: request headers have matching "key" prefix replaced with
        # "value", and response headers have matching "value" prefix
        # replaced with "key", with a pre-test of the "value" from the
        # first-matched "key" in request headers (if there was a match)
    #"https-remap" => "enable",
        # For https requests from client, map https:// to http://
        # when map-host-request matches URI in request, and map http://
        # to https:// when map-host-response matches URI in response.
        # (mod_proxy currently sends all backend requests as http)

  "feature to remove part of the URI when passing along requests..."
6 years ago
doc [doc] simple-vhost.debug takes an integer value (fixes #2797) 6 years ago
scripts [build] move some build scripts to scripts/ 7 years ago
src [mod_proxy] simple host/url mapping in headers (fixes #152) 6 years ago
tests [mod_extforward] support Forwarded HTTP Extension (#2703) 6 years ago
.gitattributes update .gitignore, add .gitattributes 6 years ago
.gitignore update .gitignore, add .gitattributes 6 years ago
AUTHORS [doc] add self to AUTHORS (discussed w/ stbuehler) 7 years ago
CMakeLists.txt - next is 1.4.46 6 years ago
COPYING - white space cleanup part 2 this time 1.4 ;) 17 years ago
INSTALL [build_cmake] use MODULE on Mac OS X (fixes #1761) 7 years ago [build] move some build scripts to scripts/ 7 years ago
NEWS - next is 1.4.46 6 years ago
README [doc] Move docs to outdated/ subdir and refer to wiki instead (fixes #2248) 12 years ago
README.FreeBSD build with libressl 7 years ago
SConstruct [core] sys-strings.h abstraction for strings.h 6 years ago [autobuild] put ax_prog_cc_for_build.m4 in top directory 7 years ago new build_static/build_fullstatic/build_dynamic option 17 years ago [core] sys-strings.h abstraction for strings.h 6 years ago - white space cleanup part 2 this time 1.4 ;) 17 years ago minor: make more convenient for me 7 years ago



a light httpd

:author: Jan Kneschke
:Date: $Date: 2004/11/03 22:25:54 $
:Revision: $Revision: 1.8 $

  lighttpd a secure, fast, compliant and very flexible web-server
  which has been optimized for high-performance environments. It has a very
  low memory footprint compared to other webservers and takes care of cpu-load.
  Its advanced feature-set (FastCGI, CGI, Auth, Output-Compression,
  URL-Rewriting and many more) make lighttpd the perfect webserver-software
  for every server that is suffering load problems.


the naming

lighttpd is a __httpd__ which is

- fast as __light__ning and
- __light__ when it comes to memory consumption and system requirements



- IPv4, IPv6


- HTTP/1.0 (
- HTTP/1.1 (
- HTTPS (provided by openssl)
- CGI/1.1 (http://CGI-Spec.Golux.Com/)
- FastCGI (

Advanced Features

- load-balanced FastCGI
  (one webserver distributes requests to multiple PHP-servers via FastCGI)
- custom error pages (for Response-Code 400-599)
- virtual hosts
- directory listings
- streaming CGI and FastCGI
- URL-Rewriting
- HTTP-Redirection
- output-compression with transparent caching


- parses the Response-header and completes the HTTP-header accordingly
- Keep-Alive handling based on Content-Length header


- same speed as or faster than apache + mod_php4
- handles various PHP bugs in the FastCGI SAPI
- includes a utility to spawn FastCGI processes (necessary for PHP 4.3.x)

Security features

- chroot(), set UID, set GID
- protecting docroot

HTTP/1.1 features

- Ranges (start-end, start-, -end, multiple ranges)
- HTTP/1.0 Keep-Alive + HTTP/1.1 persistent Connections
- methods: GET, HEAD, POST
- Last-Modified + If-Modified handling
- sends Content-Length if possible
- sends Transfer-Encoding: chunk, if Content-Length is not possible
- sends Content-Type
- on-the-fly output compression (deflate, gzip)
- authentication: basic and digest

HTTP/1.1 compliance

- Sends 206 for Range Requests
- Sends 304 for If-Modified Requests
- Sends 400 for missing Host on HTTP/1.1 requests
- Sends 400 for broken Request-Line
- Sends 411 for missing Content-Length on POST requests
- Sends 416 for "out-of-range" on Range: Header
- Sends 501 for request-method != (GET|POST|HEAD)
- Sends 505 for protocol != HTTP/1.0 or HTTP/1.1
- Sends Date: on every requests

Intended Audience

- Ad-Server Front-Ends ("Banner-Schleuder")
  - delivering small files rapidly
- php-servers under high load
  (load-balancing the php-request over multiple PHP-servers)

Works with

It has been tested to work with

- IE 6.0
- Mozilla 1.x
- Konqueror 3.1
  (for Keep-Alive/Persistent Connections, Accept-Encoding for PHP + gzip)
- wget
  (for Resuming)
- acrobat plugin
  (for multiple ranges)

Works on

lighttpd has been verified to compile and work on

- Linux
- FreeBSD
- NetBSD
- Solaris 8 + 9
- SGI IRIX 6.5

missing for HTTP/1.1 compliance
- parsing chunked POST request

Starting lighttpd

As daemon in the background: ::

  $ lighttpd -f <configfile>

or without detaching from the console: ::

  $ lighttpd -D -f <configfile>