it-swarm.com.de

Warum ignoriert Apache möglicherweise einen virtuellen Host mit einem Servernamen, der mit der angeforderten URL übereinstimmt?

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

Mein httpd.conf Enthält nur die folgende Zeile:

ServerName radiofreebrighton.org.uk

Ich habe auch eine 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 durch sites-enabled Mit a2ensite Verknüpft wurden:

  • radiofreebrighton.org.uk
  • trafalgararches.co.uk

Der Inhalt des ersten ist:

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

    ServerAdmin [email protected]
    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 des letzteren ist:

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

    ServerAdmin [email protected]
    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?


Edit :

Konfiguration des virtuellen Hosts im Sinne von Apache:

[email protected]:/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

(Gelesen über Apache2ctl -S Aka httpd -S.)

27
Tom Wright

Dies mag offensichtlich sein, aber vergessen Sie nicht, den Apache-Dienst neu zu starten nach dem Aktivieren eines zusätzlichen virtuellen Hosts.

Nach dem Ausführen von a2ensite Für den zweiten virtuellen Host zeigt die Ausgabe von Apache2ctl -S, Dass beide Sites konfiguriert sind (und eine davon ist die Standardeinstellung), sie wird jedoch erst aktiv, wenn Sie Apache neu laden .


Angenommen, Sie haben zwei virtuelle Hosts - Site1 und Site2. Sie führen a2ensite site1 Aus und laden dann den Apache-Dienst neu. Jetzt können Sie auf http://site1 Zugreifen und dies ist die Standardeinstellung. Jetzt führen Sie a2ensite site2 Aus, vergessen jedoch, Apache neu zu starten. Die Ausgabe von Apache2ctl -S Ist:

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

Wenn Sie jedoch versuchen, http://site2 Zu laden, wird tatsächlich die Standardwebsite (Site1) geladen, da die Konfiguration nicht geladen wird.

16
prngleo

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

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

'NameVirtualHost *: 443' muss nur einmal aufgerufen und über Ihren vhosts für Port 443 definiert werden. Ich habe meine Definition in die Datei ports.config eingefügt, damit sie wie folgt 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.

15
Lucas

Meine 2 Cent: Da ich mich an eine IP halten muss (ich möchte nicht, dass die Site in allen installierten Netzwerken bereitgestellt wird), habe ich nach dem Ändern der lokalen privaten IP des Servers vergessen, sie hier zu ändern:

NameVirtualHost 192.168.100.20:80 <VirtualHost 192.168.100.20:80>

Natürlich ist es kein Apache-Problem, Sie darüber zu informieren, dass IP lokal nicht vorhanden ist.

4
maraboshi

Tom, bitte schauen Sie hier http://httpd.Apache.org/docs/2.0/en/mod/core.html#namevirtualhost

Hinweis

Beachten Sie, dass der "Hauptserver" und alle Standard Server niemals werden wird für eine Anfrage an eine NameVirtualHost-IP-Adresse bereitgestellt (es sei denn, Sie geben aus irgendeinem Grund NameVirtualHost an, tun dies dann aber nicht Definieren Sie alle VirtualHosts für diese Adresse.

Es sollte also in Ordnung sein, wenn Sie default in die IP-Adresse Ihres Servers ändern.

2

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

Fügen Sie 2 Servernamen in dasselbe 1 VirtualHost-Tag wie unten ein:

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

Am Ende hatte ich Probleme mit der zweiten Site, weil ich zwei VirtualHost-Tag-Blöcke hatte.

1
Tu Uyen

Ich habe festgestellt, dass die Ursache für dieses Problem ein/etc/hosts-Eintrag auf meinem Server ist, dessen URL auf die externe IP des Servers verweist.

Irgendwann muss ich es eingerichtet haben, bevor DNS bereit war, also habe ich auf meinem Server einen Eintrag/etc/hosts eingegeben, der auf seine eigene externe IP verweist:

 1.2.3.4 vhost.example.com 

Dann habe ich einen ServerAlias ​​für "vhost.example.com" auf einer vorhandenen Site eingerichtet.

Aber nichts, was ich tun könnte, würde Apache davon abhalten, die Website default-ssl.conf für SSL-Anforderungen an vhost.example.com bereitzustellen. Port 80 HTTP funktionierte einwandfrei, aber das SSL zeigte stattdessen immer die Standardwebsite an. Am Ende führte mich dieser SO Thread) dazu, "apachectl -S" zu versuchen, das Websites anzeigt, und schließlich konnte ich es herausfinden.

Wenn Sie also die Standard-SSL-Site anstelle der erwarteten Site erhalten, stellen Sie sicher, dass Sie die externe IP-Adresse Ihres Servers nicht in einem/etc/hosts-Eintrag hinzugefügt haben! Eine ziemlich seltsame Sache, die man im Nachhinein gemacht hat, aber hoffentlich hilft das jemand anderem!

1

Ich hatte dieses Problem beim Migrieren von Websites auf einen neuen Ubuntu 16-Server. Nach einigem Kopfkratzen wurde mir klar, dass das SSL-Modul nicht standardmäßig aktiviert war, also alles in <IfModule mod_ssl.c> Blöcke werden natürlich stillschweigend ignoriert.

Vor Jahren habe ich alle meine SSL-vhosts in diese Bedingung eingeschlossen, und diesmal hatte ich gerade die Konfigurationsdateien auf den neuen Server kopiert.

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

Sudo a2enmod ssl
0
scipilot