# Copyright 1999-2013 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.19 2013/10/24 06:25:03 dev-zero 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.
auth_pam - This module provides authentication via PAM.
auth_request - Module implementing client authorization based on the result of a subrequest.
autoindex - This module provides automatic directory listings.
browser - This module creates variables, the values of which depend on the request header "User-agent".
cache_purge - External module adding ability to purge content from nginx's FastCGI and proxy caches.
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.
dav_ext - Add missing WebDAV methods PROPFIND & OPTIONS to the existing WebDAV module.
degradation - Allows to return 204 or 444 code for some locations on low memory condition (reliable on FreeBSD only)
echo - Brings shell-style goodies to Nginx config file.
empty_gif - This module keeps a 1x1 transparent GIF in memory that can be served very quickly.
fancyindex - This module makes possible the generation of file listings, like the built-in autoindex module does, but adding a touch of style.
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.
gunzip - Permits to decompress gzip'ed files on-the-fly for clients not supporting the gzip encoding method.
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.
headers_more - Set and clear input and output headers
image_filter - This module is a filter for transforming JPEG, GIF and PNG images.
limit_conn - This module makes it possible to limit the number of simultaneous connections for the assigned session
limit_req - This module allows you to limit the number of requests for a given session.
limit_conn - This module makes it possible to limit the number of simultaneous connections for the assigned session
limit_zone - This module makes it possible to limit the number of simultaneous connections for the assigned session
lua - Embed the power of Lua into nginx
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.
metrics - Module to export various metrics in easy-parseable JSON.
mp4 - This module adds pseudo-streaming
naxsi - An open source, high performance, low rules maintenance, Web Application Firewall module for Nginx.
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.
push - External module turning Nginx into an adept HTTP Push and Comet server.
push_stream - Push Stream module, supporting EventSource, WebSocket, Long Polling, and Forever Iframe.
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.
scgi - An implementation of the Simple Common Gateway Interface.
secure_link - This module computes and checks request URLs for a required security token.
security - Web application firewall and Intrusion Detection System.
slowfs_cache - This module adds the ability to cache static files
split_clients - This module provides A/B testing support.
ssi - This module provides a filter which processes Server-Side Includes (SSI) in the input.
spdy - This module provides an SPDY implementation.
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.
upload - Enable support for handling file uploads using multipart/form-data encoding
upload_progress - This module adds the ability to track POST upload progress via JSON API
upstream_check - Add health check support for upstream servers.
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.
uwsgi - External module for the uWSGI protocol for python web apps.
xslt - This module is a filter which converts an XML response with the aid of one or more XSLT templates.
