x-ref: https://wiki.lighttpd.net/Docs_ConfigurationOptions#Deprecatedmaster
parent
1334dd4ad5
commit
86c2d30936
@ -1,27 +0,0 @@
|
||||
#######################################################################
|
||||
##
|
||||
## CML Module
|
||||
## ---------------
|
||||
##
|
||||
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModCML
|
||||
##
|
||||
server.modules += ( "mod_cml" )
|
||||
index-file.names += ( "index.cml" )
|
||||
|
||||
##
|
||||
## The file extension that is bound to the cml-module.
|
||||
##
|
||||
cml.extension = ".cml"
|
||||
|
||||
##
|
||||
## Memcached hosts used for memcache* functions.
|
||||
##
|
||||
#cml.memcache-hosts = ( "127.0.0.1:11211" )
|
||||
|
||||
##
|
||||
## A cml file that is executed for each request.
|
||||
##
|
||||
#cml.power-magnet = server_root + "/htdocs/powermagnet.cml"
|
||||
|
||||
##
|
||||
#######################################################################
|
@ -1,28 +0,0 @@
|
||||
#######################################################################
|
||||
##
|
||||
## GeoIP Module
|
||||
## ---------------
|
||||
##
|
||||
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModGeoip
|
||||
##
|
||||
## mod_geoip is a module for fast ip/location lookups. It uses MaxMind
|
||||
## GeoIP / GeoCity databases. If the ip was found in the database the
|
||||
## module sets the appropriate environments variables to the request,
|
||||
## thus making other modules/fcgi be informed.
|
||||
##
|
||||
server.modules += ( "mod_geoip" )
|
||||
|
||||
##
|
||||
## mod_geoip will determine the database type automatically so if you
|
||||
## enter GeoCity databse path it will load GeoCity Env.
|
||||
##
|
||||
#geoip.db-filename = "/path/to/GeoLiteCity.dat"
|
||||
|
||||
##
|
||||
## If enabled, mod_geoip will load the database binary file to memory
|
||||
## for very fast lookups. The only penalty is memory usage.
|
||||
##
|
||||
#geoip.memory-cache = "disable"
|
||||
|
||||
##
|
||||
#######################################################################
|
@ -1,47 +0,0 @@
|
||||
#######################################################################
|
||||
##
|
||||
## Virtual hosting with MySQL
|
||||
## ----------------------------
|
||||
##
|
||||
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModMySQLVhost
|
||||
##
|
||||
server.modules += ( "mod_mysql_vhost" )
|
||||
|
||||
##
|
||||
## Either set the the socket or host (and port)
|
||||
##
|
||||
## Local path to the mysql socket
|
||||
##
|
||||
#mysql-vhost.sock = "/var/lib/mysql/mysql.sock"
|
||||
|
||||
##
|
||||
## Host of the MySQL server.
|
||||
##
|
||||
#mysql-vhost.hostname = "localhost"
|
||||
|
||||
##
|
||||
## Optional: port to use.
|
||||
##
|
||||
#mysql-vhost.port = 3306
|
||||
|
||||
##
|
||||
## Name of the database
|
||||
##
|
||||
mysql-vhost.db = "lighttpd"
|
||||
|
||||
##
|
||||
## SQL User/Password for the connection
|
||||
##
|
||||
mysql-vhost.user = "lighttpd"
|
||||
mysql-vhost.pass = "secret"
|
||||
|
||||
##
|
||||
## The query to get the needed informations from the database.
|
||||
##
|
||||
## It doesnt matter how you name the fields the first field is always used
|
||||
## as the document root.
|
||||
##
|
||||
mysql-vhost.sql = "SELECT docroot FROM domains WHERE domain='?'"
|
||||
|
||||
##
|
||||
#######################################################################
|
@ -1,70 +0,0 @@
|
||||
#######################################################################
|
||||
##
|
||||
## Trigger before download
|
||||
## ---------------
|
||||
##
|
||||
## - if user requests ''download-url'' directly, the request is denied
|
||||
## and he is redirected to ''deny-url'
|
||||
## - if user visits ''trigger-url'' before requesting ''download-url'',
|
||||
## access is granted
|
||||
## - if user visits ''download-url'' again after ''trigger-timeout'' has
|
||||
## elapsed, the request is denied and he is redirected to ''deny-url''
|
||||
##
|
||||
## See https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModTriggerBeforeDownload
|
||||
##
|
||||
server.modules += ( "mod_mod_trigger_b4_dl" )
|
||||
|
||||
##
|
||||
## To store the trigger state you can either use a local GDBM
|
||||
## file or memcached(s).
|
||||
##
|
||||
|
||||
##
|
||||
## Path to the local GDBM file.
|
||||
##
|
||||
trigger-before-download.gdbm-filename = home_dir + "/trigger.db"
|
||||
|
||||
##
|
||||
## List of memcached servers.
|
||||
##
|
||||
#trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
|
||||
|
||||
##
|
||||
## URL prefix a visitor has to visit before downloading is allowed
|
||||
##
|
||||
trigger-before-download.trigger-url = "^/trigger/"
|
||||
|
||||
##
|
||||
## URL Prefix of the proteced area.
|
||||
##
|
||||
trigger-before-download.download-url = "^/download/"
|
||||
|
||||
##
|
||||
##
|
||||
## The deny url.
|
||||
##
|
||||
trigger-before-download.deny-url = "http://www.example.com/index.html"
|
||||
|
||||
##
|
||||
## How long the "ticket" of the user will be valid.
|
||||
##
|
||||
## Value in seconds.
|
||||
##
|
||||
trigger-before-download.trigger-timeout = 10
|
||||
|
||||
##
|
||||
## Normally the memcached key will be the remote ip of the request
|
||||
## If you store other data in the memcached aswell and want to avoid
|
||||
## key collisions you can configure a memcache-namespace.
|
||||
##
|
||||
## The key for the request will be memcache-namespace + remote_ip than.
|
||||
##
|
||||
#trigger-before-download.memcache-namespace = "t4bdl_"
|
||||
|
||||
##
|
||||
## If set to 1, the module will log some debug informations.
|
||||
##
|
||||
#trigger-before-download.debug = 0
|
||||
|
||||
##
|
||||
#######################################################################
|
@ -1,261 +0,0 @@
|
||||
=========================
|
||||
CML (Cache Meta Language)
|
||||
=========================
|
||||
|
||||
---------------
|
||||
Module: mod_cml
|
||||
---------------
|
||||
|
||||
:Author: Jan Kneschke
|
||||
:Date: $Date: 2004/11/03 22:26:05 $
|
||||
:Revision: $Revision: 1.2 $
|
||||
|
||||
:abstract:
|
||||
CML is a Meta language to describe the dependencies of a page at one side and building a page from its fragments on the other side using LUA.
|
||||
|
||||
.. meta::
|
||||
:keywords: lighttpd, cml, lua
|
||||
|
||||
.. contents:: Table of Contents
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
CML (Cache Meta Language) wants to solves several problems:
|
||||
|
||||
* dynamic content needs caching to perform
|
||||
* checking if the content is dirty inside of the application is usually more expensive than sending out the cached data
|
||||
* a dynamic page is usually fragmented and the fragments have different livetimes
|
||||
* the different fragments can be cached independently
|
||||
|
||||
Cache Decision
|
||||
--------------
|
||||
|
||||
A simple example should show how to a content caching the very simple way in PHP.
|
||||
|
||||
jan.kneschke.de has a very simple design:
|
||||
|
||||
* the layout is taken from a template in templates/jk.tmpl
|
||||
* the menu is generated from a menu.csv file
|
||||
* the content is coming from files on the local directory named content-1, content-2 and so on
|
||||
|
||||
The page content is static as long non of the those tree items changes. A change in the layout
|
||||
is affecting all pages, a change of menu.csv too, a change of content-x file only affects the
|
||||
cached page itself.
|
||||
|
||||
If we model this in PHP we get: ::
|
||||
|
||||
<?php
|
||||
|
||||
## ... fetch all content-* files into $content
|
||||
$cachefile = "/cache/dir/to/cached-content";
|
||||
|
||||
function is_cachable($content, $cachefile) {
|
||||
if (!file_exists($cachefile)) {
|
||||
return 0;
|
||||
} else {
|
||||
$cachemtime = filemtime($cachefile);
|
||||
}
|
||||
|
||||
foreach($content as $k => $v) {
|
||||
if (isset($v["file"]) &&
|
||||
filemtime($v["file"]) > $cachemtime) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (filemtime("/menu/menu.csv") > $cachemtime) {
|
||||
return 0;
|
||||
}
|
||||
if (filemtime("/templates/jk.tmpl") > $cachemtime) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (is_cachable(...), $cachefile) {
|
||||
readfile($cachefile);
|
||||
exit();
|
||||
} else {
|
||||
# generate content and write it to $cachefile
|
||||
}
|
||||
?>
|
||||
|
||||
Quite simple. No magic involved. If the one of the files is new than the cached
|
||||
content, the content is dirty and has to be regenerated.
|
||||
|
||||
Now let take a look at the numbers:
|
||||
|
||||
* 150 req/s for a Cache-Hit
|
||||
* 100 req/s for a Cache-Miss
|
||||
|
||||
As you can see the increase is not as good as it could be. The main reason as the overhead
|
||||
of the PHP interpreter to start up (a byte-code cache has been used here).
|
||||
|
||||
Moving these decisions out of the PHP script into a server module will remove the need
|
||||
to start PHP for a cache-hit.
|
||||
|
||||
To transform this example into a CML you need 'index.cml' in the list of indexfiles
|
||||
and the following index.cml file: ::
|
||||
|
||||
output_contenttype = "text/html"
|
||||
|
||||
b = request["DOCUMENT_ROOT"]
|
||||
cwd = request["CWD"]
|
||||
|
||||
output_include = { b .. "_cache.html" }
|
||||
|
||||
trigger_handler = "index.php"
|
||||
|
||||
if file_mtime(b .. "../lib/php/menu.csv") > file_mtime(cwd .. "_cache.html") or
|
||||
file_mtime(b .. "templates/jk.tmpl") > file_mtime(cwd .. "_cache.html") or
|
||||
file_mtime(b .. "content.html") > file_mtime(cwd .. "_cache.html") then
|
||||
return CACHE_MISS
|
||||
else
|
||||
return CACHE_HIT
|
||||
end
|
||||
|
||||
Numbers again:
|
||||
|
||||
* 4900 req/s for Cache-Hit
|
||||
* 100 req/s for Cache-Miss
|
||||
|
||||
Content Assembling
|
||||
------------------
|
||||
|
||||
Sometimes the different fragment are already generated externally. You have to cat them together: ::
|
||||
|
||||
<?php
|
||||
readfile("head.html");
|
||||
readfile("menu.html");
|
||||
readfile("spacer.html");
|
||||
readfile("db-content.html");
|
||||
readfile("spacer2.html");
|
||||
readfile("news.html");
|
||||
readfile("footer.html");
|
||||
?>
|
||||
|
||||
We we can do the same several times faster directly in the webserver.
|
||||
|
||||
Don't forget: Webserver are built to send out static content, that is what they can do best.
|
||||
|
||||
The index.cml for this looks like: ::
|
||||
|
||||
output_contenttype = "text/html"
|
||||
|
||||
cwd = request["CWD"]
|
||||
|
||||
output_include = { cwd .. "head.html",
|
||||
cwd .. "menu.html",
|
||||
cwd .. "spacer.html",
|
||||
cwd .. "db-content.html",
|
||||
cwd .. "spacer2.html",
|
||||
cwd .. "news.html",
|
||||
cwd .. "footer.html" }
|
||||
|
||||
return CACHE_HIT
|
||||
|
||||
Now we get about 10000 req/s instead of 600 req/s.
|
||||
|
||||
Power Magnet
|
||||
------------
|
||||
|
||||
Next to all the features about Cache Decisions CML can do more. Starting
|
||||
with lighttpd 1.4.9 a power-magnet was added which attracts each request
|
||||
and allows you to manipulate the request for your needs.
|
||||
|
||||
We want to display a maintenance page by putting a file in a specified
|
||||
place:
|
||||
|
||||
We enable the power magnet: ::
|
||||
|
||||
cml.power-magnet = "/home/www/power-magnet.cml"
|
||||
|
||||
and create /home/www/power-magnet.cml with: ::
|
||||
|
||||
dr = request["DOCUMENT_ROOT"]
|
||||
|
||||
if file_isreg(dr .. 'maintenance.html') then
|
||||
output_include = { 'maintenance.html' }
|
||||
return CACHE_HIT
|
||||
end
|
||||
|
||||
return CACHE_MISS
|
||||
|
||||
For each requested file the /home/www/power-magnet.cml is executed which
|
||||
checks if maintenance.html exists in the docroot and displays it
|
||||
instead of handling the usual request.
|
||||
|
||||
Another example, create thumbnail for requested image and serve it instead
|
||||
of sending the big image: ::
|
||||
|
||||
## image-url is /album/baltic_winter_2005.jpg
|
||||
## no params -> 640x480 is served
|
||||
## /album/baltic_winter_2005.jpg/orig for full size
|
||||
## /album/baltic_winter_2005.jpg/thumb for thumbnail
|
||||
|
||||
dr = request["DOCUMENT_ROOT"]
|
||||
sn = request["SCRIPT_NAME"]
|
||||
|
||||
## to be continued :) ...
|
||||
|
||||
trigger_handler = '/gen_image.php'
|
||||
|
||||
return CACHE_MISS
|
||||
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
You need `lua <http://www.lua.org/>`_ and should install `memcached <http://www.memcached.org>`_ and have to configure lighttpd with: ::
|
||||
|
||||
./configure ... --with-lua --with-memcached
|
||||
|
||||
To use the plugin you have to load it: ::
|
||||
|
||||
server.modules = ( ..., "mod_cml", ... )
|
||||
|
||||
Options
|
||||
=======
|
||||
|
||||
:cml.extension:
|
||||
the file extension that is bound to the cml-module
|
||||
:cml.memcache-hosts:
|
||||
hosts for the memcache.* functions
|
||||
:cml.memcache-namespace:
|
||||
(not used yet)
|
||||
:cml.power-magnet:
|
||||
a cml file that is executed for each request
|
||||
|
||||
Language
|
||||
========
|
||||
|
||||
The language used for CML is provided by `LUA <http://www.lua.org/>`_.
|
||||
|
||||
Additionally to the functions provided by lua mod_cml provides: ::
|
||||
|
||||
tables:
|
||||
|
||||
request
|
||||
- REQUEST_URI
|
||||
- SCRIPT_NAME
|
||||
- SCRIPT_FILENAME
|
||||
- DOCUMENT_ROOT
|
||||
- PATH_INFO
|
||||
- CWD
|
||||
- BASEURI
|
||||
|
||||
get
|
||||
- parameters from the query-string
|
||||
|
||||
functions:
|
||||
string md5(string)
|
||||
number file_mtime(string)
|
||||
string memcache_get_string(string)
|
||||
number memcache_get_long(string)
|
||||
boolean memcache_exists(string)
|
||||
|
||||
|
||||
What ever your script does, it has to return either CACHE_HIT or CACHE_MISS.
|
||||
It case a error occurs check the error-log, the user will get a error 500. If you don't like
|
||||
the standard error-page use ``server.errorfile-prefix``.
|
||||
|
@ -1,148 +0,0 @@
|
||||
{{{
|
||||
#!rst
|
||||
==============================
|
||||
ip based geographic lookups...
|
||||
==============================
|
||||
|
||||
-----------------
|
||||
Module: mod_geoip
|
||||
-----------------
|
||||
|
||||
|
||||
|
||||
.. contents:: Table of Contents
|
||||
|
||||
Requirements
|
||||
============
|
||||
|
||||
:Packages: GeoIP C API & Library (http://www.maxmind.com/download/geoip/api/c/)
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
mod_geoip is a module for fast ip/location lookups. It uses MaxMind GeoIP /
|
||||
GeoCity databases.
|
||||
If the ip was found in the database the module sets the appropriate
|
||||
environments variables to the request, thus making other modules/fcgi be
|
||||
informed.
|
||||
|
||||
.. note::
|
||||
|
||||
Currently only country/city databases are supported because they have a free
|
||||
version that i can test.
|
||||
|
||||
Configuration Options
|
||||
========================
|
||||
|
||||
mod_geoip uses two configuration options.
|
||||
|
||||
1) geoip.db-filename = <path to the geoip or geocity database>
|
||||
2) geoip.memory-cache = <enable|disable> : default disabled
|
||||
|
||||
if enabled, mod_geoip will load the database binary file to
|
||||
memory for very fast lookups. the only penalty is memory usage.
|
||||
|
||||
.. note::
|
||||
|
||||
mod_geoip will determine the database type automatically so if you enter
|
||||
GeoCity database path it will load GeoCity Env.
|
||||
|
||||
Environment
|
||||
===========
|
||||
|
||||
Every database sets it's own ENV:
|
||||
|
||||
GeoIP (Country):
|
||||
----------------
|
||||
|
||||
::
|
||||
|
||||
GEOIP_COUNTRY_CODE
|
||||
GEOIP_COUNTRY_CODE3
|
||||
GEOIP_COUNTRY_NAME
|
||||
|
||||
GeoCity:
|
||||
--------
|
||||
|
||||
::
|
||||
|
||||
GEOIP_COUNTRY_CODE
|
||||
GEOIP_COUNTRY_CODE3
|
||||
GEOIP_COUNTRY_NAME
|
||||
GEOIP_CITY_NAME
|
||||
GEOIP_CITY_POSTAL_CODE
|
||||
GEOIP_CITY_LATITUDE
|
||||
GEOIP_CITY_LONG_LATITUDE
|
||||
GEOIP_CITY_DMA_CODE
|
||||
GEOIP_CITY_AREA_CODE
|
||||
|
||||
Examples
|
||||
========
|
||||
|
||||
mod_geoip + php
|
||||
---------------
|
||||
|
||||
when using fastcgi (not only php) you can access mod_geoip env and do as you
|
||||
please. this example just prints all mod_geoip envs to the client, html.
|
||||
|
||||
Config-file ::
|
||||
|
||||
geoip.db-filename = "/your-geoip-db-path/GeoCityLite.dat"
|
||||
geoip.memory-cache = "enable"
|
||||
|
||||
index.php ::
|
||||
|
||||
<?php
|
||||
$country_code = $_SERVER['GEOIP_COUNTRY_CODE'];
|
||||
$country_code3 = $_SERVER['GEOIP_COUNTRY_CODE3'];
|
||||
$country_name = $_SERVER['GEOIP_COUNTRY_NAME'];
|
||||
|
||||
$city_region = $_SERVER['GEOIP_CITY_REGION'];
|
||||
$city_name = $_SERVER['GEOIP_CITY_NAME'];
|
||||
$city_postal_code = $_SERVER['GEOIP_CITY_POSTAL_CODE'];
|
||||
$city_latitude = $_SERVER['GEOIP_CITY_LATITUDE'];
|
||||
$city_long_latitude = $_SERVER['GEOIP_CITY_LONG_LATITUDE'];
|
||||
$city_dma_code = $_SERVER['GEOIP_CITY_DMA_CODE'];
|
||||
$city_area_code = $_SERVER['GEOIP_CITY_AREA_CODE'];
|
||||
|
||||
echo "<html>\n<body>\n\t<br>\n";
|
||||
echo 'Country Code: ' . $country_code . '<br>';
|
||||
echo 'Country Code 3: ' . $country_code3 . '<br>';
|
||||
echo 'Country Name: ' . $country_name . '<br>';
|
||||
echo '<br>';
|
||||
echo 'City Region: ' . $city_region . '<br>';
|
||||
echo 'City Name: ' . $city_name . '<br>';
|
||||
echo 'City Postal Code: ' . $city_postal_code . '<br>';
|
||||
echo 'City Latitude: ' . $city_latitude . '<br>';
|
||||
echo 'City Long Latitude: ' . $city_long_latitude . '<br>';
|
||||
echo 'City DMA Code: ' . $city_dma_code . '<br>';
|
||||
echo 'City Area Code: ' . $city_area_code . '<br>';
|
||||
echo "</html>\n</body>";
|
||||
?>
|
||||
|
||||
country based redirect
|
||||
----------------------
|
||||
|
||||
Config-file ::
|
||||
|
||||
$HTTP["host"] =~ "www.domain.com" {
|
||||
url.rewrite = ( "" => "/redirect.php")
|
||||
}
|
||||
|
||||
redirect.php ::
|
||||
|
||||
<?php
|
||||
$country_code = $_SERVER['GEOIP_COUNTRY_CODE'];
|
||||
header ('Location: http://' . $country_code . '.domain.com/');
|
||||
?>
|
||||
|
||||
.. note::
|
||||
|
||||
Currently it is not possible to redirect based on mod_geoip directly in
|
||||
lighttpd config file. But i believe with the release of lighttpd mod_magnet
|
||||
it would be. (mod_magnet will be available in lighttpd 1.4.12+)
|
||||
|
||||
Downloads
|
||||
=========
|
||||
mod_geoip.c (http://trac.lighttpd.net/trac/attachment/wiki/Docs/ModGeoip/mod_geoip.c)
|
||||
}}}
|
@ -1,58 +0,0 @@
|
||||
====================
|
||||
MySQL-based vhosting
|
||||
====================
|
||||
|
||||
-----------------------
|
||||
Module: mod_mysql_vhost
|
||||
-----------------------
|
||||
|
||||
:Author: ada@riksnet.se
|
||||
:Date: $Date: 2004/08/29 09:43:49 $
|
||||
:Revision: $Revision: 1.1 $
|
||||
|
||||
:abstract:
|
||||
This module provides virtual hosts (vhosts) based on a MySQL table
|
||||
|
||||
.. meta::
|
||||
:keywords: lighttpd, mysql, vhost
|
||||
|
||||
.. contents:: Table of Contents
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With MySQL-based vhosting you can store the path to a given host's
|
||||
document root in a MySQL database.
|
||||
|
||||
.. note:: Keep in mind that only one vhost module should be active at a time.
|
||||
Don't mix mod_simple_vhost with mod_mysql_vhost.
|
||||
|
||||
Options
|
||||
=======
|
||||
|
||||
Example: ::
|
||||
|
||||
mysql-vhost.db = "lighttpd"
|
||||
mysql-vhost.user = "lighttpd"
|
||||
mysql-vhost.pass = "secret"
|
||||
mysql-vhost.sock = "/var/mysql.lighttpd.sock"
|
||||
mysql-vhost.sql = "SELECT docroot FROM domains WHERE domain='?'"
|
||||
|
||||
|
||||
MySQL setup: ::
|
||||
|
||||
GRANT SELECT ON lighttpd.* TO lighttpd@localhost IDENTIFIED BY 'secret';
|
||||
|
||||
CREATE DATABASE lighttpd;
|
||||
|
||||
USE lighttpd;
|
||||
|
||||
CREATE TABLE domains (
|
||||
domain varchar(64) not null primary key,
|
||||
docroot varchar(128) not null
|
||||
);
|
||||
|
||||
INSERT INTO domains VALUES ('host.dom.ain','/http/host.dom.ain/');
|
||||
|
||||
|
||||
|
@ -1,57 +0,0 @@
|
||||
=======================
|
||||
Trigger before Download
|
||||
=======================
|
||||
|
||||
-------------------------
|
||||
Module: mod_trigger_b4_dl
|
||||
-------------------------
|
||||
|
||||
:Author: Jan Kneschke
|
||||
:Date: $Date: 2004/11/03 22:26:05 $
|
||||
:Revision: $Revision: 1.2 $
|
||||
|
||||
:abstract:
|
||||
another anti-hot-linking module
|
||||
|
||||
.. meta::
|
||||
:keywords: lighttpd, hot-linking, deep-linking
|
||||
|
||||
.. contents:: Table of Contents
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
Anti Hotlinking:
|
||||
|
||||
* if user requests ''download-url'' directly, the request is denied and he is redirected to ''deny-url'
|
||||
* if user visits ''trigger-url'' before requesting ''download-url'', access is granted
|
||||
* if user visits ''download-url'' again after ''trigger-timeout'' has elapsed, the request is denied and he is redirected to ''deny-url''
|
||||
|
||||
The trigger information is either stored locally in a gdbm file or remotely in memcached.
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
* libpcre
|
||||
* libgdbm or libmemcached
|
||||
|
||||
Options
|
||||
=======
|
||||
|
||||
::
|
||||
|
||||
trigger-before-download.gdbm-filename = "/home/weigon/testbase/trigger.db"
|
||||
trigger-before-download.memcache-hosts = ( "127.0.0.1:11211" )
|
||||
trigger-before-download.trigger-url = "^/trigger/"
|
||||
trigger-before-download.download-url = "^/download/"
|
||||
trigger-before-download.deny-url = "http://192.168.1.5:1025/index.html"
|
||||
trigger-before-download.trigger-timeout = 10
|
||||
|
||||
If both trigger-before-download.gdbm-filename and
|
||||
trigger-before-download.memcache-hosts is set gdbm will take precedence.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
||||
memcached should be started with the option -M as we don't want to remove entry if the memory is full.
|
||||
|