Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по FreeBSD (http://forum.oszone.net/forumdisplay.php?f=10)
-   -   [решено] Не могу настроить виртуальные хосты (http://forum.oszone.net/showthread.php?t=233890)

Skit25 02-05-2012 11:43 1909111

Не могу настроить виртуальные хосты
 
Здравствуйте!
Немного предыстории. Ставлю 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 1909279

Цитата:

Цитата Skit25
один хрен! »

очень информативно!

Цитата:

Цитата Skit25
На виртуалку проброшены порты. »

То есть она за NATом реальной машины?

Цитата:

Цитата Skit25
Код: »

нет закрывающего тега у второго хоста clickcounter</VirtualHost>

Цитата:

Цитата Skit25
Пишу 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

и так далее.

Skit25 02-05-2012 19:35 1909350

Пишу и пробую рецепт.
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) на виртуалке, я его не трогал. Может и не так все это... В голове каша полная.

Skit25 02-05-2012 21:11 1909415

Все переиначил
Код:

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 1909569

Цитата:

Цитата Skit25
DNS поднимать будем, главное чтобы оно нужно было. »

Если сервер будет работать в локальной сети, а не только на виртуалке и не в демонстрационных целях, то нужно поднимать DNS.

Цитата:

Цитата Skit25
Как копипастить из дефолтного редактора mc не знаю, а при копировании из "ee" потерялся </VirtualHost>, но он был »

Можно через putty выделить нужный текст и нажать Ctrl-C или так:
cat file >/usr/home/name_of_user/conf.txt, а потом забрать по WinSCP файл в Windows

Цитата:

Цитата Skit25
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) у вас вообще не описано, поэтому и не получается ничего.

Цитата:

Цитата Skit25
И я не пойму, почему первый хост это 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
Цитата:

Цитата Skit25
Если у меня сервер на локалке, я просто пишу localhost/example (конечно зависит от настроек) и попадаю в докрут example »

вы попадаете в докрут localhost, а не example. А в докруте localhost уже должна быть папка example с файлом index.html - вот она и откроется по этому вызову, если конечно вы пропишете в виртуальных хостах апача localhost и localhost будет разрешаться в айпишник сервера. Кстати при вашей организации сайта (доступ с Windows на вирт. маш. с FreeBSD) localhost для имени сервера является плохой идеей, так как у винды свой локалхост, и когда вы будете набирать в винде localhost, то будете попадать не на сервер, а на ту же винду, где по идее должен быть установлен apache с сайтом.

Цитата:

Цитата Skit25
NameVirtualHost 127.0.0.1:80 »

В этом случае, у вас сайт будет доступен только, если вы обращаетесь к нему с самого сервера.

Цитата:

Цитата Skit25
Теперь все начинает искать в /usr/local/www/apache22/data из докрута в httpd.conf »

Ну правильно! потому что вы обращаетесь с Windows, айпишник сервера разрешается в 192.168.137.11, а такого виртуального хоста нет в файле (у вас прописаны только 127.0.0.1 )! поэтому запросы идут в папку по умолчанию.

Цитата:

Цитата Skit25
написать helloworld, роли не играет »

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

Цитата:

Цитата Skit25
Дополнительно закоментил 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/virtu..._http.txt.html

Ваша проблема в том, что вы неправильно обращаетесь к сайтам. Вам надо обращаться по имени ServerName.

Skit25 03-05-2012 08:07 1909614

Спасибо!
Я через 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 ковырять, я хоть и пишу эти строки, но уже давно разбился об стенку :)

leonty 03-05-2012 08:51 1909627

Цитата:

Цитата VictorSh
Можно через putty выделить нужный текст и нажать Ctrl-C или так:
cat file >/usr/home/name_of_user/conf.txt, а потом забрать по WinSCP файл в Windows »

Ctrl+Insert - копировать
Shift+Insert - вставить

Skit25 03-05-2012 11:31 1909697

Как говорится [Solved].

Как я и догадывался, все элементарно и ничего городить не нужно.
Решение было сказано VictorSh особенно в пятом посте, оставалось только понять его :)

Итак, сервер не понимает, что я от него хочу. Как описано в отличной статье и разделе Виртуальные сервера с идентификацией по имени. Вот оно! Имя хоста и ip - две стороны одной медали. Обратится к виртуальному хосту, исключительно по имени не удастся, ip`шник все рано будет присутствовать, если не в адресной строке, то где? Видимо нужно действительно поднимать DNS и сопоставлять ip с именами хостов, думаю с использованием регулярных выражений или как-то еще. Может есть какой-то модуль для apache.

Но мне помогла запись в hosts windows:
Код:

192.168.137.11 myblog
И все! Получаю Forbidden, прописываю Allow from all, для конкретного хоста, как это и предполагалось. Можно (мало ли кому то пригодится), прописать <Directory> "глобально", на всю папку с сайтами, чтобы не разрешать каждый отдельно, но мне в исследовательских целях удобней так.
Теперь все (вроде как, тфю-тфю-тфю) работает. Когда я настроил хосты таким образом, что получал не содержимое хоста, а подпапки, я тоже возликовал, а оказалось все еще впереди. Хотя сейчас сомнений нет, все встало на свои места.
Теперь вопрос как это сделать без правки hosts виндовса, но это уже отдельная тема.

Всем спасибо!

VictorSh 03-05-2012 12:41 1909748

Поздравляю с победой! :)
на форуме есть кнопка спасибо для этих целей :) И тему отметьте решенной.

Цитата:

Цитата Skit25
Теперь вопрос как это сделать без правки hosts виндовса, но это уже отдельная тема. »

оч. просто. вам надо поднять BIND на FreeBSD. прописать файлы зон. В инете много статей на эту тему. Взять тот же opennet.ru или www.lissyara.su

Цитата:

Цитата Skit25
если не в адресной строке, то где? »

точно не знаю, но либо в заголовках HTTP запроса вашего браузера, либо в TCP/IP пакете.

Цитата:

Цитата Skit25
Видимо нужно действительно поднимать DNS и сопоставлять ip с именами хостов, думаю с использованием регулярных выражений или как-то еще »

Да нет, обычное сопоставление IP адресов и названий сайтов с помощью A записей в DNS. Остальное apache сделает сам с помощью настроек виртуальных хостов.

Цитата:

Цитата Skit25
Из виндового hosts убрал freebsd, Каспер не дает его изменить, а если его отключить изменения применяются пока Каспер не включтся, видимо потом он подгружает резервную копию hosts »

Какие-то странности. Вы под админом меняете файл и он доступен для записи?
В каспере разрешите доступ к сайту с 192.168.137.11

Цитата:

Цитата Skit25
Т.е. нужно прописать в hosts мои ServerName? Дааа, представляю как вам не просто.... »

да

Skit25 04-05-2012 12:58 1910396

Короче мужики, у меня что не проблема, то 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), поверхность хорошая, ошибок нет.

Вот такие пироги.

Skit25 12-10-2016 11:00 2677291

В итоге решение было в поднятии DNS. FreeBSD тут не причем, у меня был подход разный. Теперь точно решено.


Время: 21:53.

Время: 21:53.
© OSzone.net 2001-