Mehrere virtuelle Hosts in Centos 7 arbeiten nicht zusammen

Mehrere virtuelle Hosts in Centos 7 arbeiten nicht zusammen

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 VirtualHostalle Anfragen erhält.

Das Verhalten wird in der Dokumentation mit einer sehr ähnlichen Konfiguration beschrieben:

Ausführen mehrerer namensbasierter Websites unter einer einzigen IP-Adresse (httpd.apache.org/docs/2.4/vhosts/examples.html)

# 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.comin 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 angegebenen ServerNameAnweisungen übereinstimmt, zuerst von diesem Server bearbeitet wird <VirtualHost>.


Lösung:

  1. Das ServerNamemuss ohne http://Präfix und ohne abschließenden Schrägstrich sein, d. h.

    ServerName biz.example.com
    

    Und

    ServerName pin.example.com
    
  2. ServerAliaskann entfernt werden, da es den gleichen Wert hat wieServerName

  3. <Directory>und </Directory>sollte mit einem Großbuchstaben beginnen

  4. Die alte Zugriffskontrollsyntax von Apache 2.2 sollte auf die neue RequireSyntax von Apache 2.4 geändert werden.

    Order Deny,Allow
    Allow from 127.0.0.1
    

    sollte ersetzt werden durch

    Require local
    

    Sehen


verwandte Informationen