Поддерживает ли Apache2 виртуальный хостинг поддоменов? - PullRequest
7 голосов
/ 08 ноября 2011

В настоящее время мой сервер Apache настроен так:

<VirtualHost *:80>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www
</VirtualHost>

Проблема в том, что все, что ниже /var/www, доступно из любого места.Если у меня есть веб-страница /var/www/john/bio.html, то эта веб-страница может заимствовать сценарии / изображения из var/www/jane/

Я хочу настроить свой сервер Apache следующим образом:

<VirtualHost *:80>
 ServerName www.example.com
 ServerAlias example.com
 DocumentRoot /var/www
</VirtualHost>

<VirtualHost *:80>
 ServerName www.john.example.com
 ServerAlias john.example.com
 DocumentRoot /var/www/john
</VirtualHost>

<VirtualHost *:80>
 ServerName www.jane.example.com
 ServerAlias jane.example.com
 DocumentRoot /var/www/jane
</VirtualHost>

Так что всефайлы для пользователя john находятся в папке /var/www/john/, а также для пользователя jane.Затем, когда символические ссылки отключены (по умолчанию) и доступ предоставляется только с /var/www/user/ и ниже (снова по умолчанию), мне не нужно беспокоиться о веб-странице john's, включая скрипты / изображения с веб-страницы jane's,

1 Ответ

21 голосов
/ 08 ноября 2011

Используя только локальные меры (/etc/hosts вместо DNS), я обнаружил, что это действительно может работать.

Сначала измените файл /etc/hosts, чтобы он соответствовал желаемым названиям веб-сайтов.( www.example.com ) и целевой IP-адрес (192.168.1.1).Я использовал свой локальный IP-адрес.

 IPAddress               Hostname                   Alias
-----------     --------------------------    ------------------
192.168.1.1     www.example.com               example.com 
192.168.1.1     www.john.example.com          john.example.com
192.168.1.1     www.jane.example.com          jane.example.com

Ваш веб-браузер проверит ваш /etc/hosts файл , прежде чем заглянет во всемирную паутину.

Затем просмотрите все ваши конфигурационные файлы Apache (httpd.conf, apache2.conf, ports.conf, conf.d/*) и убедитесь, что в точно один файл, команда NameVirtualHost *:80выдан (это не обязательно должен быть порт :80, но если он будет выпущен более одного раза, вы получите эту проблему ).Мой был выпущен в /etc/apache2/ports.conf, поэтому, если нужно, поместите свой там.Наконец, обновите свой файл конфигурации Apache (у меня был /etc/apache2/sites-available/default) примерно так.

<VirtualHost *:80>
    ServerName www.example.com
    ServerAlias example.com
    DocumentRoot /var/www
</VirtualHost>

<VirtualHost *:80>
    ServerName www.john.example.com
    ServerAlias john.example.com
    DocumentRoot /var/www/john
</VirtualHost>

<VirtualHost *:80>
    ServerName www.jane.example.com
    ServerAlias jane.example.com
    DocumentRoot /var/www/jane
</VirtualHost>

В качестве последнего шага вам может понадобиться добавить сайты в Apache, выполнив следующие команды (этот шагне обязательно, если вы передаете все сайты в sites-available/default, а не в отдельные файлы для отдельных сайтов).

# a2ensite www.example.com
# a2ensite www.john.example.com
# a2ensite www.jane.example.com

После этого john.example.com перейдет к /var/www/john.Этот каталог будет действовать как корневой каталог, и john больше не будет иметь доступа к www, и, следовательно, не будет иметь доступа к /var/www/jane.

Аналогично, после этого, jane.example.com перейдет к /var/www/jane.Этот каталог будет действовать в качестве корневого каталога, и jane больше не будет иметь доступа к www и, следовательно, не будет иметь доступа к /var/www/john.

При отключенных символических ссылках --byпо умолчанию - ни один каталог не сможет получить доступ друг к другу

...