Examples below are from a working Debian 8 + Apache 2.4 + MySQL 5.6 + PHP 5.6 + Varnish web server at Google Cloud Platform – Compute Engine.
I use port 8080 to work with varnish set up on port 80. If you don’t use varnish – change ports in config to :80 instead of :8080.
Example default virtual host config
/your-installation-folder/sites-available/default.conf
NameVirtualHost *:8080 <VirtualHost *:8080> DocumentRoot /var/www <Directory "/var/www"> allow from all Options None </Directory> </VirtualHost>
Example php website virtual host config
/your-installation-folder/sites-available/php-website.conf
<VirtualHost *:8080>
DocumentRoot /var/www/php-website/
ServerName php-website.org
ServerAlias www.php-website.org
<Directory "/var/www/php-website/">
allow from all
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
</Directory>
</VirtualHost>
Example wordpress website virtual host config
/your-installation-folder/sites-available/wordpress.conf
<VirtualHost *:8080>
DocumentRoot /var/www/wordpress.org
ServerName wordpress.org
ServerAlias www.wordpress.org
<Directory "/var/www/wordpress.org">
allow from all
Options +FollowSymLinks
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
</Directory>
</VirtualHost>
Example multidomain wordpress website virtual host config
/your-installation-folder/sites-available/multidomain.conf
<VirtualHost *:8080>
DocumentRoot /var/www/domain1.org
ServerName domain1.org
ServerAlias *.domain1.org domain2.org *.domain2.org
<Directory "/var/www/domain1.org">
allow from all
Options +FollowSymLinks
#allow cross-origin access from domain2 to files with domain1 links
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
Header add Access-Control-Allow-Origin "http://domain2.org"
</FilesMatch>
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
</Directory>
</VirtualHost>
Example multisite wordpress virtual host config
/your-installation-folder/sites-available/multisite.conf
<VirtualHost *:8080>
DocumentRoot /var/www/domain1.org
ServerName domain1.org
ServerAlias *.domain1.org domain2.org *.domain2.org
<Directory "/var/www/domain1.org">
allow from all
Options +FollowSymLinks
#You should use this ifmodule on multisite only
#If your websites share one theme and all it's settings. Otherwise remove it.
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
Header add Access-Control-Allow-Origin "http://domain1.org"
Header add Access-Control-Allow-Origin "http://domain2.org"
</FilesMatch>
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
</IfModule>
# END WordPress
</Directory>
</VirtualHost>
Example joomla virtual host config
/your-installation-folder/sites-available/joomla.conf
<VirtualHost *:8080>
DocumentRoot /var/www/joomla.org
ServerName joomla.org
ServerAlias www.joomla.org
<Directory "/var/www/joomla.org">
allow from all
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{QUERY_STRING} base64_encode[^(]*\([^)]*\) [OR]
RewriteCond %{QUERY_STRING} (<|%3C)([^s]*s)+cript.*(>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F]
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_URI} !^/index\.php
RewriteCond %{REQUEST_URI} /component/|(/[^.]*|\.(php|html?|feed|pdf|vcf|raw))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
## End - Joomla! core SEF Section.
</Directory>
</VirtualHost>
Example SSL virtual host config with varnish reverse proxy
/your-installation-folder/sites-available/ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
DocumentRoot /var/www/wordpress.org
ServerName wordpress.org
ServerAlias www.wordpress.org
#forward all https traffic to varnish at port 80 and send back to user response from varnish
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:80/
ProxyPassReverse / http://127.0.0.1:80/
RequestHeader set X-Forwarded-Port "443"
RequestHeader set X-Forwarded-Proto "https"
#ssl settings, point to your certificates
SSLEngine On
SSLCertificateFile /etc/ssl/certificate.crt
SSLCertificateKeyFile /etc/ssl/private.key
SSLCACertificateFile /etc/ssl/ca_bundle.crt
#allow http version of website showing content from your https website
#you also need to add ifmodule to your :8080 virtual host without change
<IfModule mod_headers.c>
<FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
Header add Access-Control-Allow-Origin "http://wordpress.org"
</FilesMatch>
</IfModule>
<Directory "/var/www/wordpress.org">
allow from all
Options +FollowSymLinks
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
</Directory>
</VirtualHost>
</IfModule>