2012-09-09 18 views
40

Pasé horas yendo en círculos siguiendo cada una de las guías que puedo encontrar en la red.Cómo ejecutar varios sitios en una instancia de apache

Quiero tener dos sitios que se ejecutan en una sola instancia de Apache, algo como esto - 192.168.2.8/site1 y 192.168.2.8/site2

he estado dando vueltas en círculos, pero al el momento tengo dos archivos conf en 'sites-available (enlace simbólico a sites-enabled)' que se parecen a esto:

<VirtualHost *:2000> 

ServerAdmin [email protected] 
ServerName site1 
ServerAlias site1 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site1/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site1/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site1/logs/error.log 
CustomLog /home/user/site1/logs/access.log combined 

</VirtualHost> 

y

<VirtualHost *:3000> 

ServerAdmin [email protected] 
ServerName site2 
ServerAlias site2 

# Indexes + Directory Root. 
DirectoryIndex index.html 
DocumentRoot /home/user/site2/ 

# CGI Directory 
ScriptAlias /cgi-bin/ /home/user/site2/cgi-bin/ 

Options +ExecCGI 

# Logfiles 
ErrorLog /home/user/site2/logs/error.log 
CustomLog /home/user/site2/logs/access.log combined 

</VirtualHost> 

http.conf se parece a esto:

NameVirtualHost *:2000 
NameVirtualHost *:3000 

En el momento en que estoy recibiendo este ERROR-

[error] VirtualHost *:80 — mixing * ports and non-* ports with a NameVirtualHostaddress is not supported, proceeding with undefined results 

ports.conf se parece a esto - (aunque no hay guías han mencionado ninguna necesidad de editar esto)

NameVirtualHost *:80 

Listen 80 
<IfModule mod_ssl.c> 
# If you add NameVirtualHost *:443 here, you will also have to change 
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl 
# to <VirtualHost *:443> 
# Server Name Indication for SSL named virtual hosts is currently not 
# supported by MSIE on Windows XP. 
Listen 443 
</IfModule> 

<IfModule mod_gnutls.c> 
Listen 443 
</IfModule> 

¿Alguien puede dar algunas instrucciones simples para que esto funcione? Cada guía que he encontrado dice que lo haga de una manera diferente, y cada una conduce a diferentes errores. Obviamente estoy haciendo algo mal pero no he encontrado una explicación clara de lo que podría ser.

Solo quiero un sitio accesible en el puerto 2000 y el otro accesible en el puerto 3000 (o lo que sea, simplemente seleccioné esos puertos para probar).

estoy corriendo servidor de Ubuntu 12.04 ...

=============

EDITAR

Seguido otra 'guía' ...

me he fijado ahora esto en los sitios de disposición:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName 192.168.2.10/site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName 192.168.2.10/site2 
</VirtualHost> 

ha configurado en apache2.conf:

ServerName site1 
ServerName site2 

han añadido este a ports.conf:

Listen 192.168.2.10:80 

==============

EDITAR

Ahora funciona, yo poner esto en un archivo conf en el sitio habilitado:

<VirtualHost *:81> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:82> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Lo tengo en ports.conf:

Listen *:80 
Listen *:81 
Listen *:82 

Lo tengo en apache2.conf:

ServerName site1 
ServerName site2 

no he encontrado esto en ninguna de las guías Me acaban de que trabajan a través de todo un día de ensayo y error, así que no sé si esto es una buena solución. Pero al menos funciona como quiero ahora.

+0

Me parece que necesita especificar nombres de host virtuales en NameVirtualHost. –

+0

Saludos, he intentado muchas cosas en ese sentido, ¿puedes ser más específico acerca de qué debo intentar poner allí? – Exbi

+0

Después de todo un día tratando de hacer que esto funcione, finalmente me encontré con la respuesta jajaja. Me siento mentalmente agotado, me voy a la cama. Dudo que mi solución de hack apache dudoso sea de interés para nadie, pero la editaré al final de mi pregunta. – Exbi

Respuesta

62

Su pregunta es mezclar algunos conceptos diferentes. Comenzó diciendo que quería ejecutar sitios en el mismo servidor utilizando el mismo dominio, pero en diferentes carpetas. Eso no requiere ninguna configuración especial. Una vez que ejecuta el dominio único, solo crea carpetas debajo de ese docroot.

