Comments 86
>> Итак, попробуем добиться, чтобы процесс создания поддомена сводился лишь к созданию папки для сайта. Возможно ли это? Проверим…

Получилось что не возможно…
Так как всё равно пришлось:
>> sudo service apache2 restart

ИМХО — последние и есть проблема. Остальное — мелочи.
>> sudo service apache2 restart
Насколько я понял из статьи, это делается один раз в самом начале при загрузке нового модуля. Все последующие добавления виртуальных хостов не будут требовать перезагрузку.
Упс. Так много было про днс написано, что в работу MOD_VHOST_ALIAS я как-то пропустил. Перечитал внимательно — да, похоже эта проблема решена.

«Модуль организует динамическое создание виртуальных хостов на основе запрошенного доменного имени и не требует внесения изменений в конфигурационные файлы сервера при создании новых виртуальных хостов»

Тогда полезно. Извините, прошлый комент написал недоразобравшись.
вообще-то есть такая замечательная вещь как
sudo service apache2 graceful

graceful: Gracefully restarts the Apache daemon by sending it a SIGUSR1. If the daemon is not running, it is started. This differs from a normal restart in that currently open connections are not aborted. A side effect is that old log files will not be closed immediately. This command automatically checks the configuration files via configtest before initiating the restart to make sure Apache doesn't die.

Сколько угодно. А вы считаете, что это глючное тормозное говно до сих пор целесообразно использовать?
Сергей, ну зачем для этого еще и аккаунт левый создавать с Чаком в качестве userpic'а? Nginx нам тоже нравится, правда!
Можно ли добиться подобного эффекта в Windows? Надоело постоянно добавлять новые домены на домашнем компьютере.
www.denwer.ru/
Система управления виртуальными хостами, основанная на шаблонах. Чтобы создать новый хост, вам нужно лишь добавить директорию в каталог /home, править конфигурационные файлы не требуется. По умолчанию уже поддерживаются схемы именования директорий многих популярных хостеров; новые можно без труда добавить.
Apache, Bind точно также есть и под Windows, можно их же и использовать :)
UFO landed and left these words here
UFO landed and left these words here
Каждый месяц меняю на свежие со SmashingMagazine. Вся процедура проходит в два-три клика, и никаких файлов менять не надо.
сколько еще статей будет об этом на хабре?
dnsmasq же. Зачем столько танцев вокруг BIND.
Во-во. Зачем столько мучений, да ещё и лишний сервер в системе, когда есть куда более простое решение.
Ага, а теперь попробуйте, например, без плясок с реврайтами на одном из сайтов включить поддомеы в подпапках, или перенести Document Root в подпапку. Или задать какие-то настройки для отдельно взятого сайта. В апаче сотни настроек, но даже такие простые вещи там только с бубном делаются.
«Удобный способ создания виртуальных хостов с помощью модуля mod_vhost_alias не лишен ряда недостатков.

Для эффективного использования модуля mod_vhost_alias конфигурация всех виртуальных хостов должно быть одинакова. В противном случае, для настройки каждого виртуального хоста необходимо применять контейнер, что лишает модуль mod_vhost_alias своего основного преимущества.»

Так и есть.
Дополню нижнего комментатора.
И на самом деле ничего страшного. Если для какого-то проекта нужна спецефическая настройка — для него просто заводится отдельный контейнер в sites_enabled (или прямо в httpd.conf). Ведь если спецефическая настройка — все равно с конфигами воевать.

У меня примерно такая система поднята на виртуалке (коею я гордо реку девелоперской машиной). А еще папка, в которой лежат сайты примонтирована с помощью hgfs (как шаред фолдер) в хост-систему. В итоге мне просто остается прямо в моей хост системе создать папку, проинициализировать в нее проект и можно уже разрабатывать, что называется, наживую.
Интересно и полезно для сайтостроителя на свою рабочую машину. Поступил заказ, накатил директорию, создал базку и понеслась. В производстве вряд ли будет хорошим решением по длинному ряду причин.
ну, мой скрипт решает следущие проблема:
1) созданию юзера
2) создание public_html
3) создание правила для nginx
4) перезапуск nginx
5) создание правила для apache
6) перезапуск apache
7) создание базы данных
8) установку всех необходимых прав.

