1

So here is the situation: I purchased a domain with GoDaddy (Jbc.ca) GoDaddy forwards to my no-ip domain currently as I have a dynamic IP address (however it does not change that frequently- so I could in theory have it forward directly to my IP address).

Now here is where it gets a little more complicated. I run a web server (Apache) on port 80 which is displayed when you visit (jbc.ca) I also have several other services that run on the same system: Plex- port 32400; Tautulli on port 7777; Ombi on port 5000; Lidarr on port 8686, Remotely Anywhere PC Access on 7000 and a separate Web Server (Microsoft IIS on port 9024).

Currently to access any of these services other than port 80 I have to do as follows: "http://Jbc.ca:Port#" ; so for example to access Ombi I have to type in http://jbc.ca:5000.

What I would like is to have my domain with subdomains for each port- so for example ombi.jbc.ca would in theory load port 5000 on the server, but would display ombi.plex.ca instead of redirecting and exposing the port number. Ra.jbc.ca would load port 7000 and so on...

I have read that this can be done with reverse proxy via apache or nginx (as I am running mamp pro for my main server) as well as IIS, however I have no clue how to accomplish this as to what needs to be changed/added on the server, which server would be best to accomplish this as well as what I'd have to modify on my GoDaddy domain.

Hopefully someone can help as I am totally stumped at this point.

Thanks in advance.

3
  • No offense, but you have a way to go before you are up-to-speed (but you are on the right track). First up might be understanding DNS. DNS does not forward anything - it provides lookups - a distributed database relating to domains. You should brush up on A records and CNAMES to undrstand how godaddy and no-ip play. (you will then understand that godaddy is almost irrelevant here and no-ip simply allows DNS to resolve an domain to an IP, and ports are not part of this, nor is there any forwarding going on)
    – davidgo
    Jun 11, 2019 at 11:35
  • The next thing is to set up all the subdomains in DNS (or just wildcard the domain, using a cname, but there are gotchas with CNAMES). At this point hopefully all subdomains go to the same IP.
    – davidgo
    Jun 11, 2019 at 11:39
  • At this point you set up something to answer the request, pick up the domain name and make a request to a new resource on a port. This is the reverse proxy. There are many to choose from. I use Apache +mod-proxy. Step 1 is to set up virtualhists for each subdomain so the requests are handled differently. Step 2 is to enable mod-proxy and step 3 is to set up an appropriate pair of proxypass and proxypassreverse lines for each virtualhost.
    – davidgo
    Jun 11, 2019 at 11:44

1 Answer 1

2

This is essentially a two part process. You need to create the sub-domains themselves in DNS (e.g. with GoDaddy) and then create the Apache virtual host entries that do the actual proxying.

DNS

Assuming that you wish these to be publicly available (i.e. outside your local network), you need to create all the relevant sub-domains with GoDaddy through their interface. So you would need to create:

ex. GoDaddy Sub-domains

  • plex.jbc.ca
  • tautulli.jbc.ca
  • ombi.jbc.ca
  • lidarr.jbc.ca
  • ra.jbc.ca
  • iis.jbc.ca

These are just examples, of course. The actual sub-domains can follow any naming scheme you like. However, ombi.plex.ca (which may have been a misprint?) wouldn't be possible in this instance unless you owned the plex.ca domain (ombi.plex.jbc.ca should be fine, though).

The only possible downside to this is that you will likely need to use A Records with your actual IP for each sub-domain (setting them up similarly to your primary jab.ca domain probably won't work).

Apache Virtual Hosts

The actual reverse proxy management is handled by Apache under a virtual host for each sub-domain.

As an example, a bare minimum virtual host for Plex might look like the following:

ex. Apache Virtual Host

<VirtualHost *:80>

    ServerName plex.jbc.ca
    # ServerAlias Unneeded.for.this.example
    # DocumentRoot "C:/Unneeded/for/this/example"

    # Redirect basic requests to our Plex service.
    # This should work for logging in.

    ProxyPass / http://10.0.0.1:32400/
    ProxyPassReverse / http://10.0.0.1:32400/

    # Plex redirects us after logging in, so we need an
    # additional set of entries to handle the main Plex
    # interface.

    ProxyPass /web http://10.0.0.1:32400/web
    ProxyPassReverse /web http://10.0.0.1:32400/web

</VirtualHost>

In the example above, 10.0.0.1 should be replaced with the local IP of the server hosting the service.

It's worth mentioning that mod_proxy needs to be enabled (uncommented) in httpd.conf for ProxyPass and ProxyPassReverse to work correctly. There are other proxy modules that rely on mod_proxy as well and I would suggest enabling mod_proxy_html and mod_proxy_http at minimum:

ex. httpd.conf (Partial)

<...>
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<...>
2
  • Thanks Anaksunaman. That has actually helped me accomplish everything that I was looking to accomplish. I Added subdomains as A records in godaddy pointing to my IP address, and then added everything into the Virtual hosts file for apache. I can now access each service via a subdomain and everything seems to function as it should. Thanks so much for the insight on how to accomplish this without too much trouble! Jun 16, 2019 at 3:30
  • No problem. Glad to hear everything is apparently working well for you. =) Jun 16, 2019 at 3:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .