URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7061
[ Назад ]

Исходное сообщение
"Проблема с субдоменом в apache2"

Отправлено Azerhud , 25-Ноя-10 17:42 
Доброго времени суток. Прошу помочь с субдоменом. имеется локальный сервер в сети. 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@localhost

        DocumentRoot /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 warn

        CustomLog /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 всё в порядке, и немогу понять в чём же проблема. Буду благодарен за любую помощь...


Содержание

Сообщения в этом обсуждении
"Проблема с субдоменом в apache2"
Отправлено Square , 25-Ноя-10 18:49 
Апач это 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 на компьютере клиента


"Проблема с субдоменом в apache2"
Отправлено Azerhud , 25-Ноя-10 19:04 
> Апач это 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-х уровней вложенных директорий- глупая и порочная идея.

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


"Проблема с субдоменом в apache2"
Отправлено Square , 25-Ноя-10 19:07 

> test.server.lan   IN  A   192.168.1.5

Эту строку заменить на
test   IN  A   192.168.1.5


"Проблема с субдоменом в apache2"
Отправлено Azerhud , 25-Ноя-10 19:10 
>> test.server.lan   IN  A   192.168.1.5
> Эту строку заменить на
> test   IN  A   192.168.1.5

заменил и перезапустил bind но всё равно получаю:
ping: unknown host test.server.lan


"Проблема с субдоменом в apache2"
Отправлено Square , 25-Ноя-10 21:19 
>>> 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.


"Проблема с субдоменом в apache2"
Отправлено Azerhud , 26-Ноя-10 04:37 
Всё заработало. :) Спасибо огромное за помошь.

Но у меня возник новый вопрос, если к примеру мне понадобиться добавить новый субдомен, то мне вновь придётся вводить в изменения в файлы апача и бинда? Как же можно всё таки заставить создаваться субдомены автоматически? Ещё Раз огромное сапасибо за помошь.



"Проблема с субдоменом в apache2"
Отправлено Square , 26-Ноя-10 06:52 
> Всё заработало. :) Спасибо огромное за помошь.
> Но у меня возник новый вопрос, если к примеру мне понадобиться добавить
> новый субдомен, то мне вновь придётся вводить в изменения в файлы
> апача и бинда? Как же можно всё таки заставить создаваться субдомены
> автоматически? Ещё Раз огромное сапасибо за помошь.

субдомены апача и субдомены доменных имен это разные субдомены
для бинда это делается так:
добавить в конфиг бинда строку со звездочкой
* 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

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


"Проблема с субдоменом в apache2"
Отправлено Azerhud , 28-Ноя-10 05:04 
>[оверквотинг удален]
> и почемуто решил что нужно идти по ссылке grendserver.www.server.lan и благодаря
> этой секции он будет автоматически перенаправлен на основной сайт. и все
> в шоколаде...
> Но есть и иное понимание субдомена. Существует модуль к апачу, который занимается
> "массовым хостингом" он действительно создает множество разных сайтов. почитать что это
> такое и как с ним работаь можно в документации к апачу.
> ключевое слово - mod_vhost_alias  или тут вот например:
> http://www.softtime.ru/info/apache.php?id_article=103
> он позволяет отдавать клиенту разные странички из разных каталогов в зависимости от
> того к какому именно доменному имени обращается клиент.

Спасибо за помошь. Завтра на работе попробую разобраться.


"Проблема с субдоменом в apache2"
Отправлено Azerhud , 01-Дек-10 11:38 
Автоматические субдоменқ не смог запустить, работает только в ручную. Спасибо за помошь. Теперь буду пқтаться поставить почту :)

"Проблема с субдоменом в apache2"
Отправлено Meatcoins , 02-Дек-10 15:20 
>[оверквотинг удален]
> <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-го уровня???


"Проблема с субдоменом в apache2"
Отправлено Square , 02-Дек-10 15:55 
>Но я начал экспериментировать и пришёл к выводу, что вначале-то браузер обращается к 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-го уровня??

Больше читать.


"Проблема с субдоменом в apache2"
Отправлено Meatcoins , 02-Дек-10 16:05 
>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
> Больше читать.

Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то что делать-то?
Как ему это объяснить?



"Проблема с субдоменом в apache2"
Отправлено Square , 02-Дек-10 16:20 
>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>> Больше читать.
> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
> что делать-то?
> Как ему это объяснить?

Добавить в конфиг строку для этого хоста?


"Проблема с субдоменом в apache2"
Отправлено Meatcoins , 03-Дек-10 09:08 
>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>> Больше читать.
>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>> что делать-то?
>> Как ему это объяснить?
> Добавить в конфиг строку для этого хоста?

У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
Короче, в этой ситуации никак.


"Проблема с субдоменом в apache2"
Отправлено Square , 03-Дек-10 10:20 
>>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>>> Больше читать.
>>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>>> что делать-то?
>>> Как ему это объяснить?
>> Добавить в конфиг строку для этого хоста?
> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
> Короче, в этой ситуации никак.

Завести собственный домен.


"Проблема с субдоменом в apache2"
Отправлено Meatcoins , 03-Дек-10 10:43 
>>>>>>Так как же сделать произвольное колличество доменов 3-го уровня на основе домена 2-го уровня??
>>>>> Больше читать.
>>>> Читай не читай, а если DNS-сервер считает, что sub.mysite.ru не существует, то
>>>> что делать-то?
>>>> Как ему это объяснить?
>>> Добавить в конфиг строку для этого хоста?
>> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
>> Короче, в этой ситуации никак.
> Завести собственный домен.

Так я ж, говорю, домен 2-го уровня - собственный. Причём тут домен?
Может быть завести собственный DNS-сервер?
Нужно чтоб DNS-сервер в ответ на запросы sub.mysite.ru и mysite.ru выдавал ip от http-сервера на котором сидит mysite.ru.


"Проблема с субдоменом в apache2"
Отправлено Square , 03-Дек-10 14:03 
>[оверквотинг удален]
>>>>> что делать-то?
>>>>> Как ему это объяснить?
>>>> Добавить в конфиг строку для этого хоста?
>>> У меня нет административного доступа к DNS-серверу. DNS-сервер принадлежит провайдеру.
>>> Короче, в этой ситуации никак.
>> Завести собственный домен.
> Так я ж, говорю, домен 2-го уровня - собственный. Причём тут домен?
> Может быть завести собственный DNS-сервер?
> Нужно чтоб DNS-сервер в ответ на запросы sub.mysite.ru и mysite.ru выдавал ip
> от http-сервера на котором сидит mysite.ru.

Ну, обычно у людей есть возможность управлять своим доменом. Если ДНС сервер на котором находится домен принадлежит провайдеру- провайдер обычно предоставляет возможность управлять этим доменом.