скрипты решают.
Было бы неплохо, если своим скриптом вы поделились.

P.S. Когда прочел заголовок статьи, обрадовался, однако увидев «свистопляски» и возможные баги, снова разочаровался.
свистопляски заключаются в основном в настройке локального DNS-сервера для зоны loc. Для реального домена можно просто добавить A-запись для * и все.
Не совсем понял зачем все-таки в случае локальной машины поднимать bind и что-то настраивать в нем, когда записи в hosts более чем достаточно. Или этот модуль использует свой резолвер в обход системного?
Без настройки DNS придется прописывать в hosts каждый домен, так как он не понимает записи «127.0.0.1 *loc».
При таком раскладе согласен. Мне просто всегда хватало перечисления через пробел нужных имен. Если же тестим сайт, которому 100500 сабдоменов надо, то да — днс лучший выход.
Остается только вопрос — что за хрень в обратке написана и кой леший она вообще в данном случае? :)
UFO landed and left these words here
Выше поправляют, что в hosts такое не будет работать. Согласен. Я просто больше 2-3 сайтов никогда не гонял локально, так что мне необходимость вайлдкардов не понять :)
UFO landed and left these words here
Гммм… Есть bind. Какой интерфейс к нему нужен? Не хочется править конфиги — есть webmin и еще куча тулзов для управления им.
UFO landed and left these words here
А в винде иначе? Надо сначала днс сервер поставить, зону там завести, а потом записи добавлять. При том все там далеко не интуитивно понятно. По крайней мере я лазил в майкрософтовый днс 3-4 раза за всю жизнь и каждый раз плевался как идиотски все сделано. Нравится windows-way? Вперед. Никто не отговаривает.
UFO landed and left these words here
Да, пользовательские задачи в винде решаются за один клик. Но стоит попытаться сделать что-нибудь более-менее сложное, то вся простота летит к чертям и приходиться рыть интернет в поисках нужных утилит и инструкций к ним.
UFO landed and left these words here
Настройка веб-сервера не является простой пользовательской задачей.
UFO landed and left these words here
Гммм… вижу противоречие:
пользователь<>разработчик
Пусть даже это вебразработчик :)
UFO landed and left these words here
Welcome to the real world, Neo :)
В компьютерном мире вообще почти все отвратительно :) Холиварить имхо тут не имеет смысла, все что выше типовых юзерских задач обычно делается не очень интуитивно в любой операционке. Пока еще не сделали волшебную кнопку «Сделать зае… сь».

