We are working on a networked service, where all the functionality of our software is exposed via an in-house web-server. The company's clients connect to it via a browser, does their tasks, log out, work is done.
But this in house web server is a pretty straightforward software, or how to say, it's not so configurable, not very flexible, will do its own thing, which is serving the needs of the customer and it's more or less done. Or understand it better: does not support load balancing, or SSL, or anything that would be required by a trustable web service.
So, the big decision came around, we need to "hide" this in-house component in a local network, and put an industrial strength web server facing the internet to be able to access our service (which somehow would talk to the in-house server). And since the calculations done by this in-house component are pretty time consuming, we would like to have at least two (as per December, 2015) of them running in the local network, totally invisible to the outside network, and somehow divide the work between them.
Now, comes the problem. All of us are more or less database or algorithm programmers, we know almost nothing about how to set up (properly) a web server (no, we don't have budget to hire anyone doing it, but we are willing to learn the required steps), now how to make the "wires of the networking" part.
Here comes the "requirements": The platform for the industrial strength web server will be Linux (we were thinking of using apacher, however please suggest anything you would consider important here, knowing the requirements), the in house components also runs also on Linux.
There will be 3 computers (for now). One facing the internet, with a public IP, will host the web-server. We plan to install SSL, and obtain a certificate , to have an https interface to it (is this correct at least?).
The server on this computer will need to talk to the two other computers, hosting the two in-house web servers (if I recall correctly this is called forwarding), and preferably pick the one which is not being busy working on a clients' request (this if I'm right is load balancing).
A little bit of technological information:
The requests that the in-house computers work with are formed like:
The GET
requests come in like:
https://somecompanysoftware.com/SOME_LONG_REQUEST_STRING_WITH_SOME_DATA_IN_IT
and there is the corresponding web page rendered (from the data in the URL), but also there are POST
requests, like:
https://somecompanysoftware.com/SOME_LONG_REQUEST_STRING_WITH_SOME_OTHER_DATA_IN_IT
and there is POST
data in the request (for example, client uploading a picture, etc ...)
and certainly the web page corresponding to the URL data is rendered.
It is really important that the internet facing web server (apache) should connect to the local web servers with the corresponding URL, and also pass in the required POST data for later usage.
I also have read that the apacahe web server has the possibility of enabling the user to create modules, so we were thinking to create a module which upon a a request from the internet will create a "local" request to one of the in-house web servers, send in the data, and wait for the answer which then will be sent back to the browser.
The question: I am just wondering, whether there is a way of making this more easier (than writing a new apache module) or if this is the only way to go.