Для настройки виртуальных хостов на web сервере apache2 под ubuntu 7.10, 8.04, 8.10, 9.04, 9.10, Debian 5 необходимо в самое начало или конец (вне инструкций ) файла /etc/apache2/sites-available/default добавить директиву:
NameVirtualHost 192.168.0.1
Там необходимо указать IP адрес либо DNS имя компютера на котором размещён вебсервер, можно указать localhost или 127.0.0.1
Затем, учитывая организацию конфигов apache2 в Debian, необходимо создать файл виртуального хоста в директории: /etc/apache2/sites-available/
например ваш сайт называется supebreys.ru, значит логичнее создать чтото вроде /etc/apache2/sites-available/supebreys_ru.conf. В любом случае это название должно вам говорить для чего этот файл и будет лучше если вы будете придерживаться какого то одного правила создания таких файлов. Затем в этот файл добавляем такой текст:
<VirtualHost *:80>
DocumentRoot "/home/httpd/breys.ru/www"
ServerName breys.xxx
<Directory />
allow from all
Options +Indexes
</Directory>
ScriptAlias /cgi-bin/ "/home/httpd/breys.ru/cgi-bin/"
CustomLog /home/httpd/breys.ru/access.log common
ErrorLog /home/httpd/breys.ru/error.log
</VirtualHost>
Здесь мы создали виртуальный хост которых будет обрабатывать запросы на 80 порту с любого доступного адреса
Также тут указана корневая директория сайта, директория с cgi скриптами и пути к файлам журналов работы вебсервера
Для корневой директори указаны дополнительные(необязательные) опции: разрешение доступа с любого адреса и включение модуля обработки индексного файла, в принципе эти опции не обязательны и нужны только если прихоится переопределять глобальные политики доступа и загрузки модулей вебсервером
После создания этого файла веб сервер ещё не видит его. Если внимательно посмотреть на файлы в директориях /etc/apache2/sites-enabled/ и /etc/apache2/sites-available/ то должно стать ясно, то что в директории /etc/apache2/sites-available лежат файлы описывающие виртуальные хосты, а в папке/etc/apache2/sites-enabled/ лежат симлинки на файлы в sites-available. Исходя из названий становится ясно, что:
sites-available - все доступные виртуальных хосты
sites-enabled - включаемые вебсервером
то есть, чтобы добавить виртульный хост в apache2, необходимо либо создать файл нового виртуального хоста в sites-available либо дописать(не желательно) его в уже имеющийся там файл, а чтобы включить виртуальный хост, необходимо чтобы директории sites-enabled была ссылка на файл описывающий виртуальных хост
Это сделанно для того, чтобы разделить виртуальные домены на уровне хостинга. Например, хостер чтобы временно удалить какой то домен удаляет ссылку из папки sites-enabled и перезапускает вебсервер и так же быстро включает домен снова, без правки единого конфига, как это было реализованно ранее.
Итак, включаем наш, только что созданный, новых виртуальный хост:
ln -s /etc/apache2/sites-available/breys_ru.conf /etc/apache2/sites-enabled/breys_ru.conf
Этой командой мы создаём симлинк(символическую ссылку на один файл в другой директории) на рабочий файл виртуального хоста, который будет обработан при следующем перезапуске вебсервера
Возможно вам потребуется расширить поведение вашего виртуального хоста - может потребоваться чтобы он был доступен по нескольким адреса
Например, у меня имеются зеркала моих сайтов и я работаю с ними дома используя имена сайтов + моя домашняя зона .xxx, тоесть для сайта breys.ru у меня есть домашнее зеркало breys.xxx, но вполне вероятна ситуация когда нужно показать зеракло ещё кому то, тогда я могу использовать DNS зону зарегистрированную за мной на DYNDNS.COM, тоесть это зеркало имеет дополнительный адрес в виде:breys.ffsdmad.homelinux.org, ещё более частая ситуация когда нужно иметь имя www.breys.ru и соответственноwww.breys.ffsdmad.homelinux.org
Чтобы включить этого необходимо в файл виртального хоста, внутри инструкций .. добавить список необходимых алиасов:
<VirtualHost *:80>
....другие инструкции
ServerName breys.xxx
....
ServerAlias www.breys.xxx
ServerAlias breys.ffsdmad.homelinux.org
ServerAlias www.breys.ffsdmad.homelinux.org
....
</VirtualHost>
Вполне возможно придётся заниматься отладкой модуля mod_rewrite, для этого необходимо в файл виртуального хоста добавить строки:
<VirtualHost *:80>
....другие инструкции
RewriteLog /home/httpd/breys.ru/rewrite.log
RewriteLogLevel 9
</VirtualHost>
Начните с небольшого примера и постепенно расширяйте возможности своего виртуального хостинга различными возможностями вебсервера apache2 (а их у него предостаточно) и постепенно вы поймёте насколько проста и логична такая структура в условиях такого сложного сервиса как вебхостинг
Также следует заметить, что если вы поставили на локальную машину сервер apache2 и виртуальные хосты прописаны в /etc/hosts (соответствия имени ip адресу), то начинаются тормоза при обращении к вебсерверу. Дело в том, что браузер сначала пытается распознать ip адрсе у dns сервера, который у вас прописан в /etc/resov.conf, а не проверять файл /etc/hosts. Это можно исправить заменив в файле /etc/host.conf последовательность перебора сервисов разрешения имён, но лучше всего настроить bind и забыть про тормоза и проблемы с обратным разрешением имени по IP
Вот тут можене прочитать как настроить bind для домашней сети, а здесь можно взять скрипт автоматического создания виртуальных хостов в условиях домашнего хостинга
Эта заметка висит здесь уже второй год и на неё не прекращается поток запроса, а это наталкивает меня на мысль, что люди не могут разобраться с этой системой, а значит нужно объяснять ещё более доходчиво, в этоге эта заметка переписывалась уж три раза
Если у вас остались или возникли какие то вопросы или неясности, не стесьняйтесь, спрашивайте, система коментариев мгновенно оповещает меня через Jabber, таким образом я реагирую практически моментально
#1: Наверно самая дикая статья из которых я видел
У автора раздвоение личности
2008-10-10 03:50:43
#2: Наконец то я разобрался с опцией NameVirtualHost, плюсую
2009-04-30 17:16:05
#3: задолбали плохие переводчики которые плодят недопонятый хлам в сети
2010-01-29 15:30:42
#4: спасибо
а любой, кто умеет перевести лучше --- переведи и дай сюда ссылку на свой вариант, я почитаю
2010-02-07 17:45:23
#5: А чего переводить то?
официальная документация переведена: http://httpd.apache.org/docs/2.2/vhosts/
нужно только разжовывать
может быть видео урок нужен?
2010-02-07 17:56:35
#6: Спасибо помогло =)
2010-03-03 00:40:20
#7: Спасибо автору.
Простая вещь а нигде не найдешь.В большенстве статей дальше установки сервера подробностей нет,а чайнику врубится в люникс сходу тяжко.
2010-03-18 20:16:25
#8: а что мне делать если у меня по умолчанию нет таких папок как sites-available и sites-enabled в директории /etc/apache2/ ???
2010-04-10 17:10:47
#9: #9: а что мне делать
ну какие то ведь папки есть, это зависит от дистрибутива
2010-04-10 17:45:22
#10: ну вот такие есть папки modules.d и vhosts.d и такие файлы httpd.conf и magic
ну и все ... больше ничего нет ...
подскажите пожалуйста как мне сделать виртуальный хост ?
может тупо создать их и все сделать как тут написано ?
2010-04-10 22:07:54
#11: #10: ну вот такие есть папки
а что за дистрибутив?
2010-04-10 22:19:19
#12: #10: ну вот такие есть папки
по сути всё просто, нужно вписать секцию VirtualHost в файл где описываются хост
2010-04-10 22:20:21
#13: вот моя аська 591716048 свяжитесь со мной или напишите свои координаты я с вами свяжусь ... я вам дам данные чтоб подключится через putty ... я полный профан в линуксе .. за помощь отблагодарю
2010-04-11 03:42:12
#14: во все разобрался .. спасибо вам большое
у меня это оказался фаил /etc/apache2/vhosts.d/default_vhost.include там где я вставил такой код
VirtualHost *:80
ServerName films.sait.net
DocumentRoot "/var/www/localhost/htdocs/films"
Directory "/var/www/localhost/htdocs/films"
Options -Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
/Directory
/VirtualHost
2010-04-11 19:30:41
#15: Большое спасибо.
Легко и очень понятно написано.
2010-04-14 18:16:12
#16: спасибо
2010-05-17 22:02:41
#17: спасибо.
2010-05-31 09:02:12
#18: Приветствую! Очень толковый пост. Хотя я достаточно хорошо знаком с Апачем но некоторые дополнительные приемы я отсюда почерпнул.
А вопрос у меня такой, у нас с друзьями есть свой сервачок, на нем linux и вся хостерская мастерская :), так вот, допустим надо добавить домен 3 уровня аля vasya.domen.exp, а у Пети есть petya.domen.exp, я как системный администратор делаю для товарища поддомен vasya и перезапускаю Апач. В этот момент Петя тащил по http длинный файл на низкой скорости и он у него оборвался... за что я схватил жестяной банкой по голове когда он пришел.. не убило конечно, но меня подружески обматерили.
Есть-ли какой нибудь способ ввести поддомен petya.domen.ru без перезапуска всего Апача?
Спасибо.
2010-06-03 16:52:26
#19: немного ошибся там не petya.domen.ru а vasya.domen.exp надо второе включить чтобы не вылетело первое...
2010-06-03 16:54:37
#20: #18 Есть-ли какой нибудь способ ввести поддомен petya.domen.ru без перезапуска всего Апача?
если честно -- сам не знаю и тоже интересно
ну а другу скажи пусть докачивает файл с опцией wget -c
2010-06-03 16:54:37
#21: Ух ты.. не ожидал такого быстрого ответа... есть возможность по jabe говорить сейчас?
2010-06-03 16:55:48
#22: IE Зло и я им тоже иногда пользуюсь :) вот и Петя через него тащил.. :)
2010-06-03 16:56:47
#23: ffsdmad@jabber.ru
2010-06-03 17:05:56
#24: я там отписался Олег
savaog@jabber.ru
2010-06-03 17:26:27
#25: Дополню, в Debian можно включать виртуальный хост не симлинком, а командой a2ensite, которая делает тож самое несколько лаконичней. Т.о.:
# a2ensite supebreys_ru.conf - включаем хост
# a2dessite supebreys_ru.conf - отключаем хост
ну и перечитать конфиг апача
# /etc/init.d/apache2 reload
2010-06-29 14:46:10
#26: Спасибо, это конечно удобно, но лишает понимания
кстати, есть ещё утилиты a2dismod и a2enmod, которые соответственно отключают и включат модули апача
2010-06-29 14:48:07
#27: А ещё, чтобы не останавливать apache во время перезапуска можно послать ему сигнал который заставляет его перечитывать настройки
kill –SIGUSR1 PID-процесса_апаче
либо вот так, что эквивалентно
apache2ctl graceful
таким образом apache2 перечитает и обработает новые настройки без перезапуска сервера
2010-06-29 14:53:01
#28: кстати, есть ещё утилиты a2dismod и a2enmod, которые соответственно отключают и включат модули апача
Ну коль пошла такая пьянка, предлагаю дополнить статью до поддержки SSL на виртуальных хостах. Думаю, многим будет полезно и интересно.
2010-06-29 14:56:29
#29: хм, делал как то и даже пользовался, но не думал, что это актуально
но видимо да, необходимо переработать материал, исходя из имеющегося опыта и рассчитывая его на начинающих вебмастеров
2010-06-29 15:42:58
#30: Спасибо, вроде доходчиво, но у меня чтото не получается..
2010-07-27 09:04:12
#31: Для тех у кого что-то не получается или влом вручную набирать команды, я вот тут написал скриптик, автоматизирующий процесс создания.
Скрипт здесь: http://wmparser.ru/content/viewArticle/54
2010-08-11 14:07:09
#32: при рестаре апача, он ругается на:
Syntax error on line 236 of /etc/apache2/apache2.conf:
Syntax error on line 11 of /etc/apache2/sites-enabled/fabrika_ru.conf: Expected /Directory but saw /VirtualHost
Я создал текст как у Вас в статье. А там точно 2 пустых тега Directory / и между ними инструкции allow from all и Options +Indexes?? или может как-то не так?
Вот я про что говорю:
Directory /
allow from all
Options +Indexes
Directory /
2010-08-27 15:18:00
#33: Очепятка, должно быть
Directory /
allow from all
Options +Indexes
/Directory
2010-09-22 18:59:55
#34: Спасибо за статью!
Разобрался за 7 минут.
Очепятку поправьте, пожалуйста, а то пришлось все комменты прочитать :).
Ну и в статье не сказано, что надо перезапускать апач.
Спасибо,
Петр
2010-11-08 19:10:37
#35: Что-то все равно не работает, вроде все по инструкции делаю :(
Правда "NameVirtualHost localhost" не вставляю, ибо "[warn] NameVirtualHost localhost:0 has no VirtualHosts"
2010-11-12 13:51:59
#36: покажите файл с этим хостом
2010-11-12 13:59:16
#37: Последний вариант:
NameVirtualHost 127.0.0.2:8888
VirtualHost 127.0.0.2:8888
DocumentRoot "/var/www/mysite"
ServerName mysite
Directory /
allow from all
Options +Indexes
/Directory
CustomLog /var/www/mysite/access.log common
ErrorLog /var/www/mysite/error.log
/VirtualHost
2010-11-12 14:00:42
#38: сделайте так, в /etc/apache2/sites-available/default
пускай будет
NameVirtualHost localhost:8888
а в файле хоста
VirtualHost localhost:8888
2010-11-12 14:02:57
#39: Кстати, оказывается работает, но не так.
Вообще localhost теперь показывает содержимое этой папки, а не той, что в default'е =\
2010-11-12 14:03:04
#40: То же самое - http://localhost:8888 не работает, а localhost просто показывает не дефаултную папку, а папку хоста
2010-11-12 14:11:54
#41: перечитайте всё внимательно и сделайте как тут написано, только после этого поймёте как это всё работает
2010-11-12 14:12:54
#42: В общем с портом :80 только работает, другие порты не хочет обрабатывать.
Следовательно больше одного сайта все равно не получится во внутреннюю сеть вывести
2010-11-12 14:47:16
#43: Ваша статья все так же актуальна)
В моем случае в директории .../sites-availible есть файлик default c предложенным конфигом и соответсвенно в директории .../sites-enabled лежит симлинк на етот default. После того как я создал файлы и симлинки к своим виртуальным хостам, можно ети default удалить? Я бы попробывал без вопросов, только вот сервер все время в деле и нельзя его уронить.
2011-03-14 15:52:06
#44: в default есть инструкция
NameVirtualHost *:80
в других её нету, не вижу смысла удалять default
2011-03-14 17:46:24
#45: Restarting web server: apache2[Tue Apr 12 19:46:31 2011] [warn] NameVirtualHost 10.93.12.14:80 has no VirtualHosts
[Tue Apr 12 19:46:31 2011] [warn] NameVirtualHost 10.93.12.14:0 has no VirtualHosts
... waiting [Tue Apr 12 19:46:32 2011] [warn] NameVirtualHost 10.93.12.14:80 has no VirtualHosts
[Tue Apr 12 19:46:32 2011] [warn] NameVirtualHost 10.93.12.14:0 has no VirtualHosts
чето пишет непонятное. пишет что имя виртуального хоста не является виртуальным хостом, барада какая то.
2011-04-12 19:59:35
#46: покажите вывод команды
grep NameVirtualHost -iR /etc/apache2/
2011-04-12 20:01:14
#47: cc-wiki:/etc/apache2/sites-available# grep NameVirtualHost -iR /etc/apache2/
/etc/apache2/sites-enabled/000-default:NameVirtualHost 10.93.12.14
/etc/apache2/ports.conf:NameVirtualHost *:80
/etc/apache2/ports.conf: # If you add NameVirtualHost *:443 here, you will also have to change
/etc/apache2/sites-available/default:NameVirtualHost 10.93.12.14
2011-04-12 20:19:51
#48: в общем настроил все так что на самом сервере по имени открывается норм,
но у меня локальная сеть и надо чтобы в локалке тоже открывалось все это. Если есть мысли подскажите, буду признателен.
свои мысли что то про днсы, но как то они очень призрачные :)
2011-04-17 15:41:13
#49: re #48
ну чтобы это работало в локалке необходимо либо каждому прописать в файле hosts все адреса ваших сайтов
либо запустить свой dns сервер, который будет помимо обслуживания ваших доменов обрабатывать все другие запросы и прописать его у все в вашей локалке
либо тоже запустить собственный dns сервер, который будет обслуживать вашу зону, а затем делегировать эту зону на вашем локальном dns сервере
либо настроить алиасы с использовать dyndns, так как описано вот тут: http://breys.ru/blog/999.html
2011-04-17 15:45:29
#50: dyndns отпадает, ибо сервер только локальный, во внешку доступа нету, скорее подходит второй вариант, собственный днс который обслуживать будет только нас.
спасибо за советы
2011-04-17 16:36:05
#51: полезная статья.
подскажите пожалуйста где мне искать настройку, которая отвечает за ip моего локального сервера? дело в том, что доступ к файлам /var/www/ из веба я получаю когда ввожу в адресную строку 127.0.1.1
а я хотел бы получать доступ посе ввода 127.0.0.1
как я понимаю это настраивается потому что виндовый сервер у меня был настроен именно так. а значит в линуксе тоже скорее всего это возможно.
2011-04-25 19:54:45
#52: чтобы узнать в каком файле есть упоминание 127.0.1.1
нужно выполнить на сервере команду
grep -R 127.0.1.1 /etc/
рекурсивный поиск строки 127.0.1.1 в файлах директории /etc
ну а там раскручивайте дальше
2011-04-25 20:31:23
#53: При прописывании имен в /etc/hosts
...
127.0.0.1 domen1
127.0.0.1 domen2
...
приоритетный домен будет доступен по следующим адресам:
http://localhost/
http://domen1/
Как добиться того, чтобы он был виден лишь по адресу http://domen1/
2011-08-12 10:50:32
#54: Не могу создавать , изменять файлы в папке sites-availabel и других. Помогите пожалуйста
2011-10-09 12:56:39
#55: для этого нужно иметь права root администратор
используйте либо su чтобы войти в сеанс администратора
либо sudo чтобы запускать редактор с правами администратора
2011-10-09 12:58:14
#56: По какому адресу искать сайт?
2011-10-09 14:22:04
#57: какой сайт?
2011-10-09 14:23:35
#58: Свой сайт :) который создал в Apache. что в браузере вводить и почему именно это?
2011-10-09 14:26:56
#59: вводить нужно то, что создавал и прописывал в DNS или в hosts или IP
или просто на localhost
2011-10-09 14:28:23
#60: незнал что делать и тупо приписал в hosts под 127.0.0.1 localhost запись 127.0.0.2 и название своего сайта. Подскажите пожалуйста как надо
2011-10-09 14:32:04
#61: просто внимательно прочитайте страничку и ссылки с неё
2011-10-09 14:33:45
#62: Помогите! Указываю DocumentRoot "/home/buttalbakl/sites/site.loc/www" в итоге Apache ошибку дает Warning: DocumentRoot [/etc/apache2/buttalbakl/sites/timur/www] does not exist. Как сделать чтоб путь был относительно начала системы а не относительно папок /etc/apache2/
2011-10-09 17:46:24
#63: может быть дадите мне доступ и я помогу настроить?
мой жаббер ffsdmad@jabber.ru
2011-10-09 17:49:27
#64: АВТОР! РЕСПЕКТ ТЕБЕ! ПРОЧИТАЛ ДЕСЯТОК СТАТЕЙ НА ЭТУ ТЕМУ! МУТЬ ПОЛНАЯ. ПРОЧИТАЛ ТВОЮ СТАТЬЮ -ВСЁ СТАЛО КРИСТАЛЬНО ЯСНО! +100500 ТЕБЕ, АВТОР! Сорри за капс, эмоции.))
2011-10-29 02:06:46
#65: Благодарю за статью.
Сделал всё по инструкции,а именно:
в файле /etc/apache2/sites-available/default добавил строку NameVirtualHost 192.168.13.15 (это мой айпи в локалке, т.к. мне нужен сайт именно в моей локальной сети)
далее в папке /etc/apache2/sites-available создал файл kristall-trance в который прописал:
VirtualHost *:80
DocumentRoot /var/www/kristall-trance.ks/www
ServerName 192.168.13.15
ErrorLog /var/www/kristall-trance.ks/logs/error.log
CustomLog /var/www/kristall-trance.ks/logs/access.log combined
ScriptAlias /cgi-bin/ /var/www/kristall-trance.ks/cgi-bin
ServerSignature Off
Directory /var/www/kristall-trance.ks/www
Options +Indexes
Allow from all
/Directory
/VirtualHost
далее выполнил команду: sudo ln -s /etc/apache2/sites-available/kristall-trance.conf /etc/apache2/sites-enabled/kristall-trance.conf
В результате при перезапуске apache2 выдает: [warn] NameVirtualHost 192.168.13.15:0 has no VirtualHosts
Прошу Вас указать в чём же я ошибся, хотя ошибок вроде бы и нет.
2011-12-17 11:13:52
#66: В файле kristall-trance нет ошибки, всё прописано с угловыми скобками, просто фильтрация на этом не позволяет отобразить их.
2011-12-17 11:17:06
#67: в /etc/apache2/sites-available/default
впиши
NameVirtualHost 192.168.13.15:80
2011-12-17 11:18:15
#68: Прописал в файл /etc/apache2/sites-available/default следующее:
NameVirtualHost 192.168.13.15:80
В результате:
NameVirtualHost 192.168.13.15:80 has no VirtualHosts
2011-12-17 11:21:42
#69: Дело было в том, что в файл /etc/apache2/sites-enabled/000-default прописалась (или я прописал, уже не уверен) строка: NameVirtualHost 192.168.13.15:80
Удалил ее и ошибка пропала, но думаю, что это не верно.
2011-12-17 11:53:08
оставить комментарий