
Meine Serverinformationen sind
Server version: Apache/2.4.6 (CentOS)
Server built: Nov 19 2015 21:43:13
Ich versuche, einen virtuellen Host für zwei verschiedene Websites zu konfigurieren: biz.example.com und pin.example.com, die auf demselben Server gehostet werden. Unter „var/www/html/“ befinden sich zwei verschiedene Ordner mit den Namen „biz“ und „pin“ mit den jeweiligen Projektdateien für die beiden oben genannten Websites. Ich versuche, ihn auf die folgende Weise zu konfigurieren.
Innerhalb von /etc/hosts unter Konfiguration
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
xxx.xxx.xxx.xxx biz.example.com
xxx.xxx.xxx.xxx pin.example.com
xxx.xxx.xxx.xxx wird durch die Server-IP-Adresse ersetzt.
Innerhalb von /etc/httpd/conf/httpd.conf
IncludeOptional sites-enabled/*.conf
Unter /etc/httpd/sites-available befinden sich nun die Dateien biz.conf und pin.conf. Ich habe auch den Ordner sites-enabled unter /etc/httpd, der zwei Dateien enthält, die mit dem folgenden Befehl auf die Dateien biz.conf und pin.conf des Ordners sites-available verweisen
ln -s /etc/httpd/sites-available/biz.conf /etc/httpd/sites-enabled/biz.conf
ln -s /etc/httpd/sites-available/pin.conf /etc/httpd/sites-enabled/pin.conf
biz.conf hat folgendes
<VirtualHost *:80>
ServerName http://biz.example.com/
ServerAlias http://biz.example.com/
DocumentRoot "/var/www/html/biz"
<directory "/var/www/html/biz">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
Und die Konfiguration in der Datei pin.conf wird wie folgt bezeichnet:
<VirtualHost *:80>
ServerName http://pin.example.com/
ServerAlias http://pin.example.com/
DocumentRoot "/var/www/html/pin"
<directory "/var/www/html/pin">
Options Indexes FollowSymLinks
AllowOverride all
Order Deny,Allow
Allow from 127.0.0.1
</directory>
</VirtualHost>
Wenn ich in diesem Setup versuche, aufhttp://biz.example.com/, die richtige Website (biz website) wird geladen. Aber wenn ich versuche, darauf zuzugreifenhttp://pin.example.com/, dann wird auch die Biz-Website statt der Pin-Website geladen. Mehrere Konfigurationen funktionieren nicht zusammen.
Ich habe auch versucht, die virtuelle Konfiguration von biz.conf und pin.conf in einer einzigen Datei, biz.conf, zusammenzuführen, aber das hat nicht so gut funktioniert.
Antwort1
Antwort:
1) Der abschließende Schrägstrich muss aus ServerName und ServerAlias entfernt werden
2) Hier können wir den ServerAlias entfernen, da ServerName und ServerAlias beide gleich sind.
Antwort2
Entfernen Sie doppelte Anführungszeichen aus Ihrem Pfad
DocumentRoot /var/www/html/pin
<directory /var/www/html/pin>
Antwort3
Wenn ich in diesem Setup versuche, aufhttp://biz.example.com/, die richtige Website (biz website) wird geladen. Aber wenn ich versuche, darauf zuzugreifenhttp://pin.example.com/, dann wird auch die Biz-Website statt der Pin-Website geladen.
Das liegt daran, dass die beiden ServerName
- und ServerAlias
-Direktiven nicht übereinstimmen (falsche Syntax) und in diesem Fall die zuerst definierte Direktive VirtualHost
alle Anfragen erhält.
Das Verhalten wird in der Dokumentation mit einer sehr ähnlichen Konfiguration beschrieben:
# Ensure that Apache listens on port 80 Listen 80 <VirtualHost *:80> DocumentRoot "/www/example1" ServerName www.example.com # Other directives here </VirtualHost> <VirtualHost *:80> DocumentRoot "/www/example2" ServerName www.example.org # Other directives here </VirtualHost>
Die Sternchen entsprechen allen Adressen, sodass der Hauptserver keine Anfragen bearbeitet. Da der virtuelle Host
ServerName www.example.com
in der Konfigurationsdatei an erster Stelle steht, hat er die höchste Priorität und kann alsStandardoderprimärServer. Das bedeutet, dass eine empfangene Anfrage, die nicht mit einer der angegebenenServerName
Anweisungen übereinstimmt, zuerst von diesem Server bearbeitet wird<VirtualHost>
.
Lösung:
Das
ServerName
muss ohnehttp://
Präfix und ohne abschließenden Schrägstrich sein, d. h.ServerName biz.example.com
Und
ServerName pin.example.com
ServerAlias
kann entfernt werden, da es den gleichen Wert hat wieServerName
<Directory>
und</Directory>
sollte mit einem Großbuchstaben beginnenDie alte Zugriffskontrollsyntax von Apache 2.2 sollte auf die neue
Require
Syntax von Apache 2.4 geändert werden.Order Deny,Allow Allow from 127.0.0.1
sollte ersetzt werden durch
Require local
Sehen