Доброго времени суток. Прошу помочь с субдоменом. имеется локальный сервер в сети. IP 192.168.1.5 из сети открывается по http://server.lan, локалная папка /var/www/server.lan, в этой папке ещё одна директория /var/www/server.lan/test. Хочу создать субдомен, тоесть из сетки вход по http://test.server.lan. в конфиге апача прописываю:<VirtualHost *:80>
ServerAdmin webmaster@localhostDocumentRoot /var/www/server.lan
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/server.lan/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warnCustomLog /var/log/apache2/access.log combined
Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>
</VirtualHost>
<VirtualHost *:80>
# имя субдомена.сам урл
ServerName test.server.lan
# папка сайта для этого субдомена
DocumentRoot /var/www/server.lan/test
</VirtualHost>
но почемуто при попытке зайти по http://test.server.lan в браузере ощибка "Невозможно найти удалённый сервер", хотя по http://server.lan всё в порядке, и немогу понять в чём же проблема. Буду благодарен за любую помощь...
Апач это http сервер а на DNS сервер. DNS сервер называется bind (например. есть куча других)Апачь не умеет резолвить dns имена.
Настройте DNS.
Ну и использование для доменов 3-х,4-х,n-х уровней вложенных директорий- глупая и порочная идея.
PS. разрешение DNS имени в ip происходит на dns-сервере по запросу с компьютера клиента а не на http-сервере. http-сервер в этом процессе не участвует никоим образом.
Клиент должен сперва получить от dns-сервера разрешение доменного имени в ip адрес, и только тогда он постучится к апачу.. а апачь, получив запрос, посмотрит к какому доменному имени обращается клиент в запросе, и примет решение о отдаче соответствующей странички.В качестве домашнего занятия для прочистки мозгов можете ввести в командной строке:
ping server.lan
а потом
ping test.server.lanВ первом случае вам покажет пинг, а во втором случае - ничего не покажет (если все это происходит под никсами, или покажет что запрос неудачен если под виндовс).
Сообразительный человек сразу поймет, что настройки апача к проблеме не имеют никакого отношения, поскольку у него не настроен dns-сервер на резолвинг имени test.server.lan
а только лишь на доменное имя server.lanЕсли настроить dns сервер нет возможности - то выходом может послужить создание соответствующей записи в файле hosts на компьютере клиента
> Апач это http сервер а на DNS сервер. DNS сервер называется bind
> (например. есть куча других)
> Апачь не умеет резолвить dns имена.
> Настройте DNS.
> Ну и использование для доменов 3-х,4-х,n-х уровней вложенных директорий- глупая и порочная
> идея.вот настройки DNS файл named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
include "/etc/bind/myzones.conf";файл myzones.conf
zone "server.lan" {
type master;
file "/etc/bind/server.lan";
};файл server.lan
$ORIGIN server.lan.
$TTL 86400 ; 1 day
@ IN SOA localhost. root.localhost. (
2010112502 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS localhost.
@ IN A 192.168.1.5
test IN NS ns1.test.server.lan
test IN NS ns2.test.server.lan
ns1.test CNAME ns1.192.168.1.5
ns2.test CNAME ns2.192.168.1.5
test.server.lan IN A 192.168.1.5
www IN CNAME server.lan.
>Ну и использование для доменов 3-х,4-х,n-х уровней вложенных директорий- глупая и порочная идея.в поисках по инету, пока ничего лучще не нашёл.
есть автоматическое создание субдоменов но и оно не сработало.
> test.server.lan IN A 192.168.1.5Эту строку заменить на
test IN A 192.168.1.5
>> test.server.lan IN A 192.168.1.5
> Эту строку заменить на
> test IN A 192.168.1.5заменил и перезапустил bind но всё равно получаю:
ping: unknown host test.server.lan
>>> test.server.lan IN A 192.168.1.5
>> Эту строку заменить на
>> test IN A 192.168.1.5
> заменил и перезапустил bind но всё равно получаю:
> ping: unknown host test.server.lanмда...
сократите ваш конфиг вот до такого вида:
@ NS 192.168.1.5
@ A 192.168.1.5
test A 192.168.1.5
www CNAME server.lan.
Всё заработало. :) Спасибо огромное за помошь.Но у меня возник новый вопрос, если к примеру мне понадобиться добавить новый субдомен, то мне вновь придётся вводить в изменения в файлы апача и бинда? Как же можно всё таки заставить создаваться субдомены автоматически? Ещё Раз огромное сапасибо за помошь.
> Всё заработало. :) Спасибо огромное за помошь.
> Но у меня возник новый вопрос, если к примеру мне понадобиться добавить
> новый субдомен, то мне вновь придётся вводить в изменения в файлы
> апача и бинда? Как же можно всё таки заставить создаваться субдомены
> автоматически? Ещё Раз огромное сапасибо за помошь.субдомены апача и субдомены доменных имен это разные субдомены
для бинда это делается так:
добавить в конфиг бинда строку со звездочкой
* A 192.168.1.5тогда любые домены выше уровня зоны (3,4,n-ные от server.lan) будут отсылаться на 192.168.1.5
субдомены апача - это НЕ РАЗНЫЕ сайты, это всего лишь алиасы одного и того же домена
рекомендуется делать это так (убедитесь, что модуль mod_rewrite подключен.):
====
<VirtualHost *:80>
DocumentRoot /var/www/example.com
ServerName example.com
...
ServerAlias *.example.com
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.example.com$
RewriteCond %{HTTP_HOST} ^((.*)\.)example.com$
RewriteRule ^/(.*) /%2/$1
</VirtualHost>
===
Смысл этой конструкции в том, что при обращении по произвольному имени поддомена клиенту будет отдан основной (или любой иной, но только один и тот же, прописанный в конфиге) сайт. Зачем это делается.. ну например у вас настроен сервер на server.lan, а клиент ошибся в запросе и почемуто решил что нужно идти по ссылке grendserver.www.server.lan и благодаря этой секции он будет автоматически перенаправлен на основной сайт. и все в шоколаде...Но есть и иное понимание субдомена. Существует модуль к апачу, который занимается "массовым хостингом" он действительно создает множество разных сайтов. почитать что это такое и как с ним работаь можно в документации к апачу. ключевое слово - mod_vhost_alias или тут вот например:
http://www.softtime.ru/info/apache.php?id_article=103он позволяет отдавать клиенту разные странички из разных каталогов в зависимости от того к какому именно доменному имени обращается клиент.
>[оверквотинг удален]
> и почемуто решил что нужно идти по ссылке grendserver.www.server.lan и благодаря
> этой секции он будет автоматически перенаправлен на основной сайт. и все
> в шоколаде...
> Но есть и иное понимание субдомена. Существует модуль к апачу, который занимается
> "массовым хостингом" он действительно создает множество разных сайтов. почитать что это
> такое и как с ним работаь можно в документации к апачу.
> ключевое слово - mod_vhost_alias или тут вот например:
> http://www.softtime.ru/info/apache.php?id_article=103
> он позволяет отдавать клиенту разные странички из разных каталогов в зависимости от
> того к какому именно доменному имени обращается клиент.Спасибо за помошь. Завтра на работе попробую разобраться.
Автоматические субдоменқ не смог запустить, работает только в ручную. Спасибо за помошь. Теперь буду пқтаться поставить почту :)
>[оверквотинг удален]
> <VirtualHost *:80>
> DocumentRoot /var/www/example.com
> ServerName example.com
> ...
> ServerAlias *.example.com
> RewriteEngine On
> RewriteCond %{HTTP_HOST} !^www.example.com$
> RewriteCond %{HTTP_HOST} ^((.*)\.)example.com$
> RewriteRule ^/(.*) /%2/$1
> </VirtualHost>Вот тут написано как делать с помощью mod_rewrite поддомены:
http://www.4webmaster.ru/articles/164/
RewriteEngine on
RewriteCond %{HTTP_HOST} ^forum\.site\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/forum/$ [NC]
RewriteRule (.*) /forum/$1 [L]
Но я начал экспериментировать и пришёл к выводу, что вначале-то браузер обращается к DNS, а потом уж к http-серверу.
Допустим у меня есть сайт с доменом 2-го уровня. Если я просто напишу sub.mysite.ru, то мой запрос не дойдёт до http-сервера, так как DNS-сервер не знает о таком имени. Хотя, почему DNS-сервер не смотрит, что это mysite.ru и не шлёт мне ip этого имени? Ну, ладно... Надо DNS-сервер что-ли настраивать?
Если бы DNS-сервер отдавал бы один и тот же ip, принадлежащий mysite.ru, для любого субдомена mysite.ru, то вообщем-то mod_rewrite и не нужен, можно анализировать переменные окружения в php-scripte'е, как тут:
http://gugnin.livejournal.com/26205.html
echo getenv("SERVER_NAME");
Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня???
>Но я начал экспериментировать и пришёл к выводу, что вначале-то браузер обращается к DNS, а потом уж к http-серверу.Очевидно что это так.
>Хотя, почему DNS-сервер не смотрит, что это mysite.ru и не шлёт мне ip этого имени?
Потому что соответствие между доменом, поддоменом и их апишниками - никак между собой не связано. например домен второго уровня mysite.ru может иметь айпишник 172.20.1.1 а домен третьего уровня www.mysite.ru - айпишник 192.168.1.10 а user.www.mysite.ru - айпишник 192.168.133.250
>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
Больше читать.
>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
> Больше читать.Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то что делать-то?
Как ему это объяснить?
>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>> Больше читать.
> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
> что делать-то?
> Как ему это объяснить?Добавить в конфиг строку для этого хоста?
>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>> Больше читать.
>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>> что делать-то?
>> Как ему это объяснить?
> Добавить в конфиг строку для этого хоста?У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
Короче, в этой ситуации никак.
>>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>>> Больше читать.
>>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>>> что делать-то?
>>> Как ему это объяснить?
>> Добавить в конфиг строку для этого хоста?
> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
> Короче, в этой ситуации никак.Завести собственный домен.
>>>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>>>> Больше читать.
>>>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>>>> что делать-то?
>>>> Как ему это объяснить?
>>> Добавить в конфиг строку для этого хоста?
>> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
>> Короче, в этой ситуации никак.
> Завести собственный домен.Так я ж, говорю, домен 2-го уровня - собственный. Причём тут домен?
Может быть завести собственный DNS-сервер?
Нужно чтоб DNS-сервер в ответ на запросы sub.mysite.ru и mysite.ru выдавал ip от http-сервера на котором сидит mysite.ru.
>[оверквотинг удален]
>>>>> что делать-то?
>>>>> Как ему это объяснить?
>>>> Добавить в конфиг строку для этого хоста?
>>> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
>>> Короче, в этой ситуации никак.
>> Завести собственный домен.
> Так я ж, говорю, домен 2-го уровня - собственный. Причём тут домен?
> Может быть завести собственный DNS-сервер?
> Нужно чтоб DNS-сервер в ответ на запросы sub.mysite.ru и mysite.ru выдавал ip
> от http-сервера на котором сидит mysite.ru.Ну, обычно у людей есть возможность управлять своим доменом. Если ДНС сервер на котором находится домен принадлежит провайдеру- провайдер обычно предоставляет возможность управлять этим доменом.