2011-11-07 10 views
7

Actualmente mi servidor Apache está configurado como tal¿Apache2 es compatible con el alojamiento virtual de subdominios?

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

El problema es que todo por debajo de /var/www es accesible desde todas partes. Si tengo una página web /var/www/john/bio.html, después de que la página web podría pedir prestado scripts/fotos de var/www/jane/

Quiero configurar mi servidor Apache como tal

<VirtualHost *:80> 
ServerName www.example.com 
ServerAlias example.com 
DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.john.example.com 
ServerAlias john.example.com 
DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
ServerName www.jane.example.com 
ServerAlias jane.example.com 
DocumentRoot /var/www/jane 
</VirtualHost> 

Así que todos los archivos de usuario john van en la /var/www/john/ carpeta, y lo mismo para el usuario jane. Entonces, con enlaces simbólicos apagados (por defecto), y el acceso sólo se proporcionan a partir de /var/www/user/ hacia abajo (de nuevo por defecto), no tiene que preocuparse de john's página web, incluyendo scripts/jane's imágenes de la página web.

Respuesta

21

El uso de medidas locales solamente (/etc/hosts en lugar de un DNS) que encontramos que este hecho puede trabajar.

Primero, cambie su archivo /etc/hosts para tener una asignación de los nombres de su sitio web deseado (www.example.com) y la dirección IP de destino (192.168.1.1). Utilicé mi dirección IP local.

IPAddress    Hostname     Alias 
-----------  -------------------------- ------------------ 
192.168.1.1  www.example.com    example.com 
192.168.1.1  www.john.example.com   john.example.com 
192.168.1.1  www.jane.example.com   jane.example.com 

Su navegador web va a revisar su archivo /etc/hosts antes mirando a la World Wide Web.

Siguiente ir a través de todos sus archivos de configuración de Apache (httpd.conf, apache2.conf, ports.conf, conf.d/*) y asegúrese de exactamente un archivo se emite el comando NameVirtualHost *:80 (que no tiene por qué ser el puerto :80 pero si se emite más de una vez, obtendrá this problem). La mía fue emitida en /etc/apache2/ports.conf, por lo que poner el suyo allí si es necesario. Por último, actualizar el archivo de configuración de Apache (la mía estaba en /etc/apache2/sites-available/default) como tal.

<VirtualHost *:80> 
    ServerName www.example.com 
    ServerAlias example.com 
    DocumentRoot /var/www 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.john.example.com 
    ServerAlias john.example.com 
    DocumentRoot /var/www/john 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.jane.example.com 
    ServerAlias jane.example.com 
    DocumentRoot /var/www/jane 
</VirtualHost> 

Como paso final, es posible que tenga que añadir los sitios web a Apache emitiendo los siguientes comandos (este paso no es necesario, si se le da todos los sitios web en sites-available/default y no en archivos separados para sitios web individuales).

# a2ensite www.example.com 
# a2ensite www.john.example.com 
# a2ensite www.jane.example.com 

Después de hacer esto, john.example.com irán a /var/www/john. Ese directorio actuará entonces como el directorio raíz y john ya no tendrá acceso a www y, por lo tanto, no tendrá acceso a /var/www/jane.

Del mismo modo, después de hacer esto, jane.example.com irá a /var/www/jane. Ese directorio actuará entonces como el directorio raíz y jane ya no tendrá acceso a www y, por lo tanto, no tendrá acceso a /var/www/john.

Con enlaces simbólicos apagado --por default-- ni directorios podrán acceder entre sí

+0

Esto me ayudó a recordar que me olvidé de cambiar mi archivo de hosts. Gracias hombre del pasado. –

+0

@MeowMix me alegro de poder ayudar al menos a una persona – puk

+1

Comando 'a2ensite example.com' crea el enlace simbólico de' sites-available/example.com' a 'sites-enabled/example.com', el comando opuesto es' a2dissite example.com ', que lo desactivaría. – Honza

Cuestiones relacionadas