Apache サブドメイン構成が機能しない

Apache サブドメイン構成が機能しない

他の人が設定した Debian 6 サーバーがあります。そのサーバーにサブドメインを追加するように求められました。

DNS を正しく設定し ( で確認nslookup)、 にディレクトリを作成し/var/www/、 に新しい仮想ホストを追加しました/etc/apache2/sites-available(実際には、既存のサブドメインのファイルの 1 つをコピーして編集しました)。

<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>

次に、 を使用してホストを追加しa2ensite、Apache を再起動しましたが、ドメインはベータ版の運用サイトであるmysub.example.comにリダイレクトされますbeta.example.com。奇妙なことに、beta.example.comにはの構成がありません/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

その後、アクセスしようとしたところ、有効化されたサイトの順序で 2 番目のサイトmysub.example.comにリダイレクトされました。つまり、見つからず、見つかったサブドメインの最初のビンに分類されているようです。blog.example.commysub.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 *:80Listen 80

この行がない場合、ServerName に基づいて仮想ホストを使用することはできないため、ブラウザーで常に最初に有効な仮想ホストを取得するのは正常です。

答え3

さて、問題(および解決策)は非常に単純であることがわかりました。

問題は、新しく作成されたサブドメインのフォルダが空で、index.php/htmlファイルがないことでした。そのため、サーバーはそれを(ディレクトリとして)表示する代わりに、デフォルトのドメインにリダイレクトしました。beta.example.com

したがって、vhosts の構成は正しく、フォルダーにいくつかのファイルを追加した後、サブドメインが機能し始めました。

関連情報