Frage Warum könnte Apache einen virtuellen Host mit einem Servernamen ignorieren, der der angeforderten URL entspricht?


Ich versuche, meiner Apache-Konfiguration einen zweiten virtuellen Host hinzuzufügen, kann aber den neuen virtuellen Host nicht verwenden.

Meine httpd.conf enthält nur die folgende Zeile:

ServerName radiofreebrighton.org.uk

Ich habe auch ein ports.conf Datei, die Folgendes enthält:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>

Ich habe zwei Dateien in sites-available die mit Symlinks verknüpft waren sites-enabled durch a2ensite:

  • radiofreebrighton.org.uk
  • trafalgararches.de

Der Inhalt des ersten ist:

<VirtualHost _default_:80>
    DocumentRoot /home/tom/www

    ServerAdmin tom@radiofreebrighton.org.uk
    ServerName radiofreebrighton.org.uk
    ServerAlias www.radiofreebrighton.org.uk

    <Directory /home/tom/www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    LogLevel error
    CustomLog /var/log/apache2/access.log combined

    Alias /wiki /home/tom/www/mediawiki/index.php
</VirtualHost>

Der Inhalt der letzteren ist:

<VirtualHost *:80>
    DocumentRoot /home/tom/tata-www

    ServerAdmin admin@trafalgararches.co.uk
    ServerName trafalgararches.co.uk
    ServerAlias www.trafalgararches.co.uk

    <Directory /home/tom/tata-www/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

    logLevel error
    ErrorLog /var/log/apache2/error.log
</VirtualHost>

Aber jedes Mal, wenn ich eine Seite von trafalgararches.co.uk anfordere, bekomme ich eine Seite von radiofreebrighton.org.uk. Warum könnte das passieren? Wie kann ich es reparieren?


Bearbeiten:

Konfiguration des virtuellen Hosts nach Apache:

tom@rfb:/usr/local$ apache2ctl -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost radiofreebrighton.org.uk (/etc/apache2/sites-enabled/radiofreebrighton.org.uk:1)
         port 80 namevhost trafalgararches.co.uk (/etc/apache2/sites-enabled/trafalgararches.co.uk:1)
Syntax OK

(Geächtet via apache2ctl -S aka httpd -S.)


25
2017-07-08 12:46


Ursprung


Nicht sicher, dass dies der Grund ist, aber Sie sollten die Schrägstriche von den Enden Ihres entfernen ServerName und ServerAlias Linien. Stellen Sie außerdem sicher, dass Sie Apache neu gestartet haben. - EEAA
Ich bin fast sicher, dass das der Grund ist. Dies bedeutet, dass der Hostname in der Anfrage niemals mit dem Servernamen für diesen virtuellen Host übereinstimmt. - larsks
@ErikA, @larsks - Ihr habt meine Hoffnungen gemacht! Ich entfernte die hinteren Schrägstriche und startete Apache neu, aber es änderte nichts. - Tom Wright
Hast du NameVirtualHost *:80 irgendwo in deiner Konfiguration? - larsks
Ich bin mir nicht sicher, ob es sich bei den oben genannten Websites um Produktion oder Entwicklung handelt, aber wenn ich tatsächlich zu diesen URLs gehe, ergeben sich für mich zwei verschiedene Seiten (richtige Seiten nach Aussehen). Wenn sich die obigen vhosts auf einem Entwicklungsserver befinden, ignorieren Sie diesen Kommentar. Andernfalls haben Sie möglicherweise Ihr Problem irgendwo auf dem Weg behoben und haben immer noch eine zwischengespeicherte Kopie. - cyberx86


Antworten:


Nun, diese Frage ist über ein Jahr alt, aber ich bin über ein ähnliches "Problem" gestolpert. Dies kann offensichtlich sein, aber vergessen Sie nicht, den Apache-Dienst neu zu starten, nachdem Sie einen zusätzlichen virtuellen Host aktiviert haben. Siehe nach der Ausführung a2ensite für den zweiten virtuellen Host die Ausgabe von apache2ctl -S zeigt an, dass beide Seiten verfügbar sind (und eine davon ist die Standardeinstellung), auch wenn Sie Apache nicht neu geladen haben.

