
Ich habe einen Debian 6-Server, der von jemand anderem konfiguriert wurde. Ich wurde gebeten, auf diesem Server eine Subdomäne hinzuzufügen.
Ich habe den DNS richtig konfiguriert (mit geprüft nslookup
), das Verzeichnis in erstellt /var/www/
und dann einen neuen virtuellen Host hinzugefügt /etc/apache2/sites-available
(tatsächlich habe ich die Datei einer der vorhandenen Subdomänen kopiert und bearbeitet):
<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>
Dann habe ich meinen Host hinzugefügt a2ensite
und Apache neu gestartet, aber die Domäne mysub.example.com
leitet zu beta.example.com
unserer Beta-Produktionssite weiter. Seltsamerweise gibt es keine Konfiguration für beta.example.com
in /etc/apache2/sites-available
.
Was muss ich sonst noch tun, um diese Subdomain zu aktivieren? Ich bin ziemlich sicher, dass die Konfiguration für example.com
den Host nichts blockiert, da wir auch einen blog.example.com
virtuellen Host auf diese Weise konfiguriert haben und dieser perfekt funktioniert.
BEARBEITEN
Einige Debug-Ausgaben:
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
BEARBEITEN 2
Ich habe einen kurzen Test gemacht. Ich habe den ersten virtuellen Host ( beta.example.com
) deaktiviert mit:
a2dissite 01-example.com
Und dann habe ich versucht, darauf zuzugreifen mysub.example.com
, und wurde nun umgeleitet zu blog.example.com
- das ist die zweite in der Reihenfolge der aktivierten Sites. Es sieht also so aus, als mysub.example.com
würde es nicht gefunden und fällt in den ersten Behälter der *.example.com
gefundenen Subdomains.
BEARBEITEN 2
Ein weiterer Test: Ich habe die Reihenfolge meiner Konfigurationsdateien geändert, sodass meine neue Subdomain die erste (Standard-)Subdomain ist. Im Moment:
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
Und trotzdem werde ich beim Versuch, die Seite aufzurufen, mysub.example.com
zu umgeleitet beta.example.com
. Das blog.example.com
funktioniert immer noch einwandfrei.
Besteht die Möglichkeit, dass irgendwo anders (außer im Verzeichnis) eine Domänenkonfiguration definiert ist /etc/apache2/sites-available
?
BEARBEITEN 3
Zusätzliche Konfigurationen für Hosts: beta.example.com und blog.example.com
beta.example.com (Datei: /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 (Datei: /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>
Antwort1
Ich rate Ihnen, alle Ihre Dateien zu debuggen. Wie c4f4t0r sagte, versuchen Sie es mit „apache2ctl -S“ und versuchen Sie anschließend, die Umschreiberegeln in den .htaccess-Dateien zu finden, zum Beispiel:
find /var/www/mysub.example.com -name ".htaccess" -exec grep -l -i rewrite {} \;
In Ihrer Hauptkonfigurationsdatei haben Sie etwas "Gefährliches":
<Directory /var/www/mysub.example.com>
AllowOverride All # <---- THIS
Require all granted
</Directory>
Antwort2
Sie sollten die Datei überprüfen /etc/apache2/ports.conf
und sich die Zeile NameVirtualHost *:80
nebenListen 80
Wenn Sie diese Zeile nicht haben, können Sie keine virtuellen Hosts basierend auf dem Servernamen verwenden. Daher ist es normal, dass Sie in Ihrem Browser immer den ersten aktivierten virtuellen Host erhalten.
Antwort3
OK, das Problem (und die Lösung) waren ziemlich einfach.
Das Problem war, dass die Ordner der neu erstellten Subdomains leer waren - keine index.php/html-Datei darin. Anstatt sie also anzuzeigen (als Verzeichnis), leitete der Server zur Standarddomain um - diebeta.example.com
Die Konfiguration der virtuellen Hosts war also korrekt und nach dem Hinzufügen einiger Dateien zu den Ordnern begannen die Subdomänen zu funktionieren.