Search code examples
node.jsapachereverse-proxypm2opentest

How to execute OpenTest thru Apache reverse proxy along with other applications


First some context

  • We have an Ubuntu Server 18.04 LTS server running on Azure
  • Our company security policies only allows for ports 80 and 443 to be accessed thru HTTP/HTTPS
  • Any applications such as Jenkins or NodeJS ones running on other ports should use a reverse proxy thru Apache
  • The same server already has Jenkins running on port 8080 and Jenkins itself can be configured to run using what they call a "--path" parameter which makes it accessible thru URL http://localhost:8080/jenkins, hence reverse proxy is pretty straight forward to configure as anything going to "/jenkins" can just be pass to http://localhost:8080/jenkins, current Apache config (which is working for Jenkins) as follows:
        # Jenkins
        ProxyPass         /jenkins  http://localhost:8080/jenkins nocanon
        ProxyPassReverse  /jenkins  http://localhost:8080/jenkins
        ProxyRequests     Off
        AllowEncodedSlashes NoDecode
        <Proxy http://localhost:8080/jenkins*>
           Order deny,allow
           Allow from all
        </Proxy>

The problem we are facing

So, for running OpenTest, we have to install it as a npm package which can then be executed by running opentest server command, it will start the application on port 3000 by default http://localhost:3000 but it is possible to change the preferred port as well thru configuration https://getopentest.org/reference/configuration.html#server-configuration

The problem is that we need to re-route anything, let's say going to "/opentest" to the opentest server app but that doesn't work for all static assets, api urls, etc... since the app is just running on port 3000 http://localhost:3000 but doesn't seems to have something like the Jenkins' "--path", so we can't just mimic the same reverse proxy we have for Jenkins; the idea would be to have opentest in path "/opentest", something like http://localhost:3000/opentest.

We were not able to find any OpenTest configuration that allows me to do something like http://localhost:3000/opentest and we are new to pm2 so we can't tell if it is possible to use pm2 to to run the OpenTest application in a "path" or some sort of "local known application domain" which we could use to re-route the reverse proxy to.

Any thoughts, ideas, workarounds or solutions are welcome; we might be taking the wrong approach here so we would also appreciate any insights in that regard.

Thanks!


Solution

  • Starting with version 1.2.0, you can use the urlPrefix configuration parameter in server.yaml to accomplish this:

    #...
    
    urlPrefix: /opentest