Apache Virtual Host Definition File (VHDF)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

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

Require all granted