Domain-Name-System

萬用字元 dns,不存在的子域指向主網站

  • December 20, 2012

在開始之前,我想說我已經閱讀了有關 serverfault 的相關問題,但我找不到解決方案。

這是我的問題。我正在使用第三方 DNS,並且添加了萬用字元 A 記錄 *.biglle.com,它指向我的伺服器的 IP 地址。我遇到的問題是每個不存在的子域都指向 biglle.com(那些確實存在的子域可以正常工作)。我想指出,biglle.com 的 apache 網站配置不是預設配置(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 hack 來檢查域名是否在 /etc/apache2/sites-enabled/ 中有相應的 .conf 文件,如果沒有,則會顯示 404 錯誤,但這顯然不是永久解決方案。此外,此 hack 僅適用於每個子域的索引頁面。

由於我沒有超過 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 將按以下順序查找 VirtualHost:

  1. 首先定義具有匹配 IP、埠和 ServerName 的 VirtualHost
  2. 首先定義具有匹配 IP 和埠的 VirtualHost
  3. _default_首先使用萬用字元(或)IP 和匹配埠定義 VirtualHost

我假設伺服器只有一個 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)

因此,與 ServerName 不匹配的 192.168.1.54:80 上的傳入請求將使用 biglle.com.conf 中定義的 biglle.com VirtualHost(因為這是與 IP 和埠匹配的第一個 VirtualHost)。000-default 中的 biglle.com 虛擬主機將僅用於在 192.168.1.54 以外的 IP 上收到的請求。

除非您實際上是在進行基於 IP 的虛擬主機,否則我建議您將所有 VirtualHosts 更改為不指定 IP 地址(<VirtualHost *:80>即000-預設文件應該這樣做)。

引用自:https://serverfault.com/questions/393159