Работая программистом, очень часто приходится настраивать VirtualHost в Apache. Конечно это не занимает больше 10 минут, но все же время это деньги. Как же хорошо что не только denwer в windows может упростить задачу создания виртуальных хостов, в Ubuntu тоже есть такая возможность – это и есть тема данной статьи. Для начала рассмотрим процесс ручной настройки, а затем напишем sh скрипт для автоматического создания виртуальных хостов.
В каталоге /etc/apache2/sites-available создаём файл с именем «sitename.ru»

sudo gedit /etc/apache2/sites-available/sitename.ru


в нем необходимо указать настройки хоста, я указываю такие:

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName sitename.ru
	DocumentRoot /var/www/sitename
	<Directory />
		Options All
		AllowOverride All
	</Directory>
	<Directory /var/www/sitename>
		Options All
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>
	ErrorLog /var/log/apache2/error.log
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn
	CustomLog /var/log/apache2/access.log combined
	ServerSignature On
</VirtualHost>

Теперь для того чтоб разрешить использование этого доменного имени создадим символическую ссылку в каталоге /etc/apache2/sites-enabled/

cd /etc/apache2/sites-enabled/
sudo ln -s ../sites-available/sitename.ru

либо с помощью команды

a2ensite /etc/apache2/sites-available/sitename.ru

Теперь осталось только добавить запись о нашем виртуальном хосте в файл /etc/hosts, открываем файл:

sudo gedit /etc/hosts

через пробел добавляем название нашего сайта «sitename.ru», должна получиться строка вида, если доменов больше одного они указываются через пробел:

127.0.0.1 sitename.ru

Перезапускаем apache, чтоб новые настройки вступили в силу, делаем это командой:

sudo apache2ctl restart

Теперь напишем sh скрипт который сделает все то же самое автоматически. Создадим файл в папке /home/username/, назовем его virt-host.sh и добавим в него сам скрипт автоматического создания виртуального хоста:

#!/bin/bash
echo "Creating Virtual Host"
cd /etc/apache2/sites-available
cat <<EOF >> "$1"
<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName $1
  	ServerAlias www.$1
	DocumentRoot "/var/www/$1"

	<Directory />
		Options All
		AllowOverride All
	</Directory>

	<Directory "/var/www/$1">
		Options All
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>
	ErrorLog /var/log/apache2/error.log
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn
	CustomLog /var/log/apache2/access.log combined
	ServerSignature On
</VirtualHost>
EOF
mkdir "/var/www/$1"
cd /etc/apache2/sites-enabled
ln -s "/etc/apache2/sites-available/$1.conf" "$1.conf"
echo "Editing /etc/hosts"
cat <<EOF >> "/etc/hosts"
127.0.0.1       $1
EOF
echo "Set permissions"
chmod 0777 -R "/var/www/$1"
echo "Restarting Apache2"
/etc/init.d/apache2 restart
echo "Finished!"
echo "Local address: /var/www/$1"
echo "Web address: http://$1"

сохраним и дадим файлу права на исполнение:

sudo chmod a+x virt-host.sh

вот и все, скрипт готов к работе, запускаем его с помощью команды:

sudo ./virt-host.sh sitename.ru

скрипт также создаст каталог «sitename.ru» в директории /var/www/, в этот каталог нам и нужно будет положить файлы нашего сайта.

Читать похожие статьи:

6 комментариев “Apache VirtualHost – настройка, автоматическое создание”

  1. Михаил:

    ошибка в скрипте
    ln -s «/etc/apache2/sites-available/$1.conf» «$1.conf»
    .conf не нужна здесь в обоих случаях(у меня так на ubuntu 12.04)

  2. admin:

    у меня тоже без .conf но с ним тоже работает :)

  3. Вася:

    А потом указиваем в А записи ip сервера и все ?

    будет грузится папка с тем же именем что и домен ?

  4. admin:

    да, так и будет, даже скажем так будет грузится та папка которая мудет прописана в настройке вирт хоста

  5. Виталий:

    4-я строка как по мне должна выглядеть так:
    cat <> «$1.conf»
    Иначе скрипт будет выдавать ошибку.

  6. netwizd:

    Спасибо автору за статью. Все доступно и понятно.
    Чуток переделал скрипт, прям чуток. Думаю, что так удобнее =)
    #!/bin/bash
    echo «Creating Virtual Host»
    mkdir «/var/log/apache2/$1/»
    cd /etc/apache2/sites-available
    cat <> «$1.conf»

    ServerAdmin admin@$1
    ServerName $1
    ServerAlias http://www.$1
    DocumentRoot «/var/www/$1″

    Options All
    AllowOverride All

    Options All
    AllowOverride All
    Order allow,deny
    allow from all

    ErrorLog /var/log/apache2/$1/error.log
    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn
    CustomLog /var/log/apache2/$1/access.log combined
    ServerSignature On

    EOF
    mkdir «/var/www/$1″
    cd /etc/apache2/sites-enabled
    ln -s «/etc/apache2/sites-available/$1.conf» «$1.conf»
    echo «Editing /etc/hosts»
    cat <> «/etc/hosts»
    127.0.0.1 $1
    EOF
    echo «Set permissions»
    chmod 0777 -R «/var/www/$1″
    echo «Restarting Apache2″
    /etc/init.d/apache2 restart
    echo «Finished!»
    echo «Local address: /var/www/$1″
    echo «Web address: http://$1«