Apache Macro VHost
Thanks to the revelator Ronan Guilloux Exemples and links Another example
Install
sudo apt-get install libapache2-mod-macro sudo a2enmod macro sudo service apache2 restart
A thing you need to remember when making macros, is that the file defining your macros needs to be included in Apache’s configuration files somewhere, or else you will not be able to use them. I would suggest you to make a file called macro.conf
inside the folder /etc/apache2/conf.d/
, since all files in that folder automatically get included by Apache.
So copy & paste this below inside a new /etc/apache2/conf.d/macro.conf
file:
<Macro VHost $apacheversion $path $prepend $host $port> <VirtualHost *:$port> Servername $host ServerAlias $host.loc DocumentRoot $path/$host/web # dir definitions, old or new <Directory $path/$host/web> Use $apacheversion </Directory> SetEnvIf Request_URI "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|txt|cur)$" dontlog SetEnvIf Request_URI "^_" dontlog SetEnvIf Request_URI "^/_" dontlog # Logs LogFormat "%V %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{cookie}i\" test" combined_cookie_vhost CustomLog ${APACHE_LOG_DIR}/access.$prepend_$host.com.log combined_cookie_vhost env=!dontlog ErrorLog ${APACHE_LOG_DIR}/error.$prepend_$host.log Use LogLevel $level <IfModule mod_expires.c> ExpiresActive on ExpiresByType text/css "access plus 0 seconds" ExpiresByType application/javascript "access plus 0 seconds" </IfModule> <IfModule mod_headers.c> Header set X-UA-Compatible: "IE=edge,chrome=1" </IfModule> </VirtualHost> </Macro> # Apache version 2.2 <Macro old> Options FollowSymLinks # enable the .htaccess rewrites AllowOverride All # permissions Order allow,deny Allow from All </Macro> # Apache version 2.4 <Macro new> Options FollowSymLinks # enable the .htaccess rewrites AllowOverride All # permissions Require all granted </Macro> <Macro LogLevel $level> # Possible values include: trace[8-1], debug, info, notice, warn, error, crit, alert, emerg. LogLevel $level </Macro>
Usage:
echo "Use VHost old warn" > /etc/apache2/sites-available/myMacroBasedNewVHostName.conf sudo a2ensite myMacroBasedNewVHostName.conf sudo service apache2 reload
Here’s the options
Variables | Use |
---|---|
$apacheversion | old (apache 2.2) |
$path | the path to host |
$prepend | add a prefix to logs name. ex. error.toolyoursite.log, error.v4yoursite.log |
$host | the host name |
$port | 80, 8080, … |
Apache uprade to 2.4
According to the new configuration file, the the enabled virtual host config files need to be under sites-enabled directory and these files mush have .conf
extension. The simplest way is deleting all virtual host config files under sites-enabled, rename the existing config files under sites-available with extension .conf and re-enable with a2ensite
command.
All of the access control directives from the virtual host config and .htaccess
files are needed to change to newer directives.
Apache 2.2.* Order deny,allow Deny from all Apache 2.4.* Require all denied Apache 2.2.* Order allow,deny Allow from all Apache 2.4.* Require all granted Apache 2.2.* Order Deny,Allow Deny from all Allow from example.org Apache 2.4.* Require host example.org
Apache Logs
Logs path
To find exact apache log file location, you can use grep
command:
/usr/sbin/apachectl -V and grep ErrorLog /etc/apache2/apache2.conf
Log level
sudo vim /etc/apache2/apache2.conf
# LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, alert, emerg. LogLevel notice
debug < info < notice < warn < error < crit < alert < emerg.
LogLevel | Expect |
---|---|
Trace[1-8] | Tracing information of various levels of verbosity that produces a large amount of information |
Debug | Information that is diagnostically helpful to people more than just developers (IT, sysadmins, etc) |
Info | Generally useful information to log (service start/stop, configuration assumptions, etc). Info I want to always have available but usually dont care about under normal circumstances. This is my out-of-the-box config level |
Notice | Something normal, but worth noting has happened |
Warn | Anything that can potentially cause application oddities, but for which I am automatically recoverring (such as switching from a primary to backup server, retrying an operation, missing secondary data, etc) |
Error | Any error which is fatal to the operation but not the service or application (cant open a required file, missing data, etc). These errors will force user (administrator, or direct user) intervention. |
Crit | Any error that is forcing a shutdown of the service or application to prevent data loss (or further data loss). |
Alert | Severe situation where action is needed promptly |
Emerg | Emergency situations where the system is in an unusable state. |