# Copyright 2010 Gentoo Foundation.
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/profiles/desc/nginx_modules_http.desc,v 1.1 2010/03/07 10:37:51 hollow Exp $

# This file contains descriptions of NGINX_MODULES_HTTP USE_EXPAND flags.

# Keep it sorted.
access - This module provides a simple host-based access control.
addition - This module adds contents of other locations before and after the current location's content.
auth_basic - This module protects your site or parts of it with username and password based on HTTP Basic Authentication.
autoindex - This module provides automatic directory listings.
browser - This module creates variables, the values of which depend on the request header "User-agent".
charset - This module can reencode data of one encoding into another.
dav - This module adds the HTTP and WebDAV methods PUT, DELETE, MKCOL, COPY and MOVE.
degradation - Unknown
empty_gif - This module keeps a 1x1 transparent GIF in memory that can be served very quickly.
fastcgi - This module allows Nginx to interact with FastCGI processes and control what parameters are passed to the process.
flv - This module provides the ability to seek within FLV (Flash) files using time-based offsets.
geo - This module creates variables, whose values depend on the IP-address of the client.
geoip - This module creates variables based on the IP-address of the client matched against the MaxMind GeoIP binary files.
gzip - This module allows for on-the-fly gzip compression.
gzip_static - Before serving a file from disk to a gzip-enabled client, this module will look for a precompressed file in the same location.
image_filter - This module is a filter for transforming JPEG, GIF and PNG images.
limit_req - This module allows you to limit the number of requests for a given session.
limit_zone - This module makes it possible to limit the number of simultaneous connections for the assigned session
map - This module allows you to classify, or map a set of values into a different set of values and store the result in a variable.
memcached - You can use this module to perform simple caching.
passenger - Passenger makes deployment of Ruby web applications a breeze.
perl - This module makes it possible to execute Perl directly within Nginx and call Perl via SSI.
proxy - This module makes it possible to transfer requests to another server.
random_index - Pick a random directory index from a directory.
realip - This module allows to change the client's IP address to value from request header (e. g. X-Real-IP or X-Forwarded-For).
referer - This module makes it possible to block access to the site with the incorrect values of line "Referer" in the request header.
rewrite - This module makes it possible to change URI using regular expressions (PCRE), and to redirect and select configuration depending on variables.
secure_link - This module computes and checks request URLs for a required security token.
ssi - This module provides a filter which processes Server-Side Includes (SSI) in the input.
stub_status - This module provides the ability to get some status from nginx.
sub - This module can search and replace text in the nginx response.
upstream_ip_hash - This module provides the ability to distribute upstream requests based on the IP-address of the client.
userid - This module gives out cookies for identification of clients.
xslt - This module is a filter which converts an XML response with the aid of one or more XSLT templates.
