===================
the Proxy Interface
===================

-----------------
Module: mod_proxy
-----------------

:Author: Jan Kneschke
:Date: $Date: 2004/08/01 07:01:29 $
:Revision: $Revision: 1.1 $

:abstract:
  The proxy module a simplest way to connect lighttpd to
  java servers which have a HTTP-interface.

.. meta::
  :keywords: lighttpd, Proxy

.. contents:: Table of Contents

Description
===========

...

Options
=======

lighttpd provides the Proxy support via the proxy-module
(mod_proxy) which provides 2 options in the config-file:

:proxy.debug:
  a value between 0 and 65535 to set the debug-level in the
  Proxy module. Currently only 0 and 1 are used. Use 1 to
  enable some debug output, 0 to disable it.

:proxy.balance:
  might be one of 'hash', 'round-robin' or 'fair' (default).

  'round-robin' choses another host for each request, 'hash'
  is generating a hash over the request-uri and makes sure
  that the same request URI is sent to always the same host.
  That can increase the performance of the backend servers
  a lot due to higher cache-locality. 'fair' is the normal
  load-based, passive balancing.

:proxy.server:
  tell the module where to send Proxy requests to. Every
  file-extension can have its own handler. Load-Balancing is
  done by specifying multiple handles for the same extension.

  structure of proxy.server section: ::

    ( <extension> =>
      (
        ( "host" => <string> ,
          "port" => <integer> ),
        ( "host" => <string> ,
          "port" => <integer> )
      ),
      <extension> => ...
    )

  :<extension>: is the file-extension or prefix (if started with "/")
                might empty to match all requests
  :"host":      is ip of the proxy server
  :"port":      is tcp-port on the "host" used by the proxy
                server (default: 80)

  e.g.: ::

    proxy.server = ( ".jsp" =>
  		       ( (
		           "host" => "10.0.0.242",
		           "port" => 81
		         ) )
		     )

Example:
========

Using lighttpd + mod_proxy in front of 8 Squids which handle the
caching of dynamic content for you. All requests for the host
www.example.org should be forwarded to the proxy. All proxies
listen on port 80 for requests. ::

  $HTTP["host"] == "www.example.org" {
    proxy.balance = "hash"
    proxy.server  = ( "" => ( ( "host" => "10.0.0.10" ),
                              ( "host" => "10.0.0.11" ),
                              ( "host" => "10.0.0.12" ),
                              ( "host" => "10.0.0.13" ),
                              ( "host" => "10.0.0.14" ),
                              ( "host" => "10.0.0.15" ),
                              ( "host" => "10.0.0.16" ),
                              ( "host" => "10.0.0.17" ) ) )
  }

If one of the hosts goes down the all requests for this one server are
moved equally to the other servers. If you want to know more about
the algorithm used here google for 'Microsoft CARP'.


