Online video hd

Смотреть крупно видео

Официальный сайт welinux 24/7/365

Смотреть видео бесплатно

23.11.10 14:45 m0Ray

How-to`sHTTP-сервер: виртуальные хосты быстро и просто

Преимущества описываемого решения


1) Нет необходимости менять конфигурацию сервера при добавлении и удалении новых хостов.
2) Добавлять/удалять хосты можно "на лету", без перезапуска сервера.

Как это работает


При выполнении HTTP-запроса клиент передаёт серверу заголовок Host, содержащий имя хоста. Сервер ищет подкаталог с таким именем в указанном в конфиге каталоге. Если такой каталог существует, он принимается в качестве корневого. Если нет - в зависимости от настроек показывается хост по умолчанию или возвращается ошибка (например, 404).

Настройка для Apache


У этого индейца для наших целей есть амулет под названием mod_vhost_alias. Его надо навесить на апача. Как это делается, рассказывать не буду, способов множество в зависимости от вашего дистрибутива и версии краснокожего. Главное для нас то, что он добавляет в пространство имён конфигурационных директив две волшебные штучки: VirtualDocumentRoot и VirtualScriptAlias.

Для начала надо запретить апачу редирект на "каноническое имя" ServerName, иначе амулет не сработает.
UseCanonicalName Off


Простейшим случаем будет, например, такая настройка:
VirtualDocumentRoot /srv/www/vhosts/%0

Вместо %0 апач подставит пришедший ему HTTP-заголовок Host и будет искать корневые каталоги в /srv/www/vhosts.

Я обычно делаю так:
1
2
VirtualDocumentRoot /srv/www/vhosts/%0/htdocs
VirtualScriptAlias /srv/www/vhosts/%0/cgi-bin

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

Псевдонимы хостов (например, www.domain.tld для domain.tld) легко делать при помощи символических ссылок. Иногда после этого апачу требуется объяснять, что по ссылкам ходить всё-таки можно и это совсем не больно:
1
2
3
<Directory /srv/www/vhosts/>
 Options FollowSymLinks
</Directory>


Зачастую требуется назначить какие-то опции сразу всем виртуальным хостам. Это можно делать так:
1
2
3
<Directory /srv/www/vhosts/%0/htdocs>
 AllowOverride All
</Directory>

Тут мы разрешили переопределять любые настройки в файлах .htaccess, которые лежат в соответствующих каталогах виртуальных хостов.

Можно, конечно, использовать и более сложную структуру каталогов, чтобы не сваливать все хосты в одну кучу. Разделить по первым буквам, TLD, или вовсе выстроить их в дерево. Однако мне кажется, что если вам это понадобилось, вы наверняка владелец крупной хостинговой площадки и достаточно опытный админ, чтобы прочитать документацию.

Настройка для lighttpd


На моих серверах я обычно применяю именно этот http-сервер, так как он потрясающе лёгок и быстр. Из недостатков у него разве что отсутствие поддержки файлов .htaccess, но у него есть свои средства управления, с другим синтаксисом. С PHP он легко сращивается при помощи FastCGI, таким образом без проблем заменяя популярную связку Apache+nginx. Но мы сейчас не об этом.

У этого сервера есть аж целых три модуля для реализации разного рода виртуального хостинга, но мне лично всегда хватало одного: mod_simple_vhost. Это совсем просто:
1
2
3
4
5
var.vhosts_dir = "/srv/www/vhosts"
server.modules += ( "mod_simple_vhost" )
simple-vhost.server-root   = vhosts_dir + "/"
simple-vhost.document-root = "/"
simple-vhost.default-host  = "domain.tld"

В этом примере мы загрузили модуль [2], определили каталог, где нужно искать корневые каталоги хостов [1,3,4], и хост по умолчанию ([5], если запрошенного хоста не существует или, не приведи Аллах, заголовок Host не пришёл). Путь к нужному каталогу формируется так: server-root + Host + document-root.

Собственно, и всё с этим модулем. Ну а если понадобится что-то более навороченное - тут я вас опять отошлю к документации.



DEViANCE 23.11.10 15:12 # +4
Для полноты не хватает nginx.
xamster 23.11.10 15:16 # +0
http://wiki.enchtex.info/howto/gentoo/webserver#%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_nginx
xamster 23.11.10 15:16 # +0
Сорри, забыл про тег.
Настройка для nginx
DEViANCE 23.11.10 15:30 # +1
Лично мне оно ни к чему :) Я и так знаю, как настроить nginx. Это я писал автору, чтобы добавил в пост, мало ли кому-то пригодится. :)
m0Ray 23.11.10 22:29 # +0
Так, собственно, при использовании lighttpd nginx нафиг не нужен.
DEViANCE 23.11.10 23:31 # +0
Так, собственно, при использовании nginx на фиг не нужен lighttpd :)

Сам лично юзаю nginx + php-fpm.
DEViANCE 23.11.10 23:32 # +0
Забыл уточнить, что и в том, и в другом случае Апач тем более не нужен :)
bosha 24.11.10 00:02 # +0
Спорное утверждение. Недавно знакомые тесты различные проводили и оказалось что во многих случаях связка nginx+apache2 быстрее чем nginx+php-fpm.
m0Ray 24.11.10 00:07 # +0
Интересно было бы сравнить бенчмарки с аналогичными в лайти.
bosha 24.11.10 00:15 # +0
Ну, точных цифр я не помню, но помню что лайти смог обрабатывать только 37 запросов в секунду, против nginx+apache за 100 или даже 200 запросов в секунду. Помню что намного больше.В общем, всё это легко проверяется с помощью ab.
m0Ray 24.11.10 00:25 # +0
А настройки? FastCGI тоже бывает весьма узким местом.
bosha 24.11.10 09:58 # +0
Что настройки? Понятное дело что бывает. В том-то и дело что в апаче mod_php и даже с ним оказалось быстрее.
m0Ray 24.11.10 11:27 # +0
Ну mod_php вообще быстрее по определению. Одна беда - нормально работает только с prefork MPM, а это - память...
bosha 24.11.10 16:33 # +0
можно ограничить кол-во. prefork процессов примерно до двух(лучше подстроить под свои нужды). Я собственно так и сделал. На моей VDS'ке из 700Мб занято в редких случаях 400Мб, а там крутится далеко не один сайт ;)
bosha 24.11.10 16:34 # +0
Вообще советую на эту тему почитать у juev'а - juev.ru. Он не так давно довольно немало статей написал на тему оптимизации VPS'ки.
m0Ray 24.11.10 00:06 # +0
Это уже дело вкуса.
Просто у nginx я не увидел эффективных (то есть как минимум простых в развёртывани) способов связки с PHP/Ruby/etc... Мож я и тупой, конечно...
Ну а апач тяжёл, и это у него не отнять.
xT 23.11.10 22:40 # +-1
для полноты надо убрать apache : ) оставить nginx, php-fpm и varnish
m0Ray 24.11.10 00:19 # +-1
Апач популярен, а nginx, имхо, не очень функционален. Спаривать их иногда полезно для уменьшения использования оперативки сервера, но это всё равно полумеры.
Краснокожего себе можно позволить, если оперативка измеряется десятками гигабайт. В иных случаях, как мне кажется, лайти заменит и nginx, и индейца.
xT 24.11.10 18:12 # +2
Апач популярен, а nginx, имхо, не очень функционален.
хорошее сравнение : )
evg 23.11.10 15:19 # +0
Спасибо, только вчера с этим разобрался
immortalday 23.11.10 15:22 # +0
а выкинуть апач в chroot не? если не то почему? в случае его компрометации основная система таки не пострадает.
m0Ray 23.11.10 22:31 # +1
Я рассмотрел настройку только виртуального хостинга. Опишите настройку chroot jail в соответствующем посте, вам все карты в руки.
goblinyara 23.11.10 17:53 # +0
сразу извиняюсь за, быть может, глупый вопрос, но разве в апаче sites-available/sites-enable не для этого же?
immortalday 23.11.10 17:59 # +1
"в каталоге /etc/apache2/sites-available находятся файлы конфигурации хостов, а в /etc/apache2/sites-enabled находятся символические ссылки на файлы конфигурации /etc/apache2/sites-available, включенных хостов."
m0Ray 23.11.10 22:40 # +2
Я рассматривал конфигурацию апача вообще. То, что вы описываете, это уже какие-то заточки конкретного дистрибутива.
Я сам в openSuSE (которую использую в качеcтве основного инструмента) вижу подобные подходы к конфигурированию. Например, сервер в основном конфиге инклюдит файлы из подкаталога conf.d, а там каждый модуль описан отдельным файлом. Это нормально.
Здравомыслящий админ сделает из этого поста отдельный файлик в conf.d и сделает всё так, чтобы изменения были отключаемы. Ну а для девелоперской песочницы вообще неважно, где в конфиге это будет прописано.
Ну и наконец вот что: у вас там конфиги, которые для их применения требуют перезагрузки сервера. А описанное решение работает динамически во время непрерывной работы сервера.
xT 23.11.10 22:40 # +1
привет debian-like системы
Slimy 10.01.11 16:00 # +0
Вопрос такой как сделать хосты чтобы создавались при создании нового проекта? Т.е. ваш путь всеравно предполагает ползать в hosts как минимум. Это в общем даже не проблема конкретно сервера, но некоторые фреймфорки рнр не хотят нормально работать пока их в хост не запиахаешь, это так по мудацки неудобно для разработки что просто удивительно что нет решения нормального.
m0Ray 10.01.11 16:02 # +0
Не предполагает ни разу. Зачем вообще трогать hosts?
Slimy 10.01.11 19:14 # +-1
а как браузер попадет на нужный ip ?
m0Ray 10.01.11 19:32 # +1
А что, DNS уже отменили?
Slimy 10.01.11 20:02 # +0
Я имел виду для разработки. Поднимать для этого DNS сервер который всеравно надо настраивать в чем тогда +?
m0Ray 10.01.11 20:17 # +0
В любом случае новый хост надо создавать, и неважно, в hosts его вписывать или в конфиг DNS-сервера. Сейчас настолько стало просто настраивать DNS, что hosts, в общем-то, нафиг никому уже не нужен. Вон под openSuSE есть YaST - настраивает всё, хочешь с графики, хочешь через браузер, хочешь с консоли.
Есть и бесплатные DNS-службы, кстати - тот же DynDNS.

С такой настройкой HTTP-сервер сам подхватит любой хост, который будет на него показывать - только каталог под него создай. В стандартной поставке мало в каком дистрибутиве идёт такая настройка. С тем и писана сия статейка.

Если тебе вообще хочется одним тыком мышки сразу всё заводить - есть готовые решения, в том числе провайдерские. Parallels вон вроде неплохие штуки делает.

Опять же в openSuSE YaST умеет заводить виртуалхосты ручками. Но - явно, с персональной настройкой каждого хоста.

Здесь же - всё автоматом, по HTTP-заголовку Host.
Slimy 10.01.11 21:43 # +0
Да я не про хостинг вовсе.
m0Ray 10.01.11 21:47 # +0
А про что же?
xT 10.01.11 21:49 # +1
про рабочую станцию разработчика веб-приложений\сайтов\etc
m0Ray 10.01.11 21:56 # +-1
От большого хостинга оно отличается только масштабами. Принципиально это всё тот же LAMP/LLMP/LNMP/нужное_вставить.
А хост так или иначе придётся где-то создавать.

Вот я и не понимаю, а в чём проблема-то? Что не нравится в куче существующих решений, в том числе мышевозильных типа YaST?
xT 10.01.11 22:03 # +0
такси от авиакомпании тоже только масштабами отличается

а так я то с тобой согласен : )
xT 10.01.11 21:48 # +2
ну и в чем проблема?
создать зону .dev и всё с нее отправлять на локалхост
с этим запросто справится легенький dnsmasq
Slimy 10.01.11 22:09 # +0
Ну вот напишите по подробнее. А через hosts никак нельзя? чтобы все адресса кончающиеся на .loc или .dev отсылали на localhost? И еще такой вопрос переменные в конфиге поддерживаются? Например для путей было бы очень удобно и меньше вероятность ошибится особенно в случае перемещения каталогов. Что бы быть верно понятым пример вместо
VirtualDocumentRoot /srv/www/vhosts/%0/htdocs
VirtualScriptAlias /srv/www/vhosts/%0/cgi-bin
чтото вроде
$root_dir=/srv/www/vhosts/
VirtualDocumentRoot $root_dir%0/htdocs
VirtualScriptAlias $root_dir/%0/cgi-bin
как то так можно?

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 155)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 3141 из 232 городов)
            Топ пользователей Топ блогов
            В сети: nvbn, doraneko, shidoh, bjaka_max

            Новенькие: corner, D, limmenz, Roman, Dimon2011
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн