2009-12-21 20 views
5

Estoy intentando escribir sobre 5 sitios web de todos en un servidor Apache, que es de una sola dirección IP.Apache 2 sites-available

Por ejemplo:

  • /var/www/sitio1
  • /var/www/site2
  • /var/www/acuáticos3
  • /var/www/acuáticos4
  • /var/www/site5

Sin embargo, si creo un enlace en el sitio 2 solo uso, por ejemplo. /index.php, esperas que se vea en /var/www/site2/index.php ... pero en realidad se resuelve en /var/www/index.php.

¿Hay alguna forma de configurar Apache para saber que las carpetas de sitios independientes deben comportarse y resolver a las carpetas separadas?

Este es mi archivo de sitios-disponibles en este momento. Una configuración bastante por defecto creo:

<VirtualHost *:80> 
    ServerAdmin [email protected] 

    DocumentRoot /var/www 
    <Directory /> 
      Options FollowSymLinks 
      AllowOverride None 
    </Directory> 
    <Directory /var/www/> 
      Options Indexes FollowSymLinks MultiViews 
      AllowOverride all 
      Order allow,deny 
      allow from all 
    </Directory> 

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ 
    <Directory "/usr/lib/cgi-bin"> 
      AllowOverride None 
      Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
      Order allow,deny 
      Allow from all 
    </Directory> 

    ErrorLog /var/log/apache2/error.log 

    # Possible values include: debug, info, notice, warn, error, crit, 
    # alert, emerg. 
    LogLevel warn 

    CustomLog /var/log/apache2/access.log combined 

Alias /doc/ "/usr/share/doc/" 
<Directory "/usr/share/doc/"> 
    Options Indexes MultiViews FollowSymLinks 
    AllowOverride None 
    Order deny,allow 
    Deny from all 
    Allow from 127.0.0.0/255.0.0.0 ::1/128 
</Directory> 

cualquier ayuda sería apreciada.

de agradecimiento-amablemente.

Andrew Barlow

+1

se las arregló para conseguir lo que quería con mi propuesta o ¿todavía te estás perdiendo algo? – Zeograd

+0

No, eso hace el trabajo a la perfección. ¡¡¡Gracias!!! – Schodemeiss

Respuesta

11

Se necesita una directiva ServerName dentro del <VirtualHost>. Se le dirá al servidor host virtual, que está actualmente en uso en función de la petición del navegador (si el acceso de los clientes o http://site1.example.comhttp://site2.example.com, que se conectarán a la misma IP, por lo tanto, el servidor, pero la solicitud contiene la solicitud de URL original). Tendrá que duplicar su bloque <VirtualHost> para tener uno por sitio alojado. Cada bloque se diferenciará por su ServerName y DocumentRoot principalmente. Puede usar "apache2ctl -S" para ver cómo apache entendió la configuración de su host virtual.

Se puede utilizar un solo archivo con este tipo de contenido:

<VirtualHost *:80> 
    ServerName site1.myserver.com 
    DocumentRoot /var/www/site1 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site2.myserver.com 
    DocumentRoot /var/www/site2 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site3.myserver.com 
    DocumentRoot /var/www/site3 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site4.myserver.com 
    DocumentRoot /var/www/site4 
    ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName site5.myserver.com 
    DocumentRoot /var/www/site5 
    ... 
</VirtualHost> 

Por supuesto, puede que asegurarse de que el DNS para todos los nombre termina en el IP. No es necesario que sean subdominios, siempre que caigan en la IP de su servidor y tenga un ServerName correspondiente. Si necesita nombres adicionales para un solo sitio, puede agregarlos con "ServerAlias ​​secondname.myserver.com thirdname.myserver.com" debajo de ServerName

+0

Creo que entiendo, pero ¿puedes escribirme un ejemplo rápido para poner en mi archivo por favor? – Schodemeiss

+0

Actualicé la respuesta para incluirlo – Zeograd

+0

Gracias por esto. Un absoluto salvavidas! – Schodemeiss

3

@ La respuesta de Zeograd es probablemente la respuesta correcta para la mayoría de las soluciones, sin embargo tuve una problema similar y todo lo que tenía que hacer era habilitar el módulo de reescritura con el comando a2enmod.

Esto es lo que me encontré a través de línea de comandos en Ubuntu :

sudo a2enmod rewrite 
sudo service apache2 restart 

Si sudo service apache2 restart no funciona, puede intentar:

sudo /etc/init.d/apache2 restart 
Cuestiones relacionadas