Добавление виртуальных хостов в Apache

Добавление виртуальных хостов в Apache По умолчанию после установки Apache создается виртуальный хост с именем localhost. Я расскажу как добавлять новые виртуальные хосты в Apache.

Я создам виртуальный хост с именем myhost (вместо myhost вы можете выбрать любое имя, которое вам захочется).

Сначала нужно создать каталог, в котором будут находиться файлы будущего сайта. Создайте в своем домашнем каталоге директорию myhost. Чтобы это сделать можно выполнить команду:

mkdir ~/myhost

Директорию можно создавать где угодно, я для простоты создал ее в корне своей домашней директории yuriy.

Создаем конфигурационный файл хоста

В каталоге /etc/apache2/sites-available хранятся конфигурационные файлы виртуальных хостов Apache. По умолчанию там хранится файл default, который соответствует хосту localhost. Мы возьмем за основу файл default и скопируем его в файл с именем myhost. Для этого выполните следующие команды:

cd /etc/apache2/sites-available
sudo cp default myhost

Теперь отредактируем файл myhost. Откройте его в редакторе (например, в редакторе Gedit), выполнив команду:

sudo gedit myhost

Внесите в файл соответствующие изменения. В частности пропишите путь до директории, в которой будут храниться файлы хоста. В нашем случае это путь /home/yuriy/myhost, где yuriy вы должны заменить на название вашей домашней директории. Путь нужно прописать в двух местах: у параметра DocumentRoot и в заголовке секции <Directory /home/yuriy/myhost>. Вот пример того, как должен выглядеть ваш файл myhost:

<VirtualHost *:80>
    ServerName myhost
    ServerAdmin webmaster@localhost

    DocumentRoot /home/yuriy/myhost
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/yuriy/myhost>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log

    LogLevel debug

    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Теперь нам нужно сделать наш хост активным. Apache использует каталог /etc/apache2/sites-enabled для определения хостов, которые нужно включить. Создадим символьную ссылку в каталоге sites-enabled, указывающую на наш файл myhost. Для этого выполните команды:

cd ../sites-enabled
sudo ln -s ../sites-available/myhost myhost

Перезапускаем Apache

Перезапустите Apache, выполнив команду:

/etc/init.d/apache2 restart

Редактируем /etc/hosts

Осталось отредактировать файл /etc/hosts. В нем прописывается соответствие IP адреса имени хоста. То есть это своего рода локальный DNS. Чтобы открыть файл, выполните следующую команду:

sudo gedit /etc/hosts

В файле после адреса 127.0.0.1 допишите название своего виртуального хоста. В моем случае это myhost.

127.0.0.1	localhost myhost

Заключение

На этом настройка виртуального хоста Apache с именем myhost закончена. Теперь к нему можно обратиться в браузере, набрав адрес http://myhost.

Комментарии

19.10.2010, 19:06
О, спасибо. Обязательно в закладки.
Алексей
03.11.2010, 23:58
Спасибо.
Кстати, чтобы сделать хост активным, я воспользовался командой
sudo a2ensite myhost
05.01.2011, 19:30
очень познавательно и доступно )) спасибо за подробное руководство
anonimus
10.08.2011, 21:24
а что делать если открывается новый хост но папка почему то от локалхоста? я видать чето напутал :p
Андрей
28.09.2011, 10:12
Здравствуйте. Подскажите, как настроить apache и php, чтобы броузер открывал php файлы, а не предлагал их сохранить? добавлял в конфиг apache строку с AddType и соответстием php? не помогло.
vermilion
24.10.2011, 16:00
попробуй sudo chmod -R 777(ваша_директория_рабочих_скриптов_)
пример sudo chmod -R 777 /var/www/
26.03.2012, 09:57
Хватит и 755, чтобы Apache (или же интерпретатор) имел доступ к содержимому PHP файлов. Когда интерпретатор указывается явно, то не нужны права на исполнение, интерпретатору достаточно прочитать содержимое файла. Для примера создадим файл:
~ $ nano php.php

С простым содержимым:

И запустим его:
~ $ /usr/bin/php php.php

На выводе мы увидим:
Hello, World

Потому, что интерпретатор указан явно. Он просто считал содержимое файла и выполнил команду.

Если это же скрипт мы хотим выполнить так:
~ $ ./php.php

То консоль скажет:
bash: ./php.php: Отказано в доступе

Потому, что
1) Файл не исполняемый;
2) Не указан интерпретатор;

Сделаем файл исполняемым:
~ $ chmod +x php.php

И запустим:
~ $ ./php.php

Вывод будет снова нехорошим:
./php.php: line 1: syntax error near unexpected token `('
./php.php: line 1: `'

Произошло это потому, что не указан интерпретатор и bash воспринял наш файл php.php как скрипт на языке bash. Конечно же будет ошибка синтаксиса.

Теперь немного изменим файл:
~ $ nano php.php

#!/usr/bin/php