З.Ы. Роутер в линуксе делается правкой одной переменной в конфиге и одной строкой в конфиге iptables. Скорее всего в графике оно тоже парой кликов делается — не искал, т.к. привык к консоли.
С виндой наоборот могу посоветовать роутер. Сколько раз уже ко мне обращались со случаями, когда эта глючная птичка переставала работать в один прекрасный день :( И фик найдешь почему.
bind не нужен. Есть dnsmasq, а большего и не надо. Там инструкция вида «перенаправлять все *.loc на 127.0.0.1» требует всего одной строчки в /etc/dnsmasq.conf:
address=/loc/127.0.0.1
Я в курсе. Мне просто ближе bind. Тем более, что на локальном хосте он мне нужен не только для этого :)
Опять же unix-way, который выше так ругают :) Любую задачу можно решить кучей способов, и все они правильные. Каждый делает как ему удобнее :)
UFO landed and left these words here
хорошо. я его причешу, пересмотрю свои конфиги, может половину переделаю чтобы не было стыдно и напишу стать про то как я настроил свой vps :)
> — перезапуск nginx
> — перезапуск apache
Вот проблема, которую решает описанный подход
Юзеры, папки, базы и права всяко будут делаться скриптами и тут.
А graceful рестарт или HUP чем не устраивают? Первый — дождется пока дочерние процессы отдадут все юзерам, и постепенно заменяет их на новые процессы с новым конфигом. Второй — убъет всех детей и запустит новых с новым конфигом. В случае HUP время перезапуска значительно сокращается, т.к. родительский процесс продолжает работать, а в случае с graceful юзеры вообще ничего не заметят. У nginx тоже подобный фокус есть. Так что проблема высосана из пальца, т.е. ее тупо нет.
Не, я конечно понимаю, что у нас в стране обычай такой — сначала ковыряемся, а если что-то не пашет или не устраивает, то лезем мануал читать. Если действовать общепринятым способом, то перед тем как начинать работать с софтом хорошо бы просмотреть доку, ну хотя бы бегло. А по рестарту в доке апача отдельный раздел есть, где все расписано — по какому сигналу как себя ведет апач. Ну и команда service httpd, запущенная без параметров должна уже задавать направление поиска :)
да ладно вам, у меня один тру-бубунтовод как-то спросил как маны читать. и удивился что по манам есть поиск. вот же придумают тоже!
Бубунтоиды они вообще не с той стороны в мир линукс приходят. Многие даже про консоль не знают, и при нажатии в их присутствии Ctrl+Alt+Fn делают квадратные глаза :)
У меня такой же скрипт есть — github.com/denisoid/simple-administration-scripts

Возможности:
— создание пользователя без пароля и группы для сайта
— создание пользователя mysql с рандомным паролем
— создание базы данных mysql
— добавление виртуальных хостов для apache и nginx

Буду рад есть посоветуете, как сделать его еще лучше=)

на днях напишу как я вообще настроил впс и скрипт заодно.

скриипт то у вас нормальный раз он выполняет что от него требуется, только что пароли к мускулу в файл не сохраняет.

мне не совсем нравится как вы организовали пользователей, но это моё личное имхо и на днях напишу как сделал я.
Если у одного виртхоста habrahabr.com, а у другого habrahabr.ru, — имеем странное поведение (когда забываешь про %-2).
Не веселое решение. Да и ну его этот apache. Слишком разжирел он.
извините если я не совсем правильно понимаю, но:
1) в nginx надо указать куда проксировать запрос.
2) для обеспечения секурности на каждый домен нужно держать по своему сги-процессу
3) нормально ли это запускать 30 цгишок и постоянно держать их в памяти?
1. Не так уж сложно заставить проксировать его по хедеру host.
2. Это как раз самое верное решение, unix way, так сказать.
3. Вполне нормально, пускаем 2000 fcgi серверов на 12гб системе, те что не часто работают висят в свапе, остальные в памяти. В случае чего скедулер распределит.
«Если у одного виртхоста habrahabr.com, а у другого habrahabr.ru...»
Для всех виртуальных хостов используется суффикс .loc, так что проблемы быть не должно.
У меня при создании папки в home/domains/test.ru/www автоматически биндятся алиасы с nginx и апача, так что статику отдаёт nginx а php обрабатывает apache, также если создать файлик nginx.cache в папке test.ru то автоматически включится кеш по куке :)
если домен по которому обращаются не существует то сервер смотрит в home/domains/default/www :)
Также перед запросом подключается для всех сайтов php файлик, устраняющий некоторые проблемки.

$l = explode("/",$_SERVER['SCRIPT_FILENAME']);
$DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"] = implode("/",Array( $l[0], $l[1], $l[2], $l[3], $l[4]));


И все инструкции по настройке есть тут на хабре.
Мдя. Для начала:
>sudo a2enmod vhost_alias
Указывайте блин дистрибутив. По скриншоту и любви к sudo можно понять, что описываете для бубунты?

>127.0.0.1 test.loc
Такое писать надо только если в пишете имя, а не ip'шник, или для тестирования, когда на локальной машине работаете. А если тестируете/используете в разработке сайтов, то нафик пляски с bind? Записи в hosts более чем достаточно.

