If you have only one public IP address, you can only forward any given port to one internal host. However, some services can be proxied or forwarded at the application level, and as it happens, web traffic is one such service.
It works like this: One web server receives requests from external clients and, upon seeing requests for a specific site or directory, forwards that request to another, internal web server. The request is modified to match the domain and directory name of the internal server, and the response from that server is also modified before it is relayed to the client.
There are several web servers and dedicated proxy software that can handle this scenario, but since you're already using Apache, it would make sense to use the Apache module called
mod_proxy to do this. According to the Apache documentation, you'll need to do something like this:
Code:
<VirtualHost *:80>
ServerName mail.websiteaddress.com
ProxyRequests off
DocumentRoot /some/directory
ProxyPreserveHost On
<Location />
ProxyPass http://webmail.internal-server.local/
ProxyPassReverse http://webmail.internal-server.local/
Order allow,deny
Allow from all
</Location>
</VirtualHost>
The web server must be able to resolve "webmail.internal-server.local" to the local (internal) IP address of the mail server for this to work.
(I actually just tried forwarding a subdirectory on a public web server running Apache to an internal web site, and it worked.)