If you're one of the many users of Apache HTTP Server you should be aware of a functionality called Virtual Hosts. Virtual hosts let you run multiple web sites on a single Apache HTTP server instance and requests will be forwarded to the appropriate web site by using either the target IP address or the name you used to connect to the site. The last step will be configuring Apache so that such a Virtual Host will be served by proxying the destination server.
With such a proxy/gateway you'll be able, for example:
# svcs \*apache\*With such a proxy/gateway you'll be able, for example:
- To serve different domains, subdomains or even specific URLs with just one Apache HTTP Server instance.
- To offer a gateway in the case you've got a reduced number of public IPs and you don't want to publish HTTP services on ports other than 80.
DNS configuration
First of all I substituted the old DNS record with a CNAME which points to this Apache HTTP Server instance. Now, whenever a client requests www.domainA.com, the connection will be established with the target Apache.Apache HTTP Server Startup
On (Open)Solaris, check if you've got an Apache HTTP Server instance running:STATE STIME FMRI
legacy_run Mar_13 lrc:/etc/rc3_d/S50apache
disabled Mar_13 svc:/network/http:apache2
If it isn't running, create a suitable configuration file in /etc/apache2:
# cp httpd.conf-example httpd.conf
Once the configuration file is created, the service should start normally:
# svcadm enable svc:/network/http:apache2
# svcs http:apache2
STATE STIME FMRI
online Nov_15 svc:/network/http:apache2
Apache HTTP Server Configuration
The last thing to do is creating virtual hosts:NameVirtualHost *
<VirtualHost *>
ServerName domainA.com
DocumentRoot /var/apache2/htdocs
</VirtualHost>
<VirtualHost *>
ServerName subdomain.domainA.es
ProxyPreserveHost On
ProxyPass / http://localhost:8083/
ProxyPassReverse / http://localhost:8083/
</VirtualHost>
In the previous fragment you can notice the following:
- the NameVirtualHost directive lets you configure Apache to listen on a specific address and port. In this case, any IP address and any port (*) have been configured.
- The VirtualHost sections let you define virtual hosts. Please note that the NameVirtualHost value and the VirtualHost value must be the same (in this case, *).
- The ServerName directive is used to assign the domain name a virtual host should serve.
- ProxyPreserveHost is used to tell Apache not to override the Host HTTP header when connecting to the proxied host.
- ProxyPass and ProxyPassReverse lets you map proxied URL spaces. In this case, everything (/) is sent to the proxied host (http://localhost:8083/).
Further Readings
If you want to go into deeper detail, please read the following:
- mod_proxy documentation
- Apache Virtual Hosts documentation
Very cool idea! Thanks for posting about Virtual Hosting Really it is very helpful.
ReplyDeleteAwesome job !!! keep it up.
Thanks a lot Alan, glad to help. ;)
ReplyDelete