Según el resto de su pregunta, lo que realmente desea hacer es ejecutar varios sitios en el mismo servidor con sus propios nombres de dominio.

La mejor documentación que encontrará sobre el tema es la documentación virtual host en el manual de Apache.

Hay dos tipos de hosts virtuales: basado en nombre y basado en IP. Basado en el nombre le permite usar una sola dirección IP, mientras que la basada en IP requiere una dirección IP diferente para cada sitio. En función de su descripción anterior, desea utilizar hosts virtuales basados ​​en nombres.

El error inicial que recibía se debía a que estaba utilizando puertos diferentes a la línea NameVirtualHost. Si realmente desea que los sitios se presten desde puertos que no sean 80, deberá tener una entrada NameVirtualHost para cada puerto.

Suponiendo que está empezando desde cero, esto es mucho más simple de lo que parece.

Lo primero que debe hacer es decirle a apache que va a utilizar hosts virtuales basados ​​en nombres.

NameVirtualHost *:80 

Ahora que Apache sabe lo que quiere hacer, puede configurar sus definiciones vhost:

<VirtualHost *:80> 
    DocumentRoot "/home/user/site1/" 
    ServerName site1 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/home/user/site2/" 
    ServerName site2 
</VirtualHost> 

Tenga en cuenta que se pueden abrir tantos sitios como desee en el mismo puerto. El ServerName siendo diferente es suficiente para decirle a Apache qué vhost usar. Además, la directiva ServerName siempre es el dominio/nombre de host y nunca debe incluir una ruta.

Si decide ejecutar sitios en un puerto que no sea 80, siempre tendrá que incluir el número de puerto en la URL al acceder al sitio. Así que en lugar de ir a http://example.com que tendría que ir a http://example.com:81

+0

puede por favor elaborar el caso para el puerto que no sea 80. Realmente me estoy confundiendo al implementar esto. :) – user79307

+1

@accssharma Por defecto apache (y todos los demás software de servidor web) escuchan conexiones en el puerto 80. Debido a esto, los navegadores están codificados para conectarse al puerto 80 cuando solicitan sitios web. Si ejecuta un sitio web en un puerto que no sea 80, sus usuarios siempre deberán incluir el número de puerto cuando soliciten el sitio. Recomiendo enfáticamente en contra de esto. – bradym

+0

@accssharma Si elige ejecutar un sitio en un puerto que no sea 80, necesitará una línea NameVirtualHost que especifique el puerto, luego contenedores VirtualHost que especifiquen ese mismo puerto. Básicamente, copia lo que tengo arriba y reemplaza 80 con el puerto donde pretendes ejecutar el sitio. – bradym

3

Sí con el host virtual puede tener tantos programas paralelos como desee:

abierto

/etc/httpd/conf/httpd.conf

Listen 81 
Listen 82 
Listen 83 

<VirtualHost *:81> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site1/html 
    ServerName site1.com 
    ErrorLog logs/site1-error_log 
    CustomLog logs/site1-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site1/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:82> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site2/html 
    ServerName site2.com 
    ErrorLog logs/site2-error_log 
    CustomLog logs/site2-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site2/cgi-bin/" 
</VirtualHost> 

<VirtualHost *:83> 
    ServerAdmin [email protected] 
    DocumentRoot /var/www/site3/html 
    ServerName site3.com 
    ErrorLog logs/site3-error_log 
    CustomLog logs/site3-access_log common 
    ScriptAlias /cgi-bin/ "/var/www/site3/cgi-bin/" 
</VirtualHost> 

Reiniciar Apache

service httpd restart

Ahora puede referirse Sitio1:

http://<ip-address>:81/ 
http://<ip-address>:81/cgi-bin/ 

Sitio2:

http://<ip-address>:82/ 
http://<ip-address>:82/cgi-bin/ 

Sitio3:

http://<ip-address>:83/ 
http://<ip-address>:83/cgi-bin/ 

Si la ruta no está codificado en cualquier secuencia de comandos a continuación, sus sitios web debería funcionar sin problemas.

Cuestiones relacionadas