Apache 子網域設定不起作用

Apache 子網域設定不起作用

我有一台由其他人配置的 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>

然後我使用並重新啟動 Apache 新增了主機a2ensite,但網域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>

答案1

我建議您調試所有文件,正如 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>

答案2

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

如果沒有這一行,則無法使用基於 ServerName 的虛擬主機,因此瀏覽器中始終獲得第一個啟用的虛擬主機是正常的。

答案3

好吧,問題(和解決方案)非常簡單。

問題是新建立的子網域資料夾是空的 - 其中沒有 index.php/html 檔案。因此,伺服器沒有顯示它(作為目錄),而是重定向到預設網域 - 這是beta.example.com

因此,虛擬主機的配置是正確的,並且在向資料夾添加一些檔案後,子網域開始工作。

相關內容