Работая программистом, очень часто приходится настраивать 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/, в этот каталог нам и нужно будет положить файлы нашего сайта.
ошибка в скрипте
ln -s «/etc/apache2/sites-available/$1.conf» «$1.conf»
.conf не нужна здесь в обоих случаях(у меня так на ubuntu 12.04)
у меня тоже без .conf но с ним тоже работает
А потом указиваем в А записи ip сервера и все ?
будет грузится папка с тем же именем что и домен ?
да, так и будет, даже скажем так будет грузится та папка которая мудет прописана в настройке вирт хоста
4-я строка как по мне должна выглядеть так:
cat <> «$1.conf»
Иначе скрипт будет выдавать ошибку.
Спасибо автору за статью. Все доступно и понятно.
Чуток переделал скрипт, прям чуток. Думаю, что так удобнее =)
#!/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«