2011-08-01 14 views
8

El problema es que solo tengo un nombre de dominio en el que se deben ejecutar 3 productos diferentes (2 de ellos basados ​​en PHP, 1 python). Entonces, lo que tengo que hacer es tratar la ruta en url como un host virtual diferente; es decir:Apache: trata la ruta url como host virtual

www.domain.com/first_url/ 
www.domain.com/second_url/ 
www.domain.com/third_url/ 

Donde primero a tercero actuarán como servidores virtuales separados.

¿Alguna pista de cómo hacer esto?

Respuesta

1

Probablemente desee hacer algo con las directivas apache-config, ya que está solicitando una solución de host virtual. Apache solo puede trabajar con virtualHosts como dominios reales, como explicó @cweiske.

La solución en este caso sería utilizar un archivo .htaccess en los subdirectorios en los que está trabajando, o configurar un bloque <Directory "/web/root/subdir">..</Directory> dentro de su configuración de host actual (virtual).

También puede optar por alojarlas en diferentes subdominios si per se desee ejecutar como VirtualHosts ('' app1.domain.org)

+0

Bueno el problema es que tengo solamente 1 dominio sin posibilidad de añadir más subdominios. Y necesito ejecutar 3 aplicaciones diferentes en él. La directiva de directorio no es una opción, ya que no puedo colocar scrpits de inicio de WSGI en ella. – Ruslan

+0

@Ruslan: sin experiencia de WSGI, un escaneo rápido de los documentos indica que puede 'WSGIScriptAlias ​​/ app1/usr/local/wsgi/scripts/app1.wsgi' seguido de' WSGIScriptAlias ​​/ app2/usr/local/wsgi/scripts/app2.wsgi', etc. No estoy seguro si eso es suficiente? – PtPazuzu

+0

Bueno, estoy terminando con WSGIScriptAlias ​​no permitido aquí error – Ruslan

2

Un "host virtual" en apache solo funciona en nombres de dominio, no en partes de la ruta. No puedes lograr lo que quieres.

16

Ha sido un tiempo desde que se hizo esta pregunta, pero ya que estaba buscando una solución para un tipo similar de problema, agregaré la solución.

Esto se puede lograr utilizando la directiva Alias ​​o AliasMatch. Más detalles se pueden encontrar aquí:

http://httpd.apache.org/docs/2.2/mod/mod_alias.html

Alias /first_url/ /var/www/first_url_resources 
+0

Respuesta anterior e incluso una pregunta más antigua, lo sé, pero este era exactamente el tipo de solución de una sola línea que estaba buscando. No es fácil buscar algo cuando no está seguro de la sintaxis o el contexto de lo que está buscando. ¡Gracias! –

+0

Una cosa más a tener en cuenta: la directiva 'Alias ​​/ url/path/to/dir' puede ser seguida por una directiva' 'para permitir reemplazos para ese directorio específico. –

0

En este ejemplo se explica cómo asignar diferentes versiones de PHP por directorio, sino que también se puede adaptar para añadir soporte de Python mediante la ejecución de Python intérprete como fast_cgi en particular, el puerto

Para el propósito del ejemplo, supongo que hay un directorio separado para cada versión de PHP y se nombran según la versión de PHP que los ejecuta, pero esto se puede ajustar

mkdir /home/user/www 
mkdir /home/user/www/5.6.5 
mkdir /home/user/www/7.0.2 
mkdir /home/user/www/7.0.4 
mkdir /home/user/www/7.0.6 

crear enlaces simbólicos a directorios que deben ser manejadas por diferentes versiones de PHP

sudo ln -s /home/user/www/7.0.2/ /var/www/html/7.0.2 
sudo ln -s /home/user/www/7.0.4/ /var/www/html/7.0.4 
sudo ln -s /home/user/www/7.0.6/ /var/www/html/7.0.6 

a continuación, añadir las siguientes líneas a /etc/apache2/sites-enabled/000-default.conf de máquina virtual predeterminada *:80

(para su necesidad se puede configurar una más rápida controlador CGI aquí por la página web que requiere Python), supongo php 5.6.5 ejecuta en el puerto 9999, 7.0.2 ejecuta en el puerto 9998 etc ...

DirectoryIndex index.html index.php 
ProxyPassMatch ^/5.6.5/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9999/var/www/html/ 
ProxyPassMatch ^/7.0.2/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9998/var/www/html/ 
ProxyPassMatch ^/7.0.4/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9997/var/www/html/ 
ProxyPassMatch ^/7.0.6/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9996/var/www/html/ 

Asumiendo que su servidor está apuntado por example.com puedes probarlo en

http://example.com/5.6.5/ 
http://example.com/7.0.2/ 
http://example.com/7.0.4/ 
http://example.com/7.0.6/ 
Cuestiones relacionadas