
他の人が設定した 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.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
したがって、vhosts の構成は正しく、フォルダーにいくつかのファイルを追加した後、サブドメインが機能し始めました。