You are on page 1of 7

How To Use Apache HTTP

Server As Reverse-Proxy Using


mod_proxy Extension
Posted Feb 14, 2014 647.5kviews Apache Ubuntu Debian

Introduction
Apache is a tried and tested HTTP server which comes with access to a very
wide range of powerful extensions. Although it might not seem like the go-to
choice in terms of running a reverse-proxy, system administrators who already
depend on Apache for the available rich feature-set can also use it as a gateway
to their application servers. In most cases, this will translate to removing an
additional layer from their server set up or the need to use yet another tool just to
redirect connections.
In this DigitalOcean article, we are going to see set up Apache on Ubuntu 13 and
use it as a reverse-proxy to welcome incoming connections and redirect them to
application server(s) running on the same network. For this purpose, we are
going to use and work with the mod_proxy extension and several other related
Apache modules.

Glossary
1. Apache
2. Apache Working As A Reverse-Proxy Using
mod_proxy
3. Installing Apache And mod_proxy

1.

Updating The Operating-System

2.

Getting The Essential Build Tools

3.

Getting The Modules And Dependencies

4. Configuring Apache To Proxy Connections


1.

Activating The Modules

2.

Modifying The Default Configuration

3.

Enabling Load-Balancing

4.

Enabling SSL Support

5.

Restarting Apache

Apache
Apache HTTP server does not require an introduction, since it is probably the
most famous and popular web-server that exists. It is possible to run Apache very
easily on many different platforms and set ups. The application comes with a lot
of third party modules to handle different kind of tasks (modrewrite for rule-based
URL rewriting) and one of them, albeit nowadays relatively neglected, is
*modproxy*: The Apache Module to implement a proxy (or gateway) for servers
running on the back-end.
Tip: According to some articles, Apache's name comes from server's "patchy"
nature - i.e. it being a collection of application patches (or modules).
Note: To learn more about Apache, you can check out the Wikipedia entry on the
subject - Apache HTTP Server.

Apache Working As A Reverse-Proxy Using


mod_proxy

modproxy is the Apache module for redirecting connections (i.e. a gateway,


passing them through). It is enabled for use just like any other module and
configuration is pretty basic (or standard), in line with others. modproxy is not just
a single module but a collection of them, with each bringing a new set of
functionality.
Some of these modules are:
mod_proxy: The main proxy module for Apache that manages

connections and redirects them.


modproxyhttp: This module implements the proxy features for HTTP and

HTTPS protocols.

modproxyftp: This module does the same but for FTP protocol.

modproxyconnect: This one is used for SSL tunnelling.

modproxyajp: Used for working with the AJP protocol.

modproxywstunnel: Used for working with web-sockets (i.e. WS and


WSS).

modproxybalancer: Used for clustering and load-balancing.

mod_cache: Used for caching.

mod_headers: Used for managing HTTP headers.

mod_deflate: Used for compression.


Note: To learn more about Apache and mod_proxy, you can check out the official
Apache documentation on the subject here.

Installing Apache And mod_proxy


Note: Instructions given here are kept brief, since chances are you already have
Apache installed or know how to use it. Nonetheless, by following the steps
below you can get a new Ubuntu VPS running Apache in a matter of minutes.

Updating The Operating-System


We will begin with preparing our virtual server. We are going to first upgrade the
default available components to make sure that we have everything up-to-date.
Update the software sources list and upgrade the dated applications:
aptitudeupdateaptitudeyupgrade

Getting The Essential Build Tools


Let's continue with getting the essential package for application building the build-essential. This package contains tools necessary to install certain
things from source.
Run the following command to install buildessential package:
aptitudeinstallybuildessential

Getting The Modules And Dependencies


Next, we are going to get the module and dependencies.
Run the following command to install them:
aptitudeinstallylibapache2modproxyhtmllibxml2dev

Configuring Apache To Proxy Connections


Activating The Modules

