The name I gave my
solution to a
networking/
software development problem.
Imagine that there are three
servers on a
network, server A with
Apache, server B with an
Application Server (processes
Java-related
requests), and server C with a different
HTTP server that is not compatible with the Applications Server and must be used to handle processing of specific types of files.
In most cases, my standard answer would be to give them both separate
IP addresses or to use a
router and direct packets to the correct server for the request. The
latter requires both servers to be on separate
port numbers and have both run completely independently of each other.
There are
issues, however, with this solution. Since the
development was done in two very different
technologies, both must appear to come from the same source (due to
cookies) and appear to
integrate seamlessly.
Average browsers would accept the IP address as enough proof that both servers could access the same cookies.
Netscape was not as forgiving as
Microsoft, in their
latest release; it believes that each port is a different server (which it is).
The remedy is
simple and fairly
straightforward. It also allows for easy and more accurate
security monitoring and
maintenance (
a single point of entry).
A
reverse proxy.
A
proxy in a networking sense, allows
computers (clients) within a
local network to access an outside network, the server on the outside network receives and responds to a request from the proxy server and returns it to the computer on the internal network that requested the
data. The server does not know the IP of the actual
recipient, but only knows the IP of the proxy.
The reverse proxy does the
opposite. For an incoming request to server A, if it is
intended for the local web server, it is handled locally. If it needs to be handled by server C, server A connects to server C, passes the request, waits for a response, and transmits the response to the
client. The
header must be
hacked off the
response and the
appropriate header for server A is sent to the
client. Requests for server B are still handled the same way as before the implementation of the reverse proxy.
Now, to the client, server B, and server C, all believe that they are only communicating with server A.
This is different from
load balancing, where communication is
distributed between
multiple servers to handle a greater number of requests than the single server could alone.