Примеры ниже приведены с действующего веб-сервера со следующей конфигурацией — Debian 8 + Apache 2.4 + MySQL 5.6 + PHP 5.6
В примерах используется порт 8080 для работы в связке с Varnish, который настроен на 80 порту. Если вы не используете Varnish — измените порт на 80 в выбранном конфиге.
Пример стандартного virtual host конфига
/путь-установки-апача/sites-available/default.conf
NameVirtualHost *:8080 <VirtualHost *:8080> DocumentRoot /var/www <Directory "/var/www"> allow from all Options None </Directory> </VirtualHost>
Пример virtual host конфига для сайта с php
/путь-установки-апача/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>
Пример virtual host конфига для сайта на WordPress
/путь-установки-апача/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>
Пример virtual host конфига для wordpress сайта доступного с нескольких доменов
/путь-установки-апача/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 #Разрешает cross-origin доступ для дополнительного домена для указанных файлов <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>
Пример virtual host конфига для сайта с Multisite WordPress
/путь-установки-апача/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 #Используйте ifmodule только на multisite где все сайты используют одну тему и плагины. Если нет - удалите блок. <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>
Пример virtual host конфига для сайта на joomla
/путь-установки-апача/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>
Пример virtual host конфига через SSL c reverse proxy и Varnish
/путь-установки-апача/sites-available/ssl.conf
<IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot /var/www/wordpress.org ServerName wordpress.org ServerAlias www.wordpress.org #перенаправляет https traffic в varnish на порт 80 и отправляет пользователю ответ от 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 SSLEngine On SSLCertificateFile /etc/ssl/certificate.crt SSLCertificateKeyFile /etc/ssl/private.key SSLCACertificateFile /etc/ssl/ca_bundle.crt #разрешает http версии сайта доступ к файлам доступным на https. #такой же блок нужно будет вставить и в конфиг без SSL <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>
Эта статья — перевод моей же статьи с личного блога https://windowspros.ru/apache-2-4-varnish-virtual-host-config-examples/