I have to define about 100 subdomain virtualhost entries in server config file . I want to know if there is any way to do it with regular expression to increase codes in apache config file?
2 Answers
You should have a look at this how to from the Apache documentation, I think that's what you need here:
http://httpd.apache.org/docs/2.2/vhosts/mass.html
The basic idea is to replace all of the static configuration with a mechanism that works it out dynamically. This has a number of advantages:
Your configuration file is smaller so Apache starts faster and uses less memory.
Adding virtual hosts is simply a matter of creating the appropriate directories in the filesystem and entries in the DNS - you don't need to reconfigure or restart Apache.
update:
Using Mass Virtual Hosting forbids the use of different log files:
The main disadvantage is that you cannot have a different log file for each virtual host; however if you have very many virtual hosts then doing this is dubious anyway because it eats file descriptors. It is better to log to a pipe or a fifo and arrange for the process at the other end to distribute the logs to the customers (it can also accumulate statistics, etc.).
However this is not really a problem because you can use the %v filter for CustomLog which places the ServerName in front of each logged request, you can then filter and split logs if necessary based on this.
A good practice is to put those logs in a mysql database (on the fly or through a cronjob, pipe or a fifo file) because SQL is a great tool to extract meaningful informations from them.
Have a look on this article which describes settign up (direct) database logging through mod_log_mysql:
http://onlamp.com/pub/a/apache/2005/02/10/database_logs.html
Storing your logs directly in a database mysql can be a good solution through the ARCHIVE storage engine but it has its own limitations (lock table on write). An alternative would be building you system on a more standard storage engine (innodb, xtradb for example), if you already have a mysql server I'd try that before other solutions as it doesn't require much learning.
If you feel a little more adventurous you can have a look at MongoDB, as a document oriented database it is particularly fit as a log storage system (fast, powerful filter capabilities, speed of insertion/read) but be sure to have a good dedicated server for it as you'll need RAM for it to behave adequately.
You'll find details on MongoDB logging here:
- A short article on the benefits from the point of view of the MongoDB team: http://blog.mongodb.org/post/172254834/mongodb-is-fantastic-for-logging
- A very interesting slideshow on different solutions to write logs directly to mongodb (java, python, ruby and php, zend framework, C# .NET tools available):
http://www.slideshare.net/WombatNation/logging-app-behavior-to-mongo-db - The sysadmin wiki on the MongoDB website:
http://www.mongodb.org/display/DOCS/Admin+Zone
-
But it is said in the documentation that it doesn't support different log file for each virtualhost . but i need this feature .– hd01Dec 6, 2011 at 8:51
-
Then I can say you've got a problem :) Anyway you can always put those logs in a database, sorting them by vhost using the "%v" filter for you CustomLogs. You can even transfer those logs with a script if you don't want apache logging directly to your mysql database. I'll add some links about that in my answer above.– ShadokDec 6, 2011 at 10:03
-
Since apache allows you to send logs anywhere you want (using a pipe), this is not a real problem. Simply pipe the log into a processor that splits up the vhosts to different files; if you prepend the logs with %v, or even {HTTP_HOST}i, this is easy to do with awk(1). However, much will depend on volume - if this is a million-hits-per-day host, a mysql database may fulfill your needs, at considerable performance cost, but if it hits 1 million per hour, storing logs in a database is counter-productive.– adaptrDec 6, 2011 at 10:57
No, but what are you trying to do? Having a regex in the <VirtualHost>
line would make no sense.
ServerAlias
can have wildcards, not regex; this might give you what you need?