Virtuelle Hosts funktionieren nicht auf OSX Mavericks

In Mac OS X 10.9.3 habe ich http-vhosts in httpd.conf eingeschlossen

# Virtual hosts
Include /private/etc/apache2/extra/httpd-vhosts.conf

Ich habe das DocumentRoot und das Verzeichnis in httpd.conf auskommentiert

# DocumentRoot "/Library/WebServer/Documents"
# <Directory "/Library/WebServer/Documents">...</Directory>

Ich habe meiner httpd-vhosts.conf-Datei Folgendes hinzugefügt

<VirtualHost *.80>
    DocumentRoot /Users/gdboling/Sites/rocket-gen
    ServerName local.rocket-gen.com
    <Directory "/Users/gdboling/Sites/rocket-gen">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

Und ich habe Folgendes zu meiner /etc/hosts-Datei hinzugefügt

127.0.0.1    local.rocket-gen.com

Ich habe Apache neu gestartet

sudo apachectl restart

Es gibt eine index.html in diesem Verzeichnis, aber wenn ich über den Browser auf http://local.rocket-gen.com zugreife , erhalte ich eine 404. Ich erhalte dies in den Fehlerprotokollen

[Tue Jun 17 19:09:10 2014] [error] [client 127.0.0.1] File does not exist: /usr/htdocs

Ich kann nicht herausfinden, warum es nicht funktioniert. Wenn ich dieses Verzeichnis als DocumentRoot in httpd.conf erstelle, funktioniert es. Aber ich brauche mehrere virtuelle Hosts, also möchte ich die vhosts-Datei zum Laufen bringen.

Antworten (3)

Es sieht so aus, als hätten Sie fast alles richtig gemacht. Ich betreibe Mavericks mit ein paar Dutzend virtuellen Hosts, also sollte dies für Sie funktionieren.

Zuerst, und dies könnte alles sein, was Sie tun müssen, um Probleme zu beheben, müssen Sie Ihr DocumentRoot in Anführungszeichen setzen. So,

DocumentRoot /Users/gdboling/Sites/rocket-gen

wird

DocumentRoot "/Users/gdboling/Sites/rocket-gen"

Fügen Sie als Nächstes Folgendes zu Ihrer /etc/hostsDatei hinzu, in der Zeile, die unmittelbar auf das folgt, was Sie bereits haben. Ihre hostsDatei sollte sein:

Sie haben diesen Teil:

127.0.0.1    local.rocket-gen.com

Fügen Sie dies nun direkt darunter hinzu:

::1     local.rocket-gen.com

Ich habe jeden meiner Vhosts auf hostsdiese Weise eingestellt.

Das ::1 ...Teil ist das, was mir gefehlt hat.

Offensichtlich kann Ihr Apache seinen definierten Dokumentenstamm nicht finden. Meiner Meinung nach verwechselst du einiges.

Korrigieren Sie zunächst den Tippfehler im VirtualHost-Container. Die Adressierung eines Ports definieren Sie mit einem Doppelpunkt, nicht mit einem "."

<VirtualHost *:80>...</VirtualHost>

Zweitens, wenn Sie mehrere Server nach Namen und nicht nach IP-Adresse hosten möchten, müssen Sie namensbasierte virtuelle Hosts verwenden. Dann haben Sie natürlich in der Apache-Konfiguration die NameVirtualHost-Direktive verpasst, wenn Sie es so einrichten möchten.

NameVirtualHost server1.example.org:80

( http://httpd.apache.org/docs/2.2/vhosts/name-based.html )

Stellen Sie IMMER den ServerName ein, sonst kann Apache nicht auf Ihr neues Documentroot chdir zugreifen.

Drittens haben Sie im Hauptkonfigurationsteil von httpd.conf DocumentRoot auskommentiert. Haben Sie dies auch mit den Zugriffsregeln im Abschnitt "Verzeichnis /" für Ihr früheres DocumentRoot gemacht?

Viertens, wenn Sie einen harten VirtualHost anstelle von NameVirtualHost einrichten möchten, vergessen Sie nicht die Listen-Direktive. Dafür braucht man also eine

Listen *:80

in Ihrer Haupt-httpd.conf. Wenn Sie verschiedene Server auf verschiedenen IP-Adressen einrichten möchten, müssen Sie diese wie folgt konfigurieren:

  • Fügen Sie die IP-Adresse und den auflösbaren Namen in /etc/hosts hinzu
  • fügen Sie "Listen server1.example.com:80" in der Haupt-httpd.conf hinzu
  • beziehen Sie sich auf Ihre Serverinstanz wie<VirtualHost server1.example.com:80>...
  • Setzen Sie IMMER den ServerName

Dies ist mir passiert, als ich auf Mavericks (10.9.5) aktualisiert habe. Apple scheint die „Webfreigabe“ aus der App „Systemeinstellungen“ entfernt zu haben, was für die Art und Weise, wie die http.confDatei geschrieben wurde, wichtig war.

Zwei Möglichkeiten, es zu beheben:

  1. Starten Sie Apache mit definiertem WEBSHARING_ON:

apachectl -k start -D WEBSHARING_ON

  1. Bearbeiten Sie die http.confzu entfernende <IfDefine WEBSHARING_ON>und entsprechende Datei </IfDefine>, ABER NICHT den Inhalt zwischen den Tags.