Показать полную графическую версию : [решено] Не могу настроить виртуальные хосты
Здравствуйте!
Немного предыстории. Ставлю amp на windows, прописываю виртуальные хосты, все прекрасно. На ubuntu все ок! и на Debian отлично! Ставлю freeBSD и алес капут махэн! Скачиваю килотонны скринкастов, хенд буков и книг, все пишу по инструкции, но один хрен. Ставлю denwer, lamp, xamp смотрю настройки хостов слизываю конфиги - один хрен!
Все действия произвожу на VirtualBox установленной под Windows 7. FreeBSD 9.0
На виртуалку проброшены порты.
Сейчас у меня все настройки "коробочные" ничего не менял кардинально.
Суть проблемы: если я ставлю один виртуальный хост, то создается впечатление, что все нормально (все маны описывают создание одного хоста, мол остальные нужно делать по аналогии). Когда я дописываю второй, то тут начинается трабл:
httpd-vhost.conf
NameVirtualHost *:80
#
# этот хост предложил прописать знакомый, как вариант, сам он плохо знаком.
#
<VirtualHost *:80>
ServerAdmin localhost@mail.ru
DocumentRoot '/usr/local/www/apache22/data'
ServerName localhost
ErrorLog '/var/log/http/localhost-error_log'
CustomLog '/var/log/http/localhost-access_log' common
</VirtualHost>
#
# это стандартный хост, я просто поменял имена и создал не достающие файлы и папки
#
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/docs/clickcounter"
ServerName clickcounter
ServerAlias www.clickounter.com
ErrorLog "/var/log/http/clickounter-error_log"
#
# Еще один стандартный, но отредактированный example
#
<VirtualHost *:80>
ServerAdmin myblog
DocumentRoot "/usr/local/docs/myblog"
ServerName myblog
ErrorLog "/var/log/http/myblog-error_log"
CustomLog "/var/log/http/myblog-access_log" common
</VirtualHost>
Пишу 192.168.137.11 открывается первый хост /usr/local/www/apache22/data, тот что предложил создать знакомый, т.е. localhost, не думаю, что это правильно, но даже не в этом суть.
По этому адресу лежит index.html созданный апачем при установке It works!, ну в общем то на данном этапе It Works!
Пишу 192.168.137.11/myblog - вижу 404 Not Found. The requested URL /myblog was not found on this server.
Смотрю логи, которые обновились только в /var/log/http/localhost-error_log
[Wed May 02 15:25:34 2012] [error] [client 10.0.2.2] File does not exist: /usr/local/www/apache22/data/myblog
Почему то настройки DocumentRoot для каждого отдельного хоста игнорируются, за основной считается тот, который указан в первом хосте, если я удалю, тот что предложил знакомый, то пропишеться (следующий) этот лог: /var/log/http/clickounter-error_log, где будет написано, что тут usr/local/docs/clickcounter/myblog нет ничего такого.
Если я пропишу, за ранее удалив вариант предложенный знакомым, 192.168.137.11/clickcounter, то в его логе будет ошибка, что файл not exist usr/local/docs/clickcounter/clickcounter.
Что я сделал неделю назад. Удалил нафиг все докруты, кроме первого хоста, в первом хосте указал общую директорию "usr/local/docs" и вроде все нормально, но целую неделю я не мог нормально уснуть, чует мое сердце, что это костыль. Во всех манах докрут может быть любой, а у меня как обычно... Да ладно бы в другой среде был тот же косяк, а то только во фряхе. В винде докруты ведут на проекы netbeans и ничего. У меня больше нет вариантов, все что мог перепробовал, нужен совет знающего человека.
За ранее спасибо.
VictorSh
02-05-2012, 17:11
один хрен! »
очень информативно!
На виртуалку проброшены порты. »
То есть она за NATом реальной машины?
Код: »
нет закрывающего тега у второго хоста clickcounter</VirtualHost>
Пишу 192.168.137.11/myblog - вижу 404 Not Found. The requested URL /myblog was not found on this server. »
Правильно, потому что у вас 192.168.137.11 указывает на первый хост. Чтобы попасть на второй, надо писать clickcounter/myblog, тогда этот параметр передастся серверу httpd и он уже его "разрешит" в правильную папку в /usr/local/docs/clickcounter/index.html. А сейчас у вас он ищет в папке /usr/local/www/apache22/data/myblog, то есть корень первого сайта+папка myblog, а там нет файла index.html
еще пропишите на винде в файле %windir%/system32/drivers/etc/hosts (потребуется админский доступ)
строки
192.168.137.11 localhost clickcounter myblog
и сохраните файл, или поднимите DNS на freebsd и правильно его настройте. ИМХО, первое проще.
Теперь, чтобы обратиться к первому хосту в браузере надо набирать localhost, тогда апач будет искать документ /usr/local/www/apache22/data/index.html
для второго надо набирать clickcounter, тогда апач будет искать документ /usr/local/docs/clickcounter/index.html
и так далее.
Пишу и пробую рецепт.
DNS поднимать будем, главное чтобы оно нужно было. Поставил на VirtualBox, чтобы разобраться, спасибо, что помогаете в этом.
Как копипастить из дефолтного редактора mc не знаю, а при копировании из "ee" потерялся </VirtualHost>, но он был :)
192.168.137.11/example, по этому пути я ожидаю директорию documentRoot/example и 192.168.137.11/otherExample = etcDocumentRoot/otherExample
Немного попробовал, не получилось. Чищу логи, пишу что получается.
Все таки пишу в hosts windows
192.168.137.11 freebsd clickcounter myblog (localhost используется виндовым сервером)
Чищу httpd-vhosts.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/docs/clickcounter"
ServerName clickcounter
ServerAlias www.clickounter.com
ErrorLog "/var/log/http/clickounter-error_log"
</VirtualHost>
<VirtualHost *:80>
ServerAdmin myblog
DocumentRoot "/usr/local/docs/myblog"
ServerName myblog
ErrorLog "/var/log/http/myblog-error_log"
CustomLog "/var/log/http/myblog-access_log" common
</VirtualHost>
Пишу http://freebsd/ - 403 Forbidden
Лог прописался для clickcounter, путь до clickcounter верный (как вы и говорите). Не логично, http://freebsd/ должно привести в /usr/local/www/apache22/data, как указано в httpd.conf, ни чего не понимаю. Путь в clickounter-error_log прописался /usr/local/docs/clickcounter/, может для хоста нужно прописать <Directory> Allow from all, чтобы пропустил, но не отвлекаюсь от задачи.
Пишу http://freebsd/clickcounter/ - та же песня, что и 192.168.137.11/clickcounter/, оно и понятно. 403, путь /usr/local/docs/clickcounter/clickcounter
Пишу (питаюсь попасть на второй хост) http://freebsd/clickcounter/myblog, не надеясь на чудо смотрю лог clickcounter. 403, путь /usr/local/docs/clickcounter/clickcounter
пишу http://freebsd/myblog/myblog, 403, в clickounter-error_log - /usr/local/docs/clickcounter/myblog
То есть она за NATом реальной машины? Да, получается так. Проброс 192.168.137.11:80 > 10.0.2.15:80
И я не пойму, почему первый хост это localhost, как бы аргумент по умолчанию, у дополнительного хоста должны быть такие же права как и у любого подключенного, какая разница первый он или 25ый. В httpd.conf же прописан первый, который ведет в папку data, как оно есть при инсталляции. На сколько мне известно, нужно лишь добавить include для вирт. хостов, ну и я добавил ServerName localhost, т.к. иначе выдает ошибку, что тоже встречается в манах. Остальные действия с вирт. хостами проводятся отдельно от основного конфига.
Размышления.
Если у меня сервер на локалке, я просто пишу localhost/example (конечно зависит от настроек) и попадаю в докрут example, если я помещу локальный сервер на виртуалку, то нужно будет обращаться 192.168.137.11/localhost/example, что вполне устраивает, но не получается. Чтобы прописывать просто 192.168.137.11/example, нужно править hosts (127.0.0.1 192.168.137.11) на виртуалке, я его не трогал. Может и не так все это... В голове каша полная.
Все переиначил
Listen 127.0.0.1:80
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/docs/clickcounter"
ServerName clickcounter
ServerAlias www.clickounter.com
ErrorLog "/var/log/http/clickounter-error_log"
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerAdmin myblog
DocumentRoot "/usr/local/docs/myblog"
ServerName myblog
ErrorLog "/var/log/http/myblog-error_log"
CustomLog "/var/log/http/myblog-access_log" common
</VirtualHost>
Теперь все начинает искать в /usr/local/www/apache22/data из докрута в httpd.conf
как не крути http://192.168.137.11/clickcounter или http://192.168.137.11/clickcounter/clickcounter
или http://192.168.137.11/localhost/clickcounter при этом сервер принимает первый аргумент http://192.168.137.11/localhost/clickcounter = /usr/local/www/apache22/data/localhost/ вместо clickcounter, можно написать helloworld, роли не играет.
Дополнительно закоментил httpd.conf строки DocumentRoot и секцию Directory для /usr/local/www/apache22/data
Теперь ищет в /usr/local/htdocs, ни в http.conf ни в virtual.host, этот путь не указывается, в основной лог(httpd-error.conf) при этом пишется, Что доступ запрещен в /usr/local/htdocs
В httpd.conf закомментировал listen и serverRoot. Пишу http://192.168.137.11 - вижу It works, пишу http://192.168.137.11/clickcounter - вижу "Соединение было сброшено", так с любым путем, отличным от http://192.168.137.11, в hosts прописывал. Все известные мне логи не пишутся.
Кстати упустил информацию: установлен только апач22, на голую систему. В каждом докруте лежит один index.html.
VictorSh
03-05-2012, 01:49
DNS поднимать будем, главное чтобы оно нужно было. »
Если сервер будет работать в локальной сети, а не только на виртуалке и не в демонстрационных целях, то нужно поднимать DNS.
Как копипастить из дефолтного редактора mc не знаю, а при копировании из "ee" потерялся </VirtualHost>, но он был »
Можно через putty выделить нужный текст и нажать Ctrl-C или так:
cat file >/usr/home/name_of_user/conf.txt, а потом забрать по WinSCP файл в Windows
192.168.137.11/example, по этому пути я ожидаю директорию documentRoot/example и 192.168.137.11/otherExample = etcDocumentRoot/otherExample »
Совсем неправильно!
Чтобы получить доступ к первому сайту надо писать его имя (у вас же виртуальный хостинг), а как сервер будет отличать их по-вашему, если у них одинаковые ip?
поэтому делаем так. чтобы получить доступ к первому пишем его имя в браузере, то есть судя из конфига их поста 3,
надо писать не freebsd и не freebsd/clickcounter, а то что написано в ServerName, а именно clickcounter.
В этом случае вы попадете в нужную папку. Хоста freebsd в посте 3 (httpd-vhosts.conf) у вас вообще не описано, поэтому и не получается ничего.
И я не пойму, почему первый хост это localhost, как бы аргумент по умолчанию, у дополнительного хоста должны быть такие же права как и у любого подключенного, какая разница первый он или 25ый. В httpd.conf же прописан первый, который ведет в папку data, как оно есть при инсталляции. На сколько мне известно, нужно лишь добавить include для вирт. хостов, ну и я добавил ServerName localhost, т.к. иначе выдает ошибку, что тоже встречается в манах. Остальные действия с вирт. хостами проводятся отдельно от основного конфига. »
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "path"
То есть, по умолчанию все запросы идут в эту папку, но можно использовать символические ссылки и алиасы.
Права здесь не причем, просто вы неправильно обращаетесь к сайту. Все виртуальные хосты желательно прописывать в отдельном файле, чтобы не портить основной конфиг апача :) а в самом httpd.conf написать, что-то типа
Include conf/vhosts.conf
Если у меня сервер на локалке, я просто пишу localhost/example (конечно зависит от настроек) и попадаю в докрут example »
вы попадаете в докрут localhost, а не example. А в докруте localhost уже должна быть папка example с файлом index.html - вот она и откроется по этому вызову, если конечно вы пропишете в виртуальных хостах апача localhost и localhost будет разрешаться в айпишник сервера. Кстати при вашей организации сайта (доступ с Windows на вирт. маш. с FreeBSD) localhost для имени сервера является плохой идеей, так как у винды свой локалхост, и когда вы будете набирать в винде localhost, то будете попадать не на сервер, а на ту же винду, где по идее должен быть установлен apache с сайтом.
NameVirtualHost 127.0.0.1:80 »
В этом случае, у вас сайт будет доступен только, если вы обращаетесь к нему с самого сервера.
Теперь все начинает искать в /usr/local/www/apache22/data из докрута в httpd.conf »
Ну правильно! потому что вы обращаетесь с Windows, айпишник сервера разрешается в 192.168.137.11, а такого виртуального хоста нет в файле (у вас прописаны только 127.0.0.1 )! поэтому запросы идут в папку по умолчанию.
написать helloworld, роли не играет »
как раз по причине, что обращается он все равно к папке по умолчанию, так как такого виртуального хоста нет.
Дополнительно закоментил httpd.conf строки DocumentRoot и секцию Directory для /usr/local/www/apache22/data
Теперь ищет в /usr/local/htdocs, ни в http.conf ни в virtual.host, этот путь не указывается, в основной лог(httpd-error.conf) при этом пишется, Что доступ запрещен в /usr/local/htdocs »
Кажется, вы не курили тему про виртуальные хосты :) можно здесь посмотреть http://www.opennet.ru/base/net/virtual_ftp_http.txt.html
Ваша проблема в том, что вы неправильно обращаетесь к сайтам. Вам надо обращаться по имени ServerName.
Спасибо!
Я через putty копировал, только ctrl+c давнуть не догадался :)
Чтобы получить доступ к первому сайту надо писать его имя
У меня ServerName совпадает с именем папки, хотя изначально для ясности я папку писал с буквой в другом регистре.
Все виртуальные хосты желательно прописывать в отдельном файле
Сперва по привычке создал available и enable, потом понял, что дело труба, стал мучить extra/httpd-vhost.conf, как вы и предлагаете.
просто вы неправильно обращаетесь к сайту
100%, не могу понять как :)
Кажется, вы не курили тему про виртуальные хосты
Видимо я настолько глуп, что курил, как не курил....
можно здесь посмотреть http://www.opennet.ru/base/net/virtu..._http.txt.html
Отличная статья, спасибо. Там написано:
Обратите внимание на то, что адреса www.dhsilabs.com и lib.dhsilabs.com должны быть прописаны в DNS
Т.е. нужно прописать в hosts мои ServerName? Дааа, представляю как вам не просто....
Вернул все на место (*:80), привел httpd.conf к изначальному виду. Теперь когда я прописываю 192.168.137.11, открывается index.html папки clickcounter, все остальное пытается найтись в DocumentRoot clicounter.
Хоста freebsd в посте 3 (httpd-vhosts.conf) у вас вообще не описано, поэтому и не получается ничего.
Как я понял тут собака зарыта. Из виндового hosts убрал freebsd, Каспер не дает его изменить, а если его отключить изменения применяются пока Каспер не включтся, видимо потом он подгружает резервную копию hosts. В итоге умная мозила перекидывает меня на freebsd.org.
Раз хоста freebsd не прописано, прописываю хосты 192.168.137.11
(вдруг перестало копироваться из putty, короче нужно кружева вязать, а не хосты настраивать :)
# httpd-vhosts.conf
NameVirtualHost 192.168.137.11:80
<VirtualHost 192.168.137.11:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/usr/local/docs/clickcounter"
ServerName clickcounter.com
ServerAlias www.clickounter.com
ErrorLog "/var/log/http/clickounter-error_log"
CustomLog "/var/log/http/clickcounter-access_log" common
<Directory "/usr/local/docs/clickcounter/">
Order allow,deny
Allow from All
</Directory>
</VirtualHost>
<VirtualHost 192.168.137.11:80>
ServerAdmin myblog
DocumentRoot "/usr/local/docs/myblog"
ServerName myblog.org
ErrorLog "/var/log/http/myblog-error_log"
CustomLog "/var/log/http/myblog-access_log" common
</VirtualHost>
# httpd.conf
ServerRoot "/usr/local"
Listen *:80
ServerAdmin you@example.com
ServerName localhost
DocumentRoot "/usr/local/www/apache22/data"
<Directory "/usr/local/www/apache22/data">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf
# Остальное по дефолту
Пишу 192.168.137.11 - открывает папку "data" из httpd.conf.
Пишу 192.168.137.11/myblog.org - ищет папку "myblog.org" в папке "data".
Думаю, у меня же проброс и фактически 192.168.137.11 означает 10.0.2.15, переписал все на 10.0.2.15, все уперлось в докрут clickcounter.
Остается только hosts ковырять, я хоть и пишу эти строки, но уже давно разбился об стенку :)
Можно через putty выделить нужный текст и нажать Ctrl-C или так:
cat file >/usr/home/name_of_user/conf.txt, а потом забрать по WinSCP файл в Windows »
Ctrl+Insert - копировать
Shift+Insert - вставить
Как говорится [Solved].
Как я и догадывался, все элементарно и ничего городить не нужно.
Решение было сказано VictorSh особенно в пятом посте, оставалось только понять его :)
Итак, сервер не понимает, что я от него хочу. Как описано в отличной статье (http://www.opennet.ru/base/net/virtual_ftp_http.txt.html) и разделе Виртуальные сервера с идентификацией по имени. Вот оно! Имя хоста и ip - две стороны одной медали. Обратится к виртуальному хосту, исключительно по имени не удастся, ip`шник все рано будет присутствовать, если не в адресной строке, то где? Видимо нужно действительно поднимать DNS и сопоставлять ip с именами хостов, думаю с использованием регулярных выражений или как-то еще. Может есть какой-то модуль для apache.
Но мне помогла запись в hosts windows:
192.168.137.11 myblog
И все! Получаю Forbidden, прописываю Allow from all, для конкретного хоста, как это и предполагалось. Можно (мало ли кому то пригодится), прописать <Directory> "глобально", на всю папку с сайтами, чтобы не разрешать каждый отдельно, но мне в исследовательских целях удобней так.
Теперь все (вроде как, тфю-тфю-тфю) работает. Когда я настроил хосты таким образом, что получал не содержимое хоста, а подпапки, я тоже возликовал, а оказалось все еще впереди. Хотя сейчас сомнений нет, все встало на свои места.
Теперь вопрос как это сделать без правки hosts виндовса, но это уже отдельная тема.
Всем спасибо!
VictorSh
03-05-2012, 12:41
Поздравляю с победой! :)
на форуме есть кнопка спасибо для этих целей :) И тему отметьте решенной.
Теперь вопрос как это сделать без правки hosts виндовса, но это уже отдельная тема. »
оч. просто. вам надо поднять BIND на FreeBSD. прописать файлы зон. В инете много статей на эту тему. Взять тот же opennet.ru или www.lissyara.su
если не в адресной строке, то где? »
точно не знаю, но либо в заголовках HTTP запроса вашего браузера, либо в TCP/IP пакете.
Видимо нужно действительно поднимать DNS и сопоставлять ip с именами хостов, думаю с использованием регулярных выражений или как-то еще »
Да нет, обычное сопоставление IP адресов и названий сайтов с помощью A записей в DNS. Остальное apache сделает сам с помощью настроек виртуальных хостов.
Из виндового hosts убрал freebsd, Каспер не дает его изменить, а если его отключить изменения применяются пока Каспер не включтся, видимо потом он подгружает резервную копию hosts »
Какие-то странности. Вы под админом меняете файл и он доступен для записи?
В каспере разрешите доступ к сайту с 192.168.137.11
Т.е. нужно прописать в hosts мои ServerName? Дааа, представляю как вам не просто.... »
да
Короче мужики, у меня что не проблема, то bug report.
Сделал reboot. Все демоны стартанули. Открываю сайт щизыз: "Соединение сброшено". Ну вот думаю, опять... где мой бубен??
----
Спустя час.
----
Все отвалилось нафиг. Настроил ftp, впервые появился баг. Подключится смог только через filezilla, который почему-то стал портить файлы. Достал старый добрый CuteFTP, стряхнул с него пыль, то же пол часа файлы закидывал, загрузка идет в момент, но один случайный файл пол часа висит на нуле, потом таки закачивается, на нем - то и вылетает ошибка, при запуске скрипта. CuteFTP повел себя так же, только скрипт работает без ошибок. Скачал night версию filezilla, думаю не в этом дело.
---
Все, теперь соединение сброшено и хоть ты тресни. По ftp коннектиться перестало, myblog перекидывает на сайт в паутине. Все встало в точку отправления. 192.168.137.11 - Соединение сброшено, http://myblog - redirect to www.myblog.org.
Час назад (писал вчера) перестали писаться логи. Больше к серверу достучаться не удалось.
---
Решение. Нужно пересохранить httpd.conf, просто открыть поставить-удалить пробел, сохранить, apache -k restart и все работает. Простой перезапуск апача не помогает. Когда выдает "Соединение сброшено (ФФ)" логи не пишутся.
Ставлю vmware.
Видимо свой вклад внес VirtualBox, у меня вообще апач вставать не хотел, на wget завершалась работа виртуалки, после обновления (Vbox) апач таки встал, но теперь другие косяки. Винты нулевые в RAID`e (0), поверхность хорошая, ошибок нет.
Вот такие пироги.
В итоге решение было в поднятии DNS. FreeBSD тут не причем, у меня был подход разный. Теперь точно решено.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC