Apache-Subdomänenkonfiguration funktioniert nicht

Apache-Subdomänenkonfiguration funktioniert nicht

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 a2ensiteund Apache neu gestartet, aber die Domäne mysub.example.comleitet zu beta.example.comunserer Beta-Produktionssite weiter. Seltsamerweise gibt es keine Konfiguration für beta.example.comin /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.comden Host nichts blockiert, da wir auch einen blog.example.comvirtuellen 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.comwürde es nicht gefunden und fällt in den ersten Behälter der *.example.comgefundenen 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.comzu umgeleitet beta.example.com. Das blog.example.comfunktioniert 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.confund sich die Zeile NameVirtualHost *:80nebenListen 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.

verwandte Informationen