Before configuring Apache, we are going to enable the necessary modules that
we will be using in this tutorial, or which might come in handy in the future.
First, let's verify that all modules are correctly installed and ready to be activated.
Run the following command to get a list of available Apache modules:
a2enmod#Youwillbepresentedwithanoutputsimilarto:#Your
choicesare:access_compatactionsaliasallowmethodsasis
auth_basicauth_digestauth_formauthn_anonauthn_coreauthn_dbd
authn_dbmauthn_fileauthn_socacheauthnz_ldapauthz_coreauthz_dbd
authz_dbmauthz_groupfileauthz_hostauthz_ownerauthz_user
autoindexbuffercachecache_diskcache_socachecgicgid
charset_litedatadavdav_fsdav_lockdbddeflatedialupdirdump_io
echoenvexpiresext_filterfile_cachefilterheadersheartbeat
heartmonitorincludeinfolbmethod_bybusynesslbmethod_byrequests
lbmethod_bytrafficlbmethod_heartbeatldaplog_debuglog_forensic
luamacromimemime_magicmpm_eventmpm_itkmpm_preforkmpm_worker
negotiationproxyproxy_ajpproxy_balancerproxy_connect
proxy_expressproxy_fcgiproxy_fdpassproxy_ftpproxy_html
proxy_httpproxy_scgiproxy_wstunnelratelimitreflectorremoteip
reqtimeoutrequestrewritesedsessionsession_cookiesession_crypto
session_dbdsetenvifslotmem_plainslotmem_shmsocache_dbm
socache_memcachesocache_shmcbspelingsslstatussubstitutesuexec
unique_iduserdirusertrackvhost_aliasxml2enc#Whichmodule(s)do
youwanttoenable(wildcardsok)?

Once you are prompted with the choice of modules you desire, you can pass the
below line listing the module names:
The list of modules:
proxyproxy_ajpproxy_httprewritedeflateheadersproxy_balancer
proxy_connectproxy_html

Or alternatively, you can run the following commands to enable the modules one
by one:
a2enmodproxya2enmodproxy_httpa2enmodproxy_ajpa2enmodrewrite
a2enmoddeflatea2enmodheadersa2enmodproxy_balancera2enmod
proxy_connecta2enmodproxy_html

Note: Some modules are likely to be enabled by default. Trying to enable them
twice will just ensure that they are active.

Modifying The Default Configuration


In this step, we are going to see how to modify the default configuration file 000
default.conf inside/etc/apache2/sitesenabled to set up "proxying"

functionality.
Run the following command to edit the default Apache virtual host using the nano
text editor:
nano/etc/apache2/sitesenabled/000default.conf

Here, we will be defining a proxy virtual host


using mod_virtualhost and mod_proxy together.
Copy-and-paste the below block of configuration, amending it to suit your needs:
<VirtualHost*:*>ProxyPreserveHostOn#Serverstoproxy
theconnection,or;#Listofapplicationservers:#Usage:
#ProxyPass/http://[IPAddr.]:[port]/#ProxyPassReverse/
http://[IPAddr.]:[port]/#Example:ProxyPass/
http://0.0.0.0:8080/ProxyPassReverse/http://0.0.0.0:8080/
ServerNamelocalhost</VirtualHost>

Press CTRL+X and confirm with Y to save and exit.


Note: To learn more about virtual host configurations, you can check out the
detailed Apache manual on the subject by clicking here.

Enabling Load-Balancing
If you have multiple back-end servers, a good way to distribute the connection
when proxying them is to use Apache's load balancing features.
Start editing the virtual-host settings like the previous step, but this time using the
below configuration example:
<Proxybalancer://mycluster>#Definebackendservers:#
Server1BalancerMemberhttp://0.0.0.0:8080/#Server2
BalancerMemberhttp://0.0.0.0:8081/</Proxy><VirtualHost*:*>

#ApplyVHsettingsasdesired#However,configureProxyPass
argumentto#use"mycluster"tobalancetheloadProxyPass
/balancer://mycluster</VirtualHost>

Enabling SSL Reverse-Proxy Support


If you are dealing with SSL connections and certificates, you will also need to
enable a secondary virtual host with below settings.
Repeat the steps from the previous steps but using these configuration options:
Listen443NameVirtualHost*:443<VirtualHost*:443>SSLEngine
On#SetthepathtoSSLcertificate#Usage:
SSLCertificateFile/path/to/cert.pemSSLCertificateFile
/etc/apache2/ssl/file.pem#Serverstoproxytheconnection,
or;#Listofapplicationservers:#Usage:#
ProxyPass/http://[IPAddr.]:[port]/#ProxyPassReverse/
http://[IPAddr.]:[port]/#Example:ProxyPass/
http://0.0.0.0:8080/ProxyPassReverse/http://0.0.0.0:8080/
#Or,balancetheload:#ProxyPass/
balancer://balancer_cluster_name</VirtualHost>

Restarting Apache
Once you are happy with your configuration, you will need to restart the cloud
server for the changes to go into effect.
Execute the following command to restart Apache:
serviceapache2restart

And that's it!


You can now visit your VPS and Apache shall reverse-proxy connections to your
back-end application servers.

You might also like