mod_proxy_express - Apache HTTP Server Version 2.4

Apache HTTP Server Version 2.4

Apache > HTTP Server > Documentation > Version 2.4 > Modules

# Apache Module mod_proxy_express

Available Languages: en | fr

Description: | Dynamic mass reverse proxy extension for `mod_proxy`
Status: | Extension
Module Identifier: | proxy_express_module
Source File: | mod_proxy_express.c
Compatibility: | Available in Apache 2.3.13 and later

### Summary

This module creates dynamically configured mass reverse proxies, by mapping the `Host:` header of the HTTP request to a server name and backend URL stored in a DBM file. This allows for easy use of a huge number of reverse proxies with no configuration changes. It is much less feature-full than `mod_proxy_balancer`, which also provides dynamic growth, but is intended to handle much, much larger numbers of backends. It is ideally suited as a front-end HTTP switch and for micro-services architectures.

This module requires the service of `mod_proxy`.

### Warning

Do not enable proxying until you have secured your server. Open proxy servers are dangerous both to your network and to the Internet at large.

### Limitations

- This module is not intended to replace the dynamic capability of `mod_proxy_balancer`. Instead, it is intended to be mostly a lightweight and fast alternative to using `mod_rewrite` with `RewriteMap` and the `[P]` flag for mapped reverse proxying.
- It does not support regex or pattern matching at all.
- It emulates:

      <VirtualHost *:80>
         ServerName front.end.server
         ProxyPass        "/" "back.end.server:port"
         ProxyPassReverse "/" "back.end.server:port"
      </VirtualHost>

  That is, the entire URL is appended to the mapped backend URL. This is in keeping with the intent of being a simple but fast reverse proxy switch.

### Directives

### Bugfix checklist

- httpd changelog
- Known issues
- Report a bug

### See also

- `mod_proxy`
- `BalancerMember`
- `BalancerGrowth`
- `BalancerPersist`
- `BalancerInherit`
- Comments

## ProxyExpressDBMFile Directive

Description: | Pathname to DBM file.
Syntax: | `ProxyExpressDBMFile pathname`
Context: | server config, virtual host
Status: | Extension
Module: | mod_proxy_express

The `ProxyExpressDBMFile` directive points to the location of the Express map DBM file. This file serves to map the incoming server name, obtained from the `Host:` header, to a backend URL.

### Note

The file is constructed from a plain text file format using the `httxt2dbm` utility.

### ProxyExpress map file

`##
##express-map.txt:
##
www1.example.com http://192.168.211.2:8080
www2.example.com http://192.168.211.12:8088
www3.example.com http://192.168.212.10
`

### Create DBM file

`httxt2dbm -i express-map.txt -o emap
`

### Configuration

    ProxyExpressEnable on
    ProxyExpressDBMFile emap

## ProxyExpressDBMType Directive

Description: | DBM type of file.
Syntax: | `ProxyExpressDBMType type`
Default: | `ProxyExpressDBMType default`
Context: | server config, virtual host
Status: | Extension
Module: | mod_proxy_express

The `ProxyExpressDBMType` directive controls the DBM type expected by the module. The default is the default DBM type created with `httxt2dbm`.

Possible values are (not all may be available at run time):

Value | Description
--- | ---
`db` | Berkeley DB files
`gdbm` | GDBM files
`ndbm` | NDBM files
`sdbm` | SDBM files (always available)
`default` | default DBM type

## ProxyExpressEnable Directive

Description: | Enable the module functionality.
Syntax: | `ProxyExpressEnable on|off`
Default: | `ProxyExpressEnable off`
Context: | server config, virtual host
Status: | Extension
Module: | mod_proxy_express

The `ProxyExpressEnable` directive controls whether the module will be active.

Available Languages: en | fr

## Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our mailing lists.