Добавление виртуальных хостов в Apache. Linux статьи
Написать статью
Войдите, чтобы писать статьи

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

34

Добавление виртуальных хостов в 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>. В самом начале файла (на второй строке) обязательно пропишите строку «ServerName 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, выполнив команду:

sudo /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.

Лайков: +1
войдите, чтобы ставить лайки
34
  • Опубликовано: 18.10.2010

Комментарии

bibilkoff
Активный пользователь
Активный
19.10.2010
19:06
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
О, спасибо. Обязательно в закладки.
Алексей
03.11.2010
23:58
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Спасибо.
Кстати, чтобы сделать хост активным, я воспользовался командой
sudo a2ensite myhost
deburger
Активный пользователь
Активный
05.01.2011
19:30
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
очень познавательно и доступно )) спасибо за подробное руководство
anonimus
10.08.2011
21:24
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
а что делать если открывается новый хост но папка почему то от локалхоста? я видать чето напутал :p
Drenov
18.10.2013
01:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийanonimusРодительский комментарий
+1
войдите, чтобы ставить лайки
было такое же - нужно что б чтоб была эта строка

ServerName myhost
Андрей
28.09.2011
10:12
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Здравствуйте. Подскажите, как настроить apache и php, чтобы броузер открывал php файлы, а не предлагал их сохранить? добавлял в конфиг apache строку с AddType и соответстием php? не помогло.
vermilion
24.10.2011
16:00
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийАндрейРодительский комментарий
+1
войдите, чтобы ставить лайки
попробуй sudo chmod -R 777(ваша_директория_рабочих_скриптов_)
пример sudo chmod -R 777 /var/www/
Voland
Активный пользователь
Активный
26.03.2012
09:57
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvermilionРодительский комментарий
+1
войдите, чтобы ставить лайки
Хватит и 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 программой). Потому, ни строки с указанием интерпретатора, ни прав на исполнение этим скриптам не нужно.
Voland
Активный пользователь
Активный
26.03.2012
09:59
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVolandРодительский комментарий
+1
войдите, чтобы ставить лайки
Код в первом случае:
<?
php print ("Hello, Worldn");
?>

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

----
Сайт на фиг порезал PHP код.
Voland
Активный пользователь
Активный
26.03.2012
10:00
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVolandРодительский комментарий
+1
войдите, чтобы ставить лайки
Код в первом случае:

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

----
Да ё-моё! Вот так.
Voland
Активный пользователь
Активный
30.03.2012
09:52
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVolandРодительский комментарий
+1
войдите, чтобы ставить лайки
<SomeTag>проверка</SomeTag>

<?php
SomeCode
?>

---
Проверка работы фильтра.
Абырвалг
18.02.2012
16:19
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийАндрейРодительский комментарий
+1
войдите, чтобы ставить лайки
попробуй вместо того что бы добавлять новый файл в /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
Эдуард
18.05.2020
14:36
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийАбырвалгРодительский комментарий
+1
войдите, чтобы ставить лайки
А если надо будет еще один сайт добавить?
Andrii
22.01.2012
19:14
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Дякую. Коротко і ясно))
Стас
24.03.2012
17:04
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Сценарий автоматического добавления сайта на локальном сервере. Если создать кнопку запуска, то останется только ввести имя нового каталога для сайта и пароль 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
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Подскажите, что сделать пожалуйста!
Сайт http://grechuho.by работает, а если ввожу www.grechuho.by (и некоторые барузеры так автоматом пишут), то страница не найдена (( ЧТо делать? В файле etc/hosts прописывала И grechuho.by И www.grechuho.by не помогло...
Voland
Активный пользователь
Активный
01.04.2012
08:00
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийаняРодительский комментарий
+1
войдите, чтобы ставить лайки
А в конфиге апача, где описывается VirtualHost, у вас добавлено такое:

ServerAlias myhost www.myhost

