XAMPP for Linux: организация и настройка виртуальных хостов - 2
Часть 2. Организация виртуальных хостов
Настройка XAMPP как виртуального офлайн-хостинга для наших сайтов очень проста, не требует особых познаний (которые, впрочем, никогда не бывают лишними), и конкретно сводится к редактированию трех файлов – одного системного и двух конфигов самого XAMPP:
- /etc/hosts
- /opt/lampp/etc/httpd.conf
- /opt/lampp/etc/extra/httpd-vhosts.conf
Но сначала определимся с нашими будущими сайтами и точкой их монтирования.
Имена виртуальных хостов
Для определенности договоримся, что в нашем примере будут три сайта: mysite1.dev, mysite2.dev и mysite3.dev. Вы, естественно, можете сделать их (теоретически) сколько угодно и назвать их как хотите.
Note: Избегайте совпадения суффикса с реально существующими доменными зонами, сверяйтесь, например, здесь.
Размещение виртуальных хостов
Стандартно рекомендуется размещать папки сайтов в директории /opt/lampp/htdocs, однако мы пойдем другим путем и будем держать их в своей домашней директории, что несравненно удобнее, хотя бы потому, что в этом случае нам не нужны будут права рута на каждый чох.
Кроме того, если вы захотите установить другую версию XAMPP, папки с вашими локальными сайтами останутся, даже если вы забыли о бэкапе (но базы данных улетят, да. Их бэкап – ваша забота).
Итак, создаем в домашней директории папку www, а в ней папки mysite1.dev, mysite2.dev и mysite3.dev. В них и будем загружать файлы наших сайтов.
Правим /etc/hosts
Предварительное Note: Будьте умницей, сделайте бэкап первоначального /etc/hosts. Бережёного бог бережет.
Файл /etc/hosts приведём к такому виду:
127.0.0.1 localhost lampp xampp mysite1.dev mysite2.dev mysite3.dev 127.0.1.1 <hostname> # Вместо <hostname> подставьте имя своего компьютера, которое выводится в консоли по команде hostname
Всё остальное, что может содержаться в этом файле, нас в данном случае не интересует и пусть остаётся как есть.
Правим /opt/lampp/etc/httpd.conf
Здесь нас интересует одна-единственная строка:
Она должна быть где-то 488-ой (для разных версий XAMPP – в районе 480 - 490-ой)
Найдём ее и раскомментируем.
Правим /opt/lampp/etc/extra/httpd-vhosts.conf
Приведём этот файл к следующему виду (всё остальное должно быть закомментировано или удалено):
NameVirtualHost 127.0.0.1:80 <VirtualHost 127.0.0.1:80> ServerAdmin admin@mysite1.dev DocumentRoot "/opt/lampp/htdocs" ServerName lampp ServerAlias xampp </VirtualHost> <VirtualHost 127.0.0.1:80> ServerAdmin admin@mysite1.dev DocumentRoot "/home/ваш_логин/www/mysite1.dev" ServerName mysite1.dev ServerAlias www.mysite1.dev ErrorLog "/opt/lampp/logs/mysite1.dev-error_log" CustomLog "logs/mysite1.dev-access_log" common <Directory /> AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost 127.0.0.1:80> ServerAdmin admin@mysite2.dev DocumentRoot "/home/ваш_логин/www/mysite2.dev" ServerName mysite2.dev ServerAlias www.mysite2.dev ErrorLog "/opt/lampp/logs/mysite2.dev-error_log" CustomLog "logs/mysite2.dev-access_log" common <Directory /> AllowOverride All Require all granted </Directory> </VirtualHost> <VirtualHost 127.0.0.1:80> ServerAdmin admin@mysite3.dev DocumentRoot "/home/ваш_логин/www/mysite3.dev" ServerName mysite3.dev ServerAlias www.mysite3.dev ErrorLog "/opt/lampp/logs/mysite3.dev-error_log" CustomLog "logs/mysite3.dev-access_log" common <Directory /> AllowOverride All Require all granted </Directory> </VirtualHost>
Warning! Везде замените ваш_логин на свой логин в системе, а mysite1(2,3).dev – на имена ваших виртуальных сайтов.
Как видим, каждая секция представляет собой набор инструкций для отдельного хоста. Секции обычно клонируются копипастом, а затем в них исправляется имя хоста. Это удобно и просто, но в результате недосмотров и опечаток именно этот файл становится главным источником ошибок.
Поэтому после правки запустим (или перезапустим) XAMPP из консоли:
чтобы убедиться, что он не выдает ошибок в stdout.
Note: Инструкции в секции <Directory /> меняются от версии к версии, но об этом мы поговорим позже, а пока просто не забывайте, что речь у нас тут идет о XAMPP 1.8.3-1.
Кажется, ничего не забыли? Тогда, как говорит один мой приятель, всё должно зафурыкать. Вбиваем в браузере mysite1(2,3).dev и убеждаемся в этом.
Добавление новых хостов
Если вы внимательно прошли весь предыдущий путь, то уже понимаете, что добавление нового хоста чрезвычайно просто и сводится к следующему:
- Создаем папку ~/www/<имя_нового_хоста> и загружаем туда файлы
- Дописываем имя нового хоста в файле /etc/hosts
- Добавляем в файл /opt/lampp/etc/extra/httpd-vhosts.conf ещё одну секцию по аналогии с существующими и прописываем в ней вместо mysite1(2,3).dev имя нового хоста.
- Перезапускаем XAMPP
Два слова о паранойе
Если вам необходимо (или хочется) защититься по максимуму, нажмите на стартовой странице на Security
и прочитайте, что там написано. В двух словах, вам предлагается запаролить всё, что только можно, набрав в консоли команду
и пройдя весь процесс step-by-step.
Может быть, я не прав (в любом случае решать вам), но не советую. Этим вы сильно затрудните себе жизнь, тогда как XAMPP, имхо, и без того достаточно хорошо защищён.
В следующей части речь пойдет о нюансах настройки, специфических для разных версий.
2014-05-27 в 11:03:33
Здравствуйте, уважаемый админ!Большое спасибо за такое понятное и подробное объяснение, все установил.
И можно еще один вопрос? После установки, как Вы и посоветовали, попробовал открыть свой сайт через браузер, сайт открылся, но вот загруженные фотографии не захотели. У меня это фотогалерея со скриптами JavaScript - не открываются ни маленькие ни большие фото. Получается, что нужно еще поставить JavaScript? Или проблема в чем-то другом?
И что еще интересно - созданный сайт на флешке открывается браузером (получается средствами браузера?)без проблем. Для чего тогда нужен XAMPP (apache на компе, PHP), если сайт (небольшой) можно сделать и так, поправляя редактором HTML-файлы и перезагружая браузер? Извините, что спрашиваю, может, простые вещи, делаю в web-разработке первые шаги.
2014-05-27 в 12:25:48
Константин, спасибо за отзыв.
Судя по всему, Ваш сайт не использует php, и поэтому Вам XAMPP не требуется, сайт будет работать и без него. JavaScript — технология браузерная и ни apache, ни каких-то дополнительных пакетов в системе не требует. Если всё сделано правильно, скрипт заработает. Смотрите документацию к JS-галерее и ищите, где допустили ошибку.
2014-05-27 в 17:31:02
Сделал так:
chmod -R 777 /home
т.е. разрешил всё и всем домашней папке. Заработало! Почему-то не было права доступа у пользователя к картинкам в подкаталоги. Хотя это папка home.
Еще раз огромное спасибо!
2014-05-27 в 18:43:17
Константин, а зачем же было разрешать "всё и всем домашней папке"? Вполне достаточно было расширить права на отдельные файлы и директории. Таким "глобальным" решением Вы создали себе потенциальные угрозы для безопасности, и это как минимум. В норме в /home права на каталоги 755, на файлы 644 (т.е. запись для группы и остальных запрещена), а на ряд каталогов и файлов права могут быть 700 и 600, например, а на файлы, где хранятся пароли и т.п. конфиденциальная информация – еще жестче, вплоть до 400.
Теорию прав доступа следует достаточно хорошо изучить, особенно если Вы собираетесь заниматься созданием сайтов и вообще веб-технологиями, где это совершенно необходимо. В Linux механизмы прав точно такие же, а "правовая политика" – одна из причин высокой безопасности и надежности Linux.
2014-05-27 в 21:34:37
Да, я еще совсем новичок. Уже сделал 755. Сайт работает))). Просто до этого, когда начинал работать в подкаталогах opt (поначалу там хотел сайт установить), 755 не хватило для того, чтобы пользователь (я) мог туда файлы записывать (копировать без терминала). Только через терминал или mc. А иногда все же хочется мышкой быстренько.
А, кстати, подскажите, пожалуйста, что лучше почитать по теории прав (желательно с примерами установки). И вообще по Linux (интересует Debian, Ubuntu, Linux Mint), чтоб было понятно новичку, с примерами команд. Хотя, конечно, такие развернутые инструкции вряд-ли в одном месте есть... В любом случае надо будет решение конкретной задачи искать.
2014-05-27 в 22:08:43
Насчет прав процитирую сначала золотые слова (http://docs.altlinux.org/current/modules/linux_permissions/index.html#id2526339), хотя написанные по поводу ALT Linux, но вполне применимые к любому Linux-дистру:
"Установка и поддержание оптимальных прав доступа является одной из важнейших задач системного администратора. Права должны быть достаточными для нормальной работы пользователей и программ, но не бóльшими, чем необходимо для такой работы. Дистрибутивы ALT Linux обладают продуманной системой прав (предопределённые группы, псевдопользователи для различных программ-серверов, права доступа для системных файлов и каталогов). Прежде чем вносить существенные изменения в эту систему, целесообразно понять её логику и выяснить, нет ли другого способа достичь нужной цели."
Ну, а конкретных материалов море, можно начать хотя бы с http://www.opennet.ru/base/sys/file_access.txt.html. Советую прямо сразу постараться осилить хоть и непростые местами, но серьезные материалы типа этого: http://www.ibm.com/developerworks/ru/library/l-lpic1-v3-104-5/
А дальше, всё лучше ориентируясь в теме, сами без труда найдете массу полезной информации
2014-05-28 в 07:54:19
Отлично, в очередной раз спасибо!))
Еще вот о чем хотел спросить. При установке системы я выбрал установку веб-сервера, по умолчанию установился Apache2. При каждой перезагрузке системы надо его останавливать, чтобы запустить XAMPP. Думаю его удалить, но не повлияет ли это на работу XAMPP, ведь в его сборку тоже входит Apache2?
2014-05-28 в 09:33:16
Так, кое-что выяснилось. Я-то думал, что Ваш сайт написан на статических страницах, без php...Если Вы при установке выбрали сервер, то XAMPP Вам уже не нужен. XAMPP как раз и предназначен для того, чтобы не превращать домашний десктоп в сервер, но при этом иметь возможность создавать и отлаживать сайты. А если уж установлена серверная ОСь, то на ней и надо всё это делать. Что-нибудь одно.
2014-05-28 в 13:39:32
Там только Apache2 без PHP и MySQL(хотя когда я еще до них доберусь). Мне сервер на данном компьютере не нужен, задача - только создавать и отлаживать сайты. В-общем-то только для этого и ставил сервер. Сейчас немного боюсь удалять Apache2 - как бы это не повлияло на настройки XAMPP. Хотя, переустановить недолго.
2014-05-28 в 18:44:49
Удаление апача из ОС никак не повлияет на XAMPP, который всё нужное имеет у себя "на борту" – тем-то он и хорош.
2014-06-02 в 19:56:31
Не могли б вы также написать как устанавливать модули в Xampp, у меня например сложности с imagick
2014-06-02 в 20:37:27
Max, я никогда не нуждался в каких-либо дополнительных модулях и, как существо крайне ленивое, ненужным не интересовался. А пожалуй, надо бы. Но поскольку придется более-менее глубоко влезать в сабж, обещать такой материал в самое ближайшее время, увы, не могу.
Посмотрите для начала эту ссылочку: https://community.apachefriends.org/f/viewtopic.php?f=17&t=39759, может, в этом что-то есть.
2014-06-02 в 20:42:16
Вы б могли просто глянуть на данные когда я пытался установить imagick? Возможно вы сразу поймете. Ответы терминала, инструкция и команды по которым я устанавливал есть.
2014-06-02 в 21:54:09
Сомневаюсь, но давайте попробуем. Перешлите мне всё на rulitbox@yandex.ru или выложите на каком-нибудь pastebine.
2014-06-03 в 00:54:55
В общем я кажется справился сам.
Пользовался этим https://community.apachefriends.org/f/viewtopic.php?f=17&t=39759 и этим http://sbd-inlinux.blogspot.com/2011/07/configure-error-not-found-please.html
2014-06-03 в 07:40:59
Вот слова не мальчика, но настоящего линуксоида
Кстати, Ваша ссылка вместе с моей – уже приличная основа для дополнительной части "XAMPP for Linux", как развяжусь с текущими делами, так займусь.
2014-09-08 в 13:11:21
Спасибо огромное за статью. Перелопатил кучу сайтов, и здесь единственно где написано от и до , доходчиво даже для меня, только только начинаю разбираться с линуксом. Все получилось, сайты заработали из домашней директории. Только вот одно но, при установке новой темы, говорит - нет прав на создание папки uploads, все равно права 777 надо выставлять для папки wp-content, несмотря на то что сайты в домашней директории находятся. И еще в винде я кидаю просто папку в темы, с индексным файлом и файлом стилей пустым, и его уже можно установить как тему, так удобно работать при создании своего шаблона с нуля. А здесь даже у почти готового шаблона почему-то не читает файл стилей, пока опять же права 777 не задашь. Тогда какой смысл в домашнюю папку переносить сайты? В общем вопрос может смешной, но совершенно не понимаю почему в домашней категории, где вроде бы все можно делать без прав администратора, wordpress эти права запрашивает, может браузеру эти права надо выставить?)) Еще раз спасибо за статью.
2014-09-08 в 13:50:30
Сергей, спасибо за хороший отзыв.
Что касается прав: смысл переноса виртуальных сайтов в домашнюю директорию в том, что мы можем как угодно их править/изменять/удалять (в том числе и менять права на файлы и директории) без прав рута. А вот конкретные права на файлы и директории -- это уже другое дело. Они определяются, применительно к Вашему случаю, требованиями движка WP.
Иными словами, в Linux, как и во всем Web, Вы можете быть владельцем файла, но не иметь права его читать (права в восьмеричном виде 200) или редактировать (400) или запускать как исполняемый (600). Кроме Вас как владельца, учитываются права группы и остальных. Такие же ограничения прав действуют и по отношению к руту.
В винде, если Вы администратор, то Вам (а также группе и остальным) можно всё (что соответствует правам 777). Это очень плохая практика, из-за которой винда так уязвима. Советую Вам поскорей избавляться от этого наследия и обязательно изучить вопрос о структуре прав на файлы и директории, поскольку, повторюсь, та же система действует и на серверах во всем интернете, и без ее знания будет очень трудно разобраться с возникающими проблемами. Материалов по теме в интернете -- море. Успехов!
2015-05-26 в 14:08:24
ТЕма жива еще? проблемка есть небольшая...
вот файл часть файла httpd-vhosts.conf
ServerAdmin admin@xampp.ru
DocumentRoot /opt/lampp/htdocs/xampp
ServerName xampp.ru
ServerAdmin admin@domen.ru
DocumentRoot /home/linca/www/domen/public_html
ServerName domen.ru
xampp.ru - работает, остальное - браузер пишет access forbidden, error 403
права на папку поставил www поставил 755, не помогло
2015-05-26 в 14:14:49
вопрос снят, забыл поставить это
AllowOverride All
Require all granted
на другом сайте инструкцию нашел, там про Директори не было написано ничего. сейчас работает.
2015-09-13 в 16:22:05
Здравствуйте! спасибо за статью, но вот есть проблемка, я сайты собираюсь хранить на внешнем устройстве (ntfs), которое при использовании примонтировывается, sudo chmod не помогает, не пускает, пишет 403 Access forbidden. Как бы я мог выйти из ситуации?
2015-09-13 в 19:03:03
Боюсь, это у Вас не проблемка, а проблема, и, возможно, даже с большой буквы. Дело в том, что монтирование ntfs в обычном варианте означает права на файлы 600 (на директории 700) на ntfs-разделе, и простыми линуксовыми средствами это не решается. Придется разбираться с драйвером ntfs-3g и опциями монтирования. Лично я с этим дела не имел, могу лишь посоветовать для начала почитать тут:
wiki.archlinux.org/index.php/NTFS-3G_(Русский)
2016-01-12 в 18:57:05
Здравствуйте уважаемый админ. Проблема вот в чем заключается. Я полный ноль в линуксе. Установил xampp. Запустил его, проверил по адресу localhost. все работает отлично. В htdocs создал папку test.dev и в нем создал файл test.dev. в нем прописал: когда вывел этот документ в браузер он мне все это и выдал. Не скрипт php, а html код. он вывел мне все что я написал. Если Вы можете помочь буду вам очень сильно благодарен!!!
2016-01-12 в 23:26:01
Уважаемый Александр! То, что Вы "полный ноль в линуксе" -- это, конечно, не есть хорошо, но к данному случаю отношения не имеет. Здесь нужно иметь (хотя бы первоначальное) представление о том, как устроен и работает сайт. К примеру, файл test.dev не поймет ни один сервер, они понимают файлы index.html или index.php -- таковы по умолчанию начальные страницы сайта, именно эти страницы отдает пользователю сервер при обращении к нему по адресу сайта (в Вашем случае htpp://test.dev).
Так что совершенно тот же результат Вы наблюдали бы и в Винде, -- на Денвере или Виндовой сборке XAMPP.
Информации по сайтостроению и вообще веб-технологиям в интернете более чем достаточно (кстати, как и о Линуксе, который документирован лучше чем Windows), так что требуется только желание учиться, время и некоторое терпение.
Успехов!
2016-01-13 в 09:27:15
Уважаемый админ. Приношу свои извинения, что ввел вас в заблуждение и забыл дописать что файл с расширением php. был написан в блюфише и сохранен с расширением php. еще раз приношу свои извинения. мы пытались запустить парсер сайта. вот код ошибки:
xampp Warning: Unknown: failed to open stream: Отказано в доступе in Unknown on line 0
2016-01-13 в 11:49:31
Ну это уже конкретнее. На поверхности у Вас две проблемы: кодировка и права на файлы-каталоги.
XAMPP сообщает именно об этом (Отказано РІ доступе в "переводе на русский" означает Отказано в доступе).
С главной проблемой -- доступом -- будет гораздо легче справиться, если у Вас есть ясное представление о владельце файла и правах на файл. Если нет -- настоятельно советую прояснить для себя эти вопросы, поскольку они являются фундаментальными как для Linux, так и для всего интернета в целом. В данном случае нужно начать с проверки прав на файл index.php (обычно нормальные права 644) и директорию test.dev (755).
2016-01-13 в 17:45:26
этот файл был создан на ОС Windows. Перенесли на Linux. Вот и проблема. не могли бы вы более конкретно обьяснить что делать?
2016-01-13 в 19:04:01
Права на файл можно поменять командой chmod.
Предположим, Ваш index.php расположен по пути /opt/lampp/htdocs/test.dev/index.php (в норме это так и должно быть, а если не так -- пропишите точно существующий путь). Тогда достаточно забить в терминале команду
sudo chmod 644 /opt/lampp/htdocs/test.dev/index.php
(лучше делать это при остановленном XAMPP или, если он был запущен, после выполнения команды перезапустить его).
Аналогично можно поменять права и на другие файлы, занесенные с другой ОС. Учтите, что в зависимости от разных причин права на некоторые специфические файлы могут требоваться нестандартные, так что моя рекомендация -- освоить понятие о правах и владельце файлов-каталогов -- остается в силе.
2016-01-14 в 14:17:19
Спасибо огромное. Все проблемы решены при помощи команды chmod 777. Парсер заработал! еще раз огромное спасибо за вашу помощь!!!!!!!
2016-03-08 в 09:58:07
Сделал все по инструкции. При переходе по адресу mysite1.dev, выдает стандартную заглушку "Приветствия" (первое окно после установки) подскажите в чем может быть проблема?
2016-03-08 в 12:37:33
Обычно такое происходит при неправильной настройке DNS. Проверьте записи в /etc/hosts, а также еще раз /opt/lampp/etc/extra/httpd-vhosts.conf -- в нем частенько случаются ошибки.
2016-03-08 в 22:33:37
Нашел в чем была причина!
Файл "httpd.conf" имел расширение после установки XAMPPa "httpd.conf.bak" следовательно как я тщательно не копировал и не сверял настройки все сводилось к нулю, т.к. данный файл имел не то расширение (.bak)
Информация будет полезна тем кто решил установить свежую версию xampp. Возможно разработчики изменили установщик возможно это связанно с "linux mint 17.3 cinnamon" на других не пробовал.
Автору статьи большое спасибо!
2016-03-08 в 23:20:34
Спасибо, Дмитрий. Как соберусь дополнить материал сведениями о новых версиях XAMPP, буду иметь в виду Вашу информацию.
2019-02-17 в 23:33:26
ServerAdmin admin@mysite1.dev
DocumentRoot "/opt/lampp/htdocs"
ServerName lampp
ServerAlias xampp
ServerAdmin admin@mysite1.dev
DocumentRoot "/home/ваш_логин/www/mysite1.dev"
ServerName mysite1.dev
ServerAlias www.mysite1.dev
ErrorLog "/opt/lampp/logs/mysite1.dev-error_log"
CustomLog "logs/mysite1.dev-access_log" common
AllowOverride All
Require all granted
у меня сайт 1 работает и открывается, а сайт 2, 3 нет. --почему у вас на сайт 1 написаны две секции, первая с ссылкой на папку "Ксампа", а другая секция на дамашнюю папку при этом больше строк? (выше копипаст с вашего мануала две секкции о которых разговор)
2019-02-18 в 07:58:18
Семен, давно не занимаюсь темой, детально ответить не могу. Но если работает один сайт, можно попробовать добавить и на остальные по такой же первой секции, как на первый.