Насчет bind. Вы прямую и обратную зону сравнивали? Где в обратке записи типа PTR и что у нас стоит в SOA и конфиге bind? Плюс в продакшене так вам и отдали управление обраткой.

mod_rewrite. В продакшене при более или менее нормальном трафе жрет проц шо ппц. Никогда так не делайте и старайтесь либо не использовать его, либо включать только там где это действительно надо.

Про mod_vhost_alias и отличающиеся конфиги виртуальных хостов тут уже сказали.

У апача есть такая замечательная директива — Include. Пишем в конфиге Include vhosts/*.conf, делаем шаблон, в который при создании хоста скриптиком вписываем имя юзера и имя домена. Все. Потом по необходимости правим конфиг и делаем service httpd reload, т.е. просим апач просто конфиг перечитать.

Статью переименовать, дописать «для разработчика» или «на локальном хосте».
Млин. Схавался кусок.
>Такое писать надо только если в пишете имя, а не ip'шник
Читать «Такое писать надо только если в пишете имя, а не ip'шник в VirtualHost»
>> Указывайте блин дистрибутив.
В ярлыках =)

>> Записи в hosts более чем достаточно.
Лень постоянно лазить в host. Хотелось поднять что-то в стиле «настроил и забыл».

>> В продакшене при более или менее нормальном трафе жрет проц шо ппц.
Все настройки ориентированы на локальную конфигурацию, так что доступ с внешки как бы не планировался. Но, хоть сам модуль и включен, но не во всей сайтах использован. Для каждого сайта включается отдельно в .htaccess

>> Про mod_vhost_alias и отличающиеся конфиги виртуальных хостов тут уже сказали.
Мне не критично. Практически все конфигурации одинаковые.
В исходном мануале подробно описывается еще один недостаток — невозможность ведения раздельных логов и необходимость выкручиваться парсингом при ротации или пайпом.
Когда у меня впервые появилась задача сделать несколько десятков хостов на одном сервере, описанных недостатков мне хватило, чтобы не смотреть в его сторону.
Лучше день потерять, потом за 5 минут долететь. По мне так проще будет сделать скрипт для создания виртуальных хостов со всей необходимой структурой папкой и записью в hosts. Можно привязать генерацию виртуальных хостов к какой-нибудь базе данных или простому текстовому файлы определённого формата. Раньше делал нечто подобное на местном сервере, раздавал место под сайты, базы данных и почтовые ящики автоматически через форму регистрации. К сожалению, не сохранилось. А может и к лучшему, страшно на свой старый код смотреть, а там он очень старый.
Что касается проблем с $_SERVER['DOCUMENT_ROOT'] и RewriteBase, примечательно, что такие же проблемы есть и при реализации виртуальных хостов с помощью mod_rewrite. Не смотрел исходники vhost_alias, но такое чувство, что он с помощью mod_rewrite и реализован.
маленький скрипт, который добавляет новую запись в /etc/hosts, будет намного проще, чем всё это представление с БИНДом. Плюс — лучше безопасность.
Как вариант. Но необходимость добавление домена в hosts сохраняется. Хотя можно решить эту проблему, используя поддомены к localhost.
не же. Если вы используете имена вида xxxx.myComputerName то средствами днс этот url перенаправляется на 127.0.0.1 и ничего не нужно добавлять. Единственно что нужно сделать — это создать папку /web/xxxx/html
И никакие ISPmanager-ы не нужны, который техподдержка хостингов всучивает за деньги. Буквально 5 строчек дописать и все работает)
Хм
Server:Apache/2.4.7 (Ubuntu)
Не понимает директиву %1 — пытается обратиться не по параметру а прямо ищет подпапку "%1"
Ах да, она же присутствует в конфиге… В таком случае, не знаю, что и сказать.
Only those users with full accounts are able to leave comments. Log in, please.