И запустим снова:
~ $ ./php.php

На выхлопе мы видим:
Hello, World

Все получилось благодаря тому, что мы указали интерпретатор в начале программы и дали файлу права на исполнения. PHP скрипты из WEB запускаются системой так, что система уже знает, какой необходим интерпретатор (модулем ли Apache обрабатывается код, или php-cgi программой). Потому, ни строки с указанием интерпретатора, ни прав на исполнение этим скриптам не нужно.
26.03.2012, 09:59
Код в первом случае:
<?
php print ("Hello, Worldn");
?>

Код во втором случае:
#!/usr/bin/php
<?
php print ("Hello, Worldn");
?>

----
Сайт на фиг порезал PHP код.
26.03.2012, 10:00
Код в первом случае:

Код во втором случае:
#!/usr/bin/php

----
Да ё-моё! Вот так.
30.03.2012, 09:52
<SomeTag>проверка</SomeTag>

<?php
SomeCode
?>

---
Проверка работы фильтра.
Абырвалг
18.02.2012, 16:19
попробуй вместо того что бы добавлять новый файл в /etc/apache2/sites-available в default дописать

ServerName myhost
ServerAdmin webmaster@localhost

DocumentRoot /home/yuriy/myhost

Options FollowSymLinks
AllowOverride None


Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all


ErrorLog /var/log/apache2/error.log

LogLevel debug

CustomLog /var/log/apache2/access.log combined
Andrii
22.01.2012, 19:14
Дякую. Коротко і ясно))
Стас
24.03.2012, 17:04
Сценарий автоматического добавления сайта на локальном сервере. Если создать кнопку запуска, то останется только ввести имя нового каталога для сайта и пароль root:

#!/bin/bash

# nautilus ~/.gnome2/nautilus-scripts
#Создаём настройки сайта в Ahache2
echo -n "Введите имя создаваемого хоста: "
read newHost

#Производим запись в /etc/hosts
file="/etc/hosts"
b=$(cat $file)
newContent="127.0.0.1 ${newHost} www.${newHost}"$'n'$b
sudo bash -c "echo '${newContent}' > $file"

#Добавляем сайт в sites-available и прописываем в него нужные директивы
sap=/etc/apache2/sites-available/$newHost
sudo touch $sap
sudo chmod 777 $sap
directives="
ServerName ${newHost}
ServerAlias ${newHost} www.${newHost}
DocumentRoot /var/www/${newHost}

AllowOverride All

ErrorLog /var/www/${newHost}/logs/error.log
"
echo "$directives">$sap

#Создаём каталог сайта и файл отчётов в каталоге сайта
mkdir /var/www/${newHost} /var/www/${newHost}/logs/
> /var/www/${newHost}/logs/error.log
#Создаём страницу
index=" ${newHost}
Страница создана автоматически для сайта ${newHost}
"
echo "$index"> /var/www/${newHost}/index.html

#Включаем виртуальный хост
sudo a2ensite $newHost

#Перезагружаем настройки
sudo /etc/init.d/apache2 reload

#Включаем rewrite
#sudo a2enmod rewrite
#sudo /usr/sbin/apache2ctl restart

BROWSER="firefox"
#как будем открывать страницу: new-window - новом окне, new-tab - в новой вкладке:
OPENURL="new-tab"
URL="http://${newHost}"
#Проверяем, запущен ли браузер:
if ps aux | grep firefox | grep -v grep > /dev/null;
then exec $BROWSER -remote "openurl($URL, $OPENURL)"; #если запущен
else exec $BROWSER $URL; #если НЕ запущен
fi
аня
30.03.2012, 13:16
Подскажите, что сделать пожалуйста!
Сайт http://grechuho.by работает, а если ввожу www.grechuho.by (и некоторые барузеры так автоматом пишут), то страница не найдена (( ЧТо делать? В файле etc/hosts прописывала И grechuho.by И www.grechuho.by не помогло...
01.04.2012, 08:00
А в конфиге апача, где описывается VirtualHost, у вас добавлено такое:

ServerAlias myhost www.myhost

?
аня
03.04.2012, 13:24
Добавлено. Разобралась! Спасибо! Еще в хостере в днс нужно было создать суб домен www. И все получилось))
Алексей
13.04.2012, 02:45
Вопрос такой. А нельзя ли как на денвере настроить апач? Т.е. существует дирректория для хранения всех папок хостов (в денвере это /home/), создаешь в ней папку с именем нового хоста а в ней еще одну с именем www, перезапускаешь апач - и новый хост уже работает.
13.04.2012, 10:51
Нет, к сожалению, так нельзя. Даже для LAMP server так нельзя.
Добавить комментарий

Комментарий будет опубликован только после просмотра администратором сайта.

Электронная почта публиковаться не будет.
Введите символы, которые изображены на рисунке.
Кликните на изображение, чтобы сгенерировать новый код.
Автоинструктор (Москва) - Дзержинский, частный автоинструктор.