Apache Virtual Host Definition File (VHDF)
Sjabloon
Een aantal veelvoorkomende instellingen. Let op: Dit is een combinatie van Drupal- & MediaWiki-bestanden.
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DirectoryIndex index.php index.html index.htm DocumentRoot /var/www/example.com # Gebruik altijd /var/www/domeinnaam <Directory /var/www/example.com> AllowOverride All # .htaccess mag alle directives overriden Require all granted # Alle IP-adressen ter wereld kunnen example.com bezoeken # Enable Drupal CleanURLs ########################## # RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory> # Upload-directory beveiligen ############################# # Voorbeeld afkomstig van https://www.mediawiki.org/wiki/Manual:Security#Upload_security # maar waarschijnlijk universeel toepasbaar <Directory /var/www/example.com/public> # Dit is de MediaWiki upload-map # Ignore .htaccess files AllowOverride None # Serve HTML as plaintext, don't execute SHTML AddType text/plain .html .htm .shtml .php .phtml .php5 # Don't run arbitrary PHP code. php_admin_flag engine off # If you've other scripting languages, disable them too. </Directory> LogLevel warn ErrorLog /var/log/apache2/error.log # Eén error-log-bestand voor alle domeinen CustomLog /var/log/apache2/access.log vhost_combined # Eén access-log-bestand voor alle domeinen, type 'vhost_combined' </VirtualHost>
Geen aparte log-files
Tot voort kort gebruikte ik dit soort virtuele host-definities:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DirectoryIndex index.php index.html index.htm DocumentRoot /var/www/example.com/public <Directory /var/www/example.com/public> AllowOverride All Require all granted RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory> LogLevel warn ErrorLog /var/www/example.com/log/error.log CustomLog /var/www/example.com/log/access.log combines </VirtualHost>
Hier kleven een paar nadelen aan:
- Voor elk domein worden twee aparte logfiles bijgehouden. Daar ga ik nooit iets mee doen, want veel te veel werk. Daarnaast hoeven log files niet gescheiden te zijn, want ik ben de enige met toegang tot deze server
- Elk domein heeft een structuur met drie mappen (public, log, backup) en ook dat is onnodig.
Merk verder op dat combines refereert naar het combines log format dat gedefineerd is in apache2.conf. Dit zijn de definities van logformaten (apache2.conf):
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent
Als je de logbestanden van meerdere virtuele hosts combineerd, is het handig om het vhost_combined-formaat te gebruiken, want de parameter %v geeft de virtuele host aan, en da's handig met filteren. Locatie van gecombineerde virtuele hostbestanden: /var/log/apache2/access.log en /var/log/apache2/error.log.
Bovenstaand virtueel hostbestand wordt daardoor onherstelbaar verbeterd tot:
<VirtualHost *:80> ServerName example.com ServerAlias www.example.com DirectoryIndex index.php index.html index.htm DocumentRoot /var/www/example.com <Directory /var/www/example.com> AllowOverride All Require all granted RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory> LogLevel warn ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log vhost_combined </VirtualHost>
One host to rule 'm all - Achterhaald
Op m'n ontwikkelomgeving (= m'n laptop) gebruikte ik voor kort maar één host:
<VirtualHost *:80> ServerName localhost ServerAlias www.localhost DirectoryIndex index.php index.html DocumentRoot /var/www <Directory /var/www> AllowOverride All Require all granted RewriteEngine on RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?q=$1 [L,QSA] </Directory> LogLevel warn ErrorLog /var/log/apache2/error.log CustomLog /var/log/apache2/access.log vhost_combined </VirtualHost>
Hier ben ik onlangs van afgestapt: Hoe meer de configuratie op m'n laptop lijkt op die van de uiteindelijke productieomgeving, hoe beter.
Zie ook
Bronnen
- http://www.informit.com/articles/article.aspx?p=485645&seqNum=18
- https://httpd.apache.org/docs/2.2/mod/core.html#allowoverride - AllowOverride
Require all granted