VirtualHost wird nicht als beste Übereinstimmung angesehen

VirtualHost wird nicht als beste Übereinstimmung angesehen

Ich habe eine Datei namenspga-default.confdas aussieht wie

<VirtualHost *:8008>
    ServerName 192.168.1.10

    DocumentRoot /var/www/portals/default/public

    <Directory "/var/www/portals/default/public">
       AllowOverride All
    </Directory>
    ErrorLog /var/log/httpd/default.error.log
    CustomLog /var/log/httpd/default.requests.log combined
</VirtualHost>

Das Problem ist, wenn ich versuche mithttp://192.168.1.10:8008Es wird immer die standardmäßige Apache-Testseite geladen. Datei default.confsieht aus wie,

Listen 8008
<VirtualHost _default_:8008>
    DocumentRoot "/www/default"
</VirtualHost>

Aber wenn ich das <VirtualHost *:8008>in <VirtualHost 192.168.1.10:8008>änderepga-default.confes funktioniert wie erwartet. Ich möchte wissen, warum das so ist. Soweit ich weiß, liegt das daran, dass der Server den VirtualHost nicht als beste Übereinstimmung für die jeweilige IP-Adresse und den Port auswählt. (Diese Antwort bestätigt dasUnterschied zwischen _default_:* und *:* im VirtualHost-Kontext)

Ich habe auch mehrere andere Methoden ausprobiert, aber keine davon hat funktioniert, außer der oben genannten Methode. Im Folgenden sind die anderen Methoden aufgeführt. (Änderungen fürpga-default.conf)

  • ÄndernServerName 192.168.1.10ServerName 192.168.1.10:8008
  • GebrauchtServerAlias 192.168.1.10

Notiz- Mit der obigen Konfiguration <VirtualHost *:8008>haben einige meiner Kollegen erfolgreiche Ergebnisse erzielt. Dieses Problem trat nur bei mir auf.

Was habe ich hier übersehen? Wie kommt es, dass andere die erwarteten Ergebnisse erzielen, ich aber nicht?

Antwort1

Sie müssen den Servernamen immer in jedem virtuellen Host definieren.

Da Ihr „Standard“ wahrscheinlich zuerst geladen wird und kein bestimmter Servername definiert ist, greift er alle Anfragen ab. Sie können dies einfach ausprobieren, indem Sie „ServerName default“ im Standard-Virtualhost festlegen.

Wenn Sie also anfordern „http://192.168.1.10:8008" landen Sie nun im entsprechenden virtuellen Host.

Denken Sie also daran: Die bewährte Vorgehensweise besteht darin, in jedem einzelnen virtuellen Host immer eine eindeutige ServerName-Direktive zu definieren und zu bedenken, dass, wenn kein angeforderter Hostname mit den definierten virtuellen Hosts übereinstimmt, der erste virtuelle Host die Anforderung entgegennimmt. Und wenn Sie versehentlich in zwei virtuellen Hosts denselben Servernamen definieren, nimmt der erste geladene virtuelle Host die Anforderung entgegen.

verwandte Informationen