Назад | Перейти на главную страницу

Подстановочные знаки DNS, несуществующие поддомены указывают на основной сайт

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

Вот моя проблема. Я использую сторонний DNS и добавил подстановочную запись A * .biglle.com, которая указывает на IP-адрес моего сервера. Проблема, с которой я столкнулся, заключается в том, что каждый несуществующий поддомен указывает на biglle.com (те, которые существуют, работают нормально). Хочу отметить, что конфигурация веб-сайта apache для biglle.com не является стандартной (000-default.conf), а является отдельной (biglle.com.conf). Вот чего я не могу понять. Несуществующие поддомены должны указывать на файл конфигурации по умолчанию, не так ли?

Вот часть biglle.com.conf

<VirtualHost 192.168.1.54:80>
SuexecUserGroup "#1003" "#1004"
ServerName biglle.com
ServerAlias www.biglle.com
ServerAlias webmail.biglle.com
ServerAlias admin.biglle.com
DocumentRoot /home/biglle/public_html
ErrorLog /var/log/virtualmin/biglle.com_error_log
CustomLog /var/log/virtualmin/biglle.com_access_log combined
ScriptAlias /cgi-bin/ /home/biglle/cgi-bin/
ScriptAlias /awstats/ /home/biglle/cgi-bin/
DirectoryIndex index.html index.htm index.php index.php4 index.php5
<Directory /home/biglle/public_html>
Options -Indexes +IncludesNOEXEC +FollowSymLinks +ExecCGI
allow from all
AllowOverride All
AddHandler fcgid-script .php
AddHandler fcgid-script .php5
FCGIWrapper /home/biglle/fcgi-bin/php5.fcgi .php
FCGIWrapper /home/biglle/fcgi-bin/php5.fcgi .php5
</Directory>
<Directory /home/biglle/cgi-bin>
allow from all
</Directory>
RewriteEngine on
RewriteCond %{HTTP_HOST} =webmail.biglle.com
RewriteRule ^(.*) https://biglle.com:20000/ [R]
RewriteCond %{HTTP_HOST} =admin.biglle.com
RewriteRule ^(.*) https://biglle.com:10000/ [R]
RemoveHandler .php
RemoveHandler .php5
IPCCommTimeout 31
FcgidMaxRequestLen 1073741824
<Files awstats.pl>
AuthName "biglle.com statistics"
AuthType Basic
AuthUserFile /home/biglle/.awstats-htpasswd
require valid-user
</Files>
Alias /dav /home/biglle/public_html
Alias /pipermail /var/lib/mailman/archives/public
<Location /dav>
DAV on
AuthType Basic
AuthName "biglle.com"
AuthUserFile /home/biglle/etc/dav.digest.passwd
Require valid-user
ForceType text/plain
Satisfy All
RemoveHandler .php
RemoveHandler .php5
RewriteEngine off
</Location>
RedirectMatch /cgi-bin/mailman/([^/\.]*)(.cgi)?(.*) https://biglle.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3
RedirectMatch /mailman/([^/\.]*)(.cgi)?(.*) https://biglle.com:10000/virtualmin-mailman/unauthenticated/$1.cgi$3
php_value memory_limit 32M
</VirtualHost>

В настоящее время я использую php-хак, который проверяет, есть ли у доменного имени соответствующий файл .conf в / etc / apache2 / sites-enabled /, и если нет, он отображает ошибку 404, но это, очевидно, не постоянное решение. Также этот хак работает только для индексной страницы каждого поддомена.

Поскольку у меня не более 10 представителей, я не могу публиковать здесь примеры. Вы можете увидеть их на этой пасте здесь:
http://pastebin.com/cYY3ffYz

РЕДАКТИРОВАТЬ: вывод apache2ctl -S

root@biglle:/# apache2ctl -S
[Sun May 27 22:00:11 2012] [warn] NameVirtualHost 91.132.57.179:80 has no VirtualHosts
VirtualHost configuration:
192.168.1.54:80        is a NameVirtualHost
         default server biglle.com (/etc/apache2/sites-enabled/biglle.com.conf:1)
         port 80 namevhost biglle.com (/etc/apache2/sites-enabled/biglle.com.conf:1)
         port 80 namevhost fwnh.biglle.com (/etc/apache2/sites-enabled/fwnh.biglle.com.conf:1)
         port 80 namevhost itemlist.biglle.com (/etc/apache2/sites-enabled/itemlist.biglle.com.conf:1)
         port 80 namevhost lithisdoma.gr (/etc/apache2/sites-enabled/lithisdoma.gr.conf:1)
         port 80 namevhost think.biglle.com (/etc/apache2/sites-enabled/think.biglle.com.conf:1)
         port 80 namevhost topirouni.biglle.com (/etc/apache2/sites-enabled/topirouni.biglle.com.conf:1)
         port 80 namevhost videos.biglle.com (/etc/apache2/sites-enabled/videos.biglle.com.conf:1)
192.168.1.54:443       is a NameVirtualHost
         default server biglle.com (/etc/apache2/sites-enabled/biglle.com.conf:58)
         port 443 namevhost biglle.com (/etc/apache2/sites-enabled/biglle.com.conf:58)
wildcard NameVirtualHosts and _default_ servers:
*:80                   biglle.com (/etc/apache2/sites-enabled/000-default:1)
Syntax OK

Apache будет искать VirtualHosts в следующем порядке:

  1. Сначала определенный VirtualHost с совпадающими IP-адресом, портом и ServerName
  2. Первый определенный VirtualHost с совпадающими IP и портом
  3. Сначала определенный VirtualHost с подстановочным знаком (или _default_) IP и соответствующий порт

Я предполагаю, что у сервера только один IP-адрес, а именно 192.168.1.54.

192.168.1.54:80        is a NameVirtualHost
    default server biglle.com (/etc/apache2/sites-enabled/biglle.com.conf:1)
wildcard NameVirtualHosts and _default_ servers:
    *:80                   biglle.com (/etc/apache2/sites-enabled/000-default:1)

Входящие запросы на 192.168.1.54:80, которые не соответствуют ServerName, будут поэтому использовать VirtualHost biglle.com, определенный в biglle.com.conf (потому что это первый VirtualHost, который соответствует IP и порту). VirtualHost biglle.com в 000-default будет использоваться только для запросов, полученных с IP-адреса, отличного от 192.168.1.54.

Если вы на самом деле не используете виртуальный хостинг на основе IP, я предлагаю вам изменить все свои VirtualHosts, чтобы не указывать IP-адрес (т.е. <VirtualHost *:80>) и убедитесь, что тот, который вы хотите использовать по умолчанию, указан первым в конфигурации (что должен делать файл 000 по умолчанию).

Дополнительные советы:

  1. В некоторых браузерах (например, google chrome) вы сможете просматривать и видеть результаты изменений конфигурации apache только после перезапуска браузера.
  2. Найдите директивы Redirect в файлах конфигурации - они также могут вызвать проблему.

Амнон