?
аня
03.04.2012
13:24
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийVolandРодительский комментарий
+1
войдите, чтобы ставить лайки
Добавлено. Разобралась! Спасибо! Еще в хостере в днс нужно было создать суб домен www. И все получилось))
Алексей
13.04.2012
02:45
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Вопрос такой. А нельзя ли как на денвере настроить апач? Т.е. существует дирректория для хранения всех папок хостов (в денвере это /home/), создаешь в ней папку с именем нового хоста а в ней еще одну с именем www, перезапускаешь апач - и новый хост уже работает.
yuriy
Активный пользователь
Активный
13.04.2012
10:51
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийАлексейРодительский комментарий
+1
войдите, чтобы ставить лайки
Нет, к сожалению, так нельзя. Даже для LAMP server так нельзя.
Сергей
22.06.2012
12:28
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Скажите пожалуйста, почему если у меня в папке присутствуют тестовые файлы index (html, php) браузер отображает содержимое этих файлов. Но если я в эту папку копирую файлы CMS под названием MODx. Браузер отвечает Internal Server Error при открытии index.php.
Виртуальный хост делал по данной статье.
createl
08.10.2012
21:11
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
В строке вбиваешь свой хост, а перебрасывает к файлам директории, которая описанна в default. Столько вариантов перепробовал, а все одно! Может кто подскажет в чем может быть загвоздка?
createl
09.10.2012
14:02
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийcreatelРодительский комментарий
+1
войдите, чтобы ставить лайки
Разобрался. Оказывается в линуксе какие то хитрые ссылки. Я какуе то не такую сделал. Хотя в ней путь и был правильный и даже апач этот хост считал добавленным. Помогло удаление и повтор командой a2ensite
Иван
10.10.2012
17:47
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Народ, поставил сервер, всё работает.
Создал каталоги, добавил хост, всё найс.
Тестовая страничка заработала, думаю вообще найс)
И тут скопировал сайт (чтобы дописать его) и вместо того чтобы видеть всё как есть, ни одна ссылка не работает, нет ни одной картинки и т.п. в чём проблема?(
Voland
Активный пользователь
Активный
11.10.2012
08:43
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийИванРодительский комментарий
+1
войдите, чтобы ставить лайки
А что значит "скопировал"? Откуда и куда?
yuriy
Активный пользователь
Активный
11.10.2012
08:50
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийИванРодительский комментарий
+1
войдите, чтобы ставить лайки
Возможно файл .htaccess не скопировали или его нужно подправить. Присоединяюсь к вопросу Воланда.
mogilka
31.01.2013
07:40
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Спасибо за пост, сразу всё заработало
Maximus
01.06.2013
18:47
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Парюсь на этом шаге:
cd ../sites-enabled

выдает ошибку:
-su: cd: ../sites-enabled: Нет такого файла или каталога

Как исправить? подскажите пожалуйста
Fox
Активный пользователь
Активный
01.06.2013
19:39
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийMaximusРодительский комментарий
+1
войдите, чтобы ставить лайки
А вы в каком каталоге находитесь? Попробуйте перейти в домашний каталог:
cd ~

А потом

cd /etc/apache2/sites-enabled
Mello
05.07.2013
11:11
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Верно, только предварительный переход в домашний каталог не нужен. Не стоит новичкам забивать голову невесть чем.
shilgen
Активный пользователь
Активный
13.09.2013
22:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
в закладки, вечно не знаю как правильно - обычно в httpd.conf устраиваю тихий ужас
Владимир
11.01.2015
08:22
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Indexes - это очень опасно. Некоторые новички могут добавить это на продакшн и будет печалька.
Serg
30.10.2015
09:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
В файле после адреса 127.0.0.1 допишите название своего виртуального хоста. В моем случае это myhost.

127.0.0.1 localhost myhost

Очень важный момент я на нем споткнулся
Артем
08.11.2015
18:49
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
не работает! (((

Написать комментарий

Ваше имя:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила