Los hosts virtuales no funcionan en OSX Mavericks

En Mac OS X 10.9.3 he incluido http-vhosts en httpd.conf

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

He comentado DocumentRoot y Directory en httpd.conf

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

He agregado lo siguiente a mi archivo httpd-vhosts.conf

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

Y he agregado lo siguiente a mi archivo /etc/hosts

127.0.0.1    local.rocket-gen.com

He reiniciado Apache

sudo apachectl restart

Hay un index.html en ese directorio, pero cuando accedo a http://local.rocket-gen.com desde el navegador, obtengo un 404. Obtengo esto en los registros de errores.

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

No puedo entender por qué no está funcionando. Si creo ese directorio como DocumentRoot en httpd.conf, funciona. Pero necesito tener varios hosts virtuales, por lo que me gustaría que el archivo vhosts funcione.

Respuestas (3)

Parece que tienes casi todo correcto. Estoy ejecutando Mavericks con un par de docenas de hosts virtuales, por lo que debería funcionar para usted.

Primero, y esto podría ser todo lo que necesita hacer para arreglar las cosas, debe incluir su DocumentRoot entre comillas. Entonces,

DocumentRoot /Users/gdboling/Sites/rocket-gen

se convierte

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

A continuación, agregue lo siguiente a su /etc/hostsarchivo, en la línea que sigue inmediatamente a lo que ya tiene. Su hostsarchivo debe ser:

Tienes esta parte:

127.0.0.1    local.rocket-gen.com

Ahora agrega esto justo debajo:

::1     local.rocket-gen.com

Tengo cada uno de mis vhosts configurados de hostsesta manera.

La ::1 ...parte es lo que me faltaba.

Obviamente, su apache no puede encontrar su raíz de documento definida. En mi opinión, mezclas algunas cosas.

Primero, corrija el error tipográfico dentro del contenedor VirtualHost. Usted define el direccionamiento de un puerto con dos puntos, no con un "."

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

En segundo lugar, si desea alojar varios servidores por nombre y no por dirección IP, debe utilizar hosts virtuales basados ​​en nombres. Luego, por supuesto, en la configuración de Apache se perdió la directiva NameVirtualHost, si desea configurarlo de esta manera.

NameVirtualHost server1.example.org:80

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

SIEMPRE configure el nombre del servidor, de lo contrario, Apache no puede cambiar a su nueva raíz del documento.

En tercer lugar, en la parte principal de configuración de httpd.conf comentó el DocumentRoot. ¿Hiciste esto también con las reglas de acceso en la sección "Directorio /" para tu anterior DocumentRoot?

En cuarto lugar, si desea configurar VirtualHost duro en lugar de NameVirtualHost, no olvide la directiva Listen. Entonces para eso necesitas un

Listen *:80

en su principal httpd.conf. Si desea configurar diferentes servidores en diferentes direcciones IP, debe configurarlos de esta manera:

  • agregue la dirección IP y el nombre resoluble en /etc/hosts
  • agregue "Escuchar server1.example.com:80" en httpd.conf principal
  • refiérase a su instancia de servidor como<VirtualHost server1.example.com:80>...
  • SIEMPRE establezca el nombre del servidor

Esto me sucedió cuando actualicé a Mavericks (10.9.5). Apple parece haber eliminado "Web Sharing" de la aplicación "System Preferences", que era importante para la forma en que http.confse escribió el archivo.

Dos formas de solucionarlo:

  1. Inicie apache con WEBSHARING_ON definido:

apachectl -k inicio -D WEBSHARING_ON

  1. Edite el http.confarchivo para eliminar <IfDefine WEBSHARING_ON>y correspondiente </IfDefine>, PERO NO el contenido entre las etiquetas.