Pull to refresh

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 just landed and posted this here
UFO just landed and posted this here
dns маскарадинг, через dnsmasq.
UFO just landed and posted this here
Каждый месяц меняю на свежие со SmashingMagazine. Вся процедура проходит в два-три клика, и никаких файлов менять не надо.
сколько еще статей будет об этом на хабре?
dnsmasq же. Зачем столько танцев вокруг BIND.
Во-во. Зачем столько мучений, да ещё и лишний сервер в системе, когда есть куда более простое решение.
Ага, а теперь попробуйте, например, без плясок с реврайтами на одном из сайтов включить поддомеы в подпапках, или перенести Document Root в подпапку. Или задать какие-то настройки для отдельно взятого сайта. В апаче сотни настроек, но даже такие простые вещи там только с бубном делаются.
«Удобный способ создания виртуальных хостов с помощью модуля mod_vhost_alias не лишен ряда недостатков.

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

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

У меня примерно такая система поднята на виртуалке (коею я гордо реку девелоперской машиной). А еще папка, в которой лежат сайты примонтирована с помощью hgfs (как шаред фолдер) в хост-систему. В итоге мне просто остается прямо в моей хост системе создать папку, проинициализировать в нее проект и можно уже разрабатывать, что называется, наживую.
Интересно и полезно для сайтостроителя на свою рабочую машину. Поступил заказ, накатил директорию, создал базку и понеслась. В производстве вряд ли будет хорошим решением по длинному ряду причин.
UFO just landed and posted this here
Было бы неплохо, если своим скриптом вы поделились.

P.S. Когда прочел заголовок статьи, обрадовался, однако увидев «свистопляски» и возможные баги, снова разочаровался.
свистопляски заключаются в основном в настройке локального DNS-сервера для зоны loc. Для реального домена можно просто добавить A-запись для * и все.
Не совсем понял зачем все-таки в случае локальной машины поднимать bind и что-то настраивать в нем, когда записи в hosts более чем достаточно. Или этот модуль использует свой резолвер в обход системного?
Без настройки DNS придется прописывать в hosts каждый домен, так как он не понимает записи «127.0.0.1 *loc».
При таком раскладе согласен. Мне просто всегда хватало перечисления через пробел нужных имен. Если же тестим сайт, которому 100500 сабдоменов надо, то да — днс лучший выход.
Остается только вопрос — что за хрень в обратке написана и кой леший она вообще в данном случае? :)
Действительно, c обраткой я натупил. Уберу…
UFO just landed and posted this here
Выше поправляют, что в hosts такое не будет работать. Согласен. Я просто больше 2-3 сайтов никогда не гонял локально, так что мне необходимость вайлдкардов не понять :)
UFO just landed and posted this here
Гммм… Есть bind. Какой интерфейс к нему нужен? Не хочется править конфиги — есть webmin и еще куча тулзов для управления им.
UFO just landed and posted this here
А в винде иначе? Надо сначала днс сервер поставить, зону там завести, а потом записи добавлять. При том все там далеко не интуитивно понятно. По крайней мере я лазил в майкрософтовый днс 3-4 раза за всю жизнь и каждый раз плевался как идиотски все сделано. Нравится windows-way? Вперед. Никто не отговаривает.
UFO just landed and posted this here
Да, пользовательские задачи в винде решаются за один клик. Но стоит попытаться сделать что-нибудь более-менее сложное, то вся простота летит к чертям и приходиться рыть интернет в поисках нужных утилит и инструкций к ним.
UFO just landed and posted this here
Настройка веб-сервера не является простой пользовательской задачей.
UFO just landed and posted this here
Гммм… вижу противоречие:
пользователь<>разработчик
Пусть даже это вебразработчик :)
UFO just landed and posted this 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 just landed and posted this here
UFO just landed and posted this here
> — перезапуск nginx
> — перезапуск apache
Вот проблема, которую решает описанный подход
Юзеры, папки, базы и права всяко будут делаться скриптами и тут.
А graceful рестарт или HUP чем не устраивают? Первый — дождется пока дочерние процессы отдадут все юзерам, и постепенно заменяет их на новые процессы с новым конфигом. Второй — убъет всех детей и запустит новых с новым конфигом. В случае HUP время перезапуска значительно сокращается, т.к. родительский процесс продолжает работать, а в случае с graceful юзеры вообще ничего не заметят. У nginx тоже подобный фокус есть. Так что проблема высосана из пальца, т.е. ее тупо нет.
UFO just landed and posted this here
Не, я конечно понимаю, что у нас в стране обычай такой — сначала ковыряемся, а если что-то не пашет или не устраивает, то лезем мануал читать. Если действовать общепринятым способом, то перед тем как начинать работать с софтом хорошо бы просмотреть доку, ну хотя бы бегло. А по рестарту в доке апача отдельный раздел есть, где все расписано — по какому сигналу как себя ведет апач. Ну и команда service httpd, запущенная без параметров должна уже задавать направление поиска :)
UFO just landed and posted this here
Бубунтоиды они вообще не с той стороны в мир линукс приходят. Многие даже про консоль не знают, и при нажатии в их присутствии Ctrl+Alt+Fn делают квадратные глаза :)
У меня такой же скрипт есть — github.com/denisoid/simple-administration-scripts

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

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

UFO just landed and posted this here
Если у одного виртхоста habrahabr.com, а у другого habrahabr.ru, — имеем странное поведение (когда забываешь про %-2).
Не веселое решение. Да и ну его этот apache. Слишком разжирел он.
UFO just landed and posted this here
Все http поддерживают виртхосты.
Почти все http демоны поддерживают виртхосты.
Топы точно.
UFO just landed and posted this here
UFO just landed and posted this here
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
Я, как раз, и имел в виду необходимость использования DNS.
И никакие ISPmanager-ы не нужны, который техподдержка хостингов всучивает за деньги. Буквально 5 строчек дописать и все работает)
Есть же бесплатный virtualmin.
Хм
Server:Apache/2.4.7 (Ubuntu)
Не понимает директиву %1 — пытается обратиться не по параметру а прямо ищет подпапку "%1"
Попробуйте директиву

UseCanonicalName    Off

прямо перед VirtualDocumentRoot.
Ах да, она же присутствует в конфиге… В таком случае, не знаю, что и сказать.
Sign up to leave a comment.

Articles