Nehmen wir an, Sie haben zwei virtuelle Hosts - site1 und site2. Sie laufen a2ensite site1 und dann den Apache-Dienst neu laden. Jetzt können Sie zugreifen http://site1 und es ist die Standardeinstellung. Jetzt rennst du a2ensite site2, aber vergiss Apache neu zu starten. Die Ausgabe von apache2ctl -S wird sein:

VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site1 (/etc/apache2/sites-enabled/site1:1)
         port 80 namevhost site2 (/etc/apache2/sites-enabled/site2:1)
Syntax OK

Aber wenn du versuchst zu laden http://site2Es wird tatsächlich die Standard-Site (site1) laden, da die Konfiguration nicht geladen ist.


14
2017-09-26 20:17





Ich hatte ein ähnliches Problem, bei dem meine zusätzlichen vhosts auf Port 443 (SSL / HTTPS) alle in das Verzeichnis des ersten aufgelisteten vhosts geleitet wurden. Apache ignoriert im Wesentlichen die Servername-Eigenschaft und passt nur auf den ip: port.

Es stellte sich heraus, dass ich den Befehl 'NameVirtualHost *: 443' fehlte, um Named Virtual Hosting für Port 443 zu aktivieren.

'NameVirtualHost *: 443' muss nur einmal aufgerufen werden und muss oberhalb von vhosts für Port 443 definiert werden. Ich lege meine Definition in die Datei ports.config, so wie es aussieht:

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

<IfModule mod_gnutls.c>
    NameVirtualHost *:443
    Listen 443
</IfModule>

Vergessen Sie nicht, Apache nach Änderungen neu zu starten.


12
2017-10-18 17:17



Für was es sich lohnt ... in Apache 2.4.18, mit NameVirtualHost erzeugt diese Nachricht beim Start: AH00548: NameVirtualHost has no effect and will be removed in the next release /etc/apache2/ports.conf - Lambart


Meine 2 Cent: Da ich bei einer IP bleiben muss (ich möchte nicht, dass die Seite in allen Netzwerken installiert wird), ist es passiert, dass nachdem ich die lokale private IP des Servers geändert habe, ich vergessen habe, sie hier zu ändern:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

Natürlich ist es kein Apache-Problem, um Sie wissen zu lassen, dass IP lokal nicht existiert.


4
2018-02-29 13:15





Tom, bitte sieh hier nach http://httpd.apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Hinweis

Beachten Sie, dass der "Hauptserver" und alle    Standard Server werden noch nie Sein serviert für eine Anfrage an eine NameVirtualHost IP   Adresse (außer aus irgendeinem Grund Sie   Geben Sie NameVirtualHost an, aber nicht   Definieren Sie einen VirtualHosts dafür   Adresse).

Also sollte es in Ordnung sein, wenn du das änderst Standard an die IP-Adresse Ihres Servers.


2
2017-07-08 13:41



Ich habe das versucht, aber es hat nichts geändert. Ich möchte auch vermeiden, mich an eine bestimmte IP zu binden, also werde ich es zurück ändern. Außerdem sollte ich darauf hinweisen, dass der Standard-vhost derjenige ist, der funktioniert. - Tom Wright


Ich finde Antwort von hier: http://alexking.org/blog/2007/11/01/apache-2-only-serves-first-virtual-host

Setzen Sie 2 Servername in dasselbe 1 VirtualHost-Tag wie folgt:

<VirtualHost *:80>
ServerName beta-site-1.com
DocumentRoot "/Library/WebServer/beta-site-1"

ServerName beta-site-2.com
DocumentRoot "/Library/WebServer/beta-site-2"
</VirtualHost>

Ich hatte Probleme mit der zweiten Website, da ich zwei VirtualHost-Tag-Blöcke hatte.


1
2017-07-07 12:15





Ich hatte das Problem, Websites auf einen neuen Ubuntu 16 Server zu migrieren. Nach ein bisschen Kopfkratzen erkannte ich, dass das SSL-Modul standardmäßig nicht aktiviert war, also nichts in der <IfModule mod_ssl.c> Blöcke wird natürlich still ignoriert.

Vor einigen Jahren habe ich alle meine SSL-Vhosts in diese Bedingung eingeschlossen, und dieses Mal habe ich die Konfigurationsdateien einfach auf den neuen Server kopiert.

Ich habe es behoben, indem ich das Modul aktiviert habe:

sudo a2enmod ssl

0
2017-07-11 04:38