How to forward a subdomain to a new port on the same IP address using Apache?

Brett McLain picture Brett McLain · Oct 3, 2012 · Viewed 21.8k times · Source

I have a NAS/Server running at home 24/7 and run many different services on it. I have got a domain name pointing to it now, and was wondering if it would be possible to create sub-domains that point to different ports for different services. For example:

I have a single D-LINK router that currently port forwards all these ports to my NAS/Server whose IP is 192.168.0.104.

EDIT: The server is running Ubuntu 12.04.

What service or proxy do I need to run that can recognize the sub domain and route the traffic accordingly? Or could I use apache virtual hosts to handle this, because these subdomains will come in on port 80, which apache is listening to? Or does virtual hosts not work like this?

Any information, ideas, or tips would be helpful/useful.

Answer

Peter Oram picture Peter Oram · Oct 4, 2012

There are two ways to do this. You could use the VirtualHost section of your httpd.conf or you could do it in your .htaccess. (assuming that the subdomains resolve to the same IP as your webserver)

In httpd.conf:

<VirtualHost *:80>
    ServerName subsonic.mydomain.com
    redirect / http://mydomain.com:4040/
</VirtualHost>

In .htaccess:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^subsonic\.mydomain\.com$ [NC]
RewriteRule ^(.*)$ http://mydomain.com:4040/$1 [R=301]

Documentation:
- Guide to creating name-based virtual hosts
- Core, including VirtualHost and NameVirtualHost
- Redirect
- mod_rewrite guide