萬用字元 dns,不存在的子域指向主網站
在開始之前,我想說我已經閱讀了有關 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:
編輯: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:
- 首先定義具有匹配 IP、埠和 ServerName 的 VirtualHost
- 首先定義具有匹配 IP 和埠的 VirtualHost
_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-預設文件應該這樣做)。