How to setup a reverse proxy

By | May 9, 2015

How to setup a reverse proxy

We are going to setup a reverse proxy today. Definition of reverse proxy as per Wiki is “In computer networks, a reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client as though they originated from the proxy server itself.”

The idea is explained below with an example scenario, It primarily considers a dev box for illustration purpose only. In real world we will have Web and App servers where Web server will hide presence of information served by one or more app servers.

Example scenario

Consider a website hosted on an Apache Server (Web server in this illustration). The web service(s) are hosted on a different server (App Server). I have added some details of both servers to illustrate settings and the actual url responses received by client of website.

Illustration Environment

Web Server: MAMP – Apache/2.2.26 (Unix) mod_fastcgi/2.4.6 mod_wsgi/3.4 Python/2.7.6 PHP/5.5.14 mod_ssl/2.2.26 OpenSSL/0.9.8y DAV/2 mod_perl/2.0.8 Perl/v5.18.2)
URL: http://localhost:8888
Application Folder Path: Project/UI
App Server: Tomcat 7 (Apache-Coyote/1.1)
URL: http://localhost:8080/service
Application Folder Path: Project/service

You will notice that i am using two different ports to host a Website and Web service in this example. Website is hosted using MAMP while the web service is on Tomcat 7.

Reverse Proxy Configuration

Add below given lines in Httpd.conf (Apache), These settings are to make a reverse proxy in Apache server running on mac using MAMP.

Reverse Proxy changes Apache

ProxyRequests Off
ProxyPreserveHost on
ProxyPass /api/ http://localhost:8080/service/
ProxyPassReverseCookiePath / /api/
ProxyPassReverseCookieDomain / localhost:8080/service
<Location "/api/">
   ProxyPassReverse /
</Location>

As mentioned earlier the above changes are in Apache configuration on web server. The third line in this configuration listens for all incoming requests on web server with a /api/. If a request contains /api/ it is redirected to localhost:8080/service for execution. This url in example is depicting a web service.