I would like to be able to create and remove subdomain name dynamically using scripting languages such as PHP, Python, Perl or others. I am using Apache as a web server
Server Fault is a question and answer site for system and network administrators. It only takes a minute to sign up.Sign up to join this community
You can make a CNAME entry/ A Record in your DNS settings, for each subdomain
A CNAME record is a record in your Domain Management Settings that allows you to control a subdomain of your domain.
To automate it along with registration, you can write a script which is executed for each user, when s/he registers.
You can refer to this link, as well, for a step-by-step process for Apache:
You can also refer to an easier wildcard solution, given by Alnitak.
You can either use a specific DNS (
AAAA) entry for each known subdomain, or a wild-card DNS entry that'll accept *.example.com:
$ORIGIN example.com foo IN A 126.96.36.199 bar IN A 188.8.131.52
$ORIGIN example.com * IN A 184.108.40.206
The advantage of this latter is that no changes are required to either DNS or Apache configuration once the service is running. The disadvantage is that all such wildcard lookups must (by definition) end up returning the same IP address.
The Apache configuration will depend on your requirements, both for end-user control and security. Note that if the users have permission to run CGI scripts on the server then additional setup will be needed to ensure that that's done securely.
Depending on whether content is static or dynamic this will also affect your configuration:
mod_vhost_aliasto map individual virtual hosts into their individual directories on the server.
If you really want, create a separate
<VirtualHost>section for each known site, but then you'll have to restart Apache each time a new user signs up
Use a single
<VirtualHost>and then look at the hostname part of the requested URL (from the
$SERVER_NAMEenvironment variable) in the scripts that render the output to figure out which user's content to display.
The creation of subdomains is built into Apache, look into mass vhosting. Specifically: http://httpd.apache.org/docs/2.0/vhosts/mass.html
All you'll need to do then is come up with a convention, and then have your script create directories when needed. But, technically you want to start with the apache mass vhost configuration setup.
Don't actually create the subdomains, but instead just use a wildcard subdomain so you can have http://anything.example.com.
Another solution I've used in a python website is to inspect the subdomain in a middleware. Then I check that against the database of subdomains and if I find a match I set a request level setting telling the code what subdomain I'm looking at.
It's really fairly clean and can work very well. My site currently supports form than 350 dynamic subdomains.