Apache-2.2

Apache 子域配置不起作用

  • July 9, 2015

我有一個由其他人配置的 Debian 6 伺服器。我被要求在該伺服器上添加一個子域。

我正確配置了 DNS(用 選中nslookup),在其中創建了目錄,/var/www/然後將新的虛擬主機添加到/etc/apache2/sites-available(實際上我複制了一個現有子域的文件,並對其進行了編輯):

<VirtualHost *:80>
   DocumentRoot "/var/www/mysub.example.com"
   ServerName mysub.example.com
   ServerAlias www.mysub.example.com

   ErrorLog ...[path to file]
   CustomLog [path to file]

   RewriteEngine On 
   #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
   #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]

   <Directory /var/www/mysub.example.com>
        AllowOverride All
        Require all granted
   </Directory>
</VirtualHost>

然後我使用a2ensiteApache 添加了我的主機並重新啟動,但域mysub.example.com正在重定向到beta.example.com我們的測試版生產站點。奇怪的是,beta.example.comin沒有配置/etc/apache2/sites-available

我還應該做什麼來啟用這個子域?我很確定example.com主機的配置不會阻止任何東西,因為我們也有一個blog.example.com以這種方式配置的虛擬主機並且它執行良好。

編輯

一些調試輸出:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:18)
*:80                   is a NameVirtualHost
        default server beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
        port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
        port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
        port 80 namevhost [here comes other unrelated domain name]
        port 80 namevhost forum.example.com (/etc/apache2/sites-enabled/04-forum.example.com:1)
        port 80 namevhost example.com (/etc/apache2/sites-enabled/05-sth.example.com:1)
        port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/06-mysub.example.com:1)
Syntax OK


root@xxx:~# grep -r 'mysub\.example\.com' /etc/apache2
/etc/apache2/apache2.conf:Alias /mysub /var/www/mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        DocumentRoot "/var/www/mysub.example.com"
/etc/apache2/sites-available/06-mysub.example.com:        ServerName mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ServerAlias www.mysub.example.com
/etc/apache2/sites-available/06-mysub.example.com:        ErrorLog "/var/log/apache2/mysub.example.com-error_log"
/etc/apache2/sites-available/06-mysub.example.com:        CustomLog "/var/log/apache2/mysub.example.com-access_log" common
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteCond %{HTTP_HOST} ^mysub.example.com$ [NC]
/etc/apache2/sites-available/06-mysub.example.com:        #RewriteRule ^(.*)$ http://www.mysub.example.com$1 [R=301,L]
/etc/apache2/sites-available/06-mysub.example.com:        <Directory /var/www/mysub.example.com>

root@xxx:~# grep -r 'beta\.example\.com' /etc/apache2
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common
/etc/apache2/sites-available/01-example.com:        ServerName beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ServerAlias www.beta.example.com:443
/etc/apache2/sites-available/01-example.com:        ErrorLog "/var/log/apache2/beta.example.com-error_log"
/etc/apache2/sites-available/01-example.com:        CustomLog "/var/log/apache2/beta.example.com-access_log" common

編輯 2 我做了一個快速測試。我禁用了第一個虛擬主機(beta.example.com):

a2dissite 01-example.com

然後嘗試訪問mysub.example.com,我現在被重定向到blog.example.com- 這是啟用站點的第二個。所以它看起來mysub.example.com沒有被找到,它屬於*.example.com它找到的第一個子域。

編輯 2

另一個測試:我更改了配置文件的順序,以便我的新子域成為第一個(預設)子域。現在:

root@xxx:~# apachectl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:443                  beta.example.com (/etc/apache2/sites-enabled/01-example.com:14)
*:80                   is a NameVirtualHost
        default server mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
        port 80 namevhost mysub.example.com (/etc/apache2/sites-enabled/00-mysub.example.com:1)
        port 80 namevhost beta.example.com (/etc/apache2/sites-enabled/01-example.com:1)
        port 80 namevhost blog.example.com (/etc/apache2/sites-enabled/02-blog.example.com:1)
Syntax OK

而且,如果我嘗試進入,mysub.example.com我將被重定向到beta.example.com. blog.example.com仍然可以正常工作。

是否有可能在其他地方(除了/etc/apache2/sites-available目錄)定義了域配置?

編輯 3

主機的附加配置:beta.example.com 和 blog.example.com

beta.example.com(文件:/etc/apache2/hosts-available/01-example.com)

<VirtualHost *:80>
       DocumentRoot "/var/www/example.com"
       ServerName beta.example.com
       ServerAlias www.beta.example.com

       ErrorLog "/var/log/apache2/beta.example.com-error_log"
       CustomLog "/var/log/apache2/beta.example.com-access_log" common

       <Directory /var/www/example.com>
               AllowOverride All
       </Directory>
</VirtualHost>

<VirtualHost *:443>
       DocumentRoot "/var/www/example.com"
       ServerName beta.example.com:443
       ServerAlias www.beta.example.com:443

       ErrorLog "/var/log/apache2/beta.example.com-error_log"
       CustomLog "/var/log/apache2/beta.example.com-access_log" common

       RewriteEngine On
       #RewriteCond %{HTTP_HOST} ^example.com$ [NC]
       #RewriteRule ^(.*)$ http://www.example.com$1 [R=301,L]

       SSLEngine on
       SSLCertificateFile /etc/apache2/ssl/apache.crt
       SSLCertificateKeyFile /etc/apache2/ssl/apache.key

       <Directory /var/www/example.com>
               AllowOverride All
       </Directory>
</VirtualHost>

blog.example.com(文件:/etc/apache2/hosts-available/02-blog.example.com)

<VirtualHost *:80>
   DocumentRoot "/var/www/blog.example.com"
   ServerName blog.example.com
   ServerAlias www.blog.example.com

   ErrorLog ...[path to file]
   CustomLog [path to file]

   RewriteEngine On 
   #RewriteCond %{HTTP_HOST} ^blog.example.com$ [NC]
   #RewriteRule ^(.*)$ http://www.blog.example.com$1 [R=301,L]

   <Directory /var/www/blog.example.com>
        AllowOverride All
        Require all granted
   </Directory>
</VirtualHost>

我建議您調試所有文件,正如 c4f4t0r 所說,嘗試“apache2ctl -S”,然後嘗試在 .htaccess 文件中查找重寫規則,例如:

find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;

在您的主配置文件中,您有一些“危險”的東西:

<Directory /var/www/mysub.example.com>
    AllowOverride All # <---- THIS
    Require all granted 
</Directory>

您應該檢查文件/etc/apache2/ports.conf並查看NameVirtualHost *:80附近的行Listen 80

如果你沒有這條線,你就不能使用基於 ServerName 的虛擬主機,所以你總是在瀏覽器中獲得第一個啟用的虛擬主機是正常的。

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