Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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

Example:

http://subdomain.example.com
http://subdomain2.example.com

thanks

share|improve this question

5 Answers 5

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:

How to setup subdomains in apache

Alternate Solution

You can also refer to an easier wildcard solution, given by Alnitak.

You can either use a specific DNS (CNAME or A/AAAA) entry for each known subdomain, or a wild-card DNS entry that'll accept *.example.com:

$ORIGIN example.com
foo     IN A 12.34.6.78
bar     IN A 12.34.6.78

or

$ORIGIN example.com
*       IN A 12.34.6.78

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:

  1. Use mod_vhost_alias to map individual virtual hosts into their individual directories on the server.

  2. 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

  3. Use a single <VirtualHost> and then look at the hostname part of the requested URL (from the $SERVER_NAME environment variable) in the scripts that render the output to figure out which user's content to display.

share|improve this answer

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.

share|improve this answer
1  
The need for an A record for *.example.com is also worth pointing out. –  Cian Sep 8 '09 at 8:16

This is actually a DNS question, not an Apache one unless you have a *.example.com record pointing to said webserver. If the client can't resolve subdomain??.example.com, the webserver is irrelevant.

share|improve this answer

Don't actually create the subdomains, but instead just use a wildcard subdomain so you can have http://anything.example.com.

share|improve this answer

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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.