2011-06-08 7 views
21

Estoy intentando configurar mod_mono con Apache2 en OSX. Me gustaría ejecutar múltiples proyectos de MVC3 en el mismo host virtual, pero por alguna razón solo funciona la primera lista. Cualquier ayuda sobre esto sería muy apreciada ya que no hay mucha documentación sobre esto. He probado muchas opciones de configuración diferentes, ninguna de las cuales parece funcionar.¿Cómo puedo alojar varios sitios MVC3 en un solo host virtual que ejecuta Apache2?

Listen *:9005 
<VirtualHost *:9005> 
    DocumentRoot "/Library/WebServer/vhosts/api" 
    ServerName api 
    MonoAutoApplication disabled 

    Alias /gamecenter "/Library/WebServer/vhosts/api/gamecenter" 
    AddMonoApplications gamecenter "/gamecenter:/Library/WebServer/vhosts/api/gamecenter" 
    MonoServerPath gamecenter "/usr/bin/mod-mono-server4" 
    MonoDebug gamecenter true 
    MonoSetEnv gamecenter MONO_IOMAP=all 
    MonoUnixSocket gamecenter-stage /tmp/mod_mono_server_gc 
    <Location /gamecenter> 
    Allow from all 
    Order allow,deny 
    MonoSetServerAlias gamecenter 
    SetHandler mono 
    SetOutputFilter DEFLATE 
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary 
    </Location> 

    Alias /gamecenter-stage "/Library/WebServer/vhosts/api/gamecenter-stage" 
    MonoServerPath gamecenter-stage "/usr/bin/mod-mono-server4" 
    MonoDebug gamecenter-stage true 
    MonoSetEnv gamecenter-stage MONO_IOMAP=all 
    AddMonoApplications gamecenter-stage "/gamecenter-stage:/Library/WebServer/vhosts/api/gamecenter-stage" 
    MonoUnixSocket gamecenter-stage /tmp/mod_mono_server_gcs 
    <Location /gamecenter-stage> 
    Allow from all 
    Order allow,deny 
    MonoSetServerAlias gamecenter-stage 
    SetHandler mono 
    SetOutputFilter DEFLATE 
    SetEnvIfNoCase Request_URI "\.(?:gif|jpe?g|png)$" no-gzip dont-vary 
    </Location> 

    <IfModule mod_deflate.c> 
    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/javascript 
    </IfModule> 
</VirtualHost> 
+0

Hola, ¿ya has resuelto este problema? Tengo el mismo problema. – branoholy

+0

nada todavía. he intentado todas las configuraciones que pude encontrar y ninguna de ellas parece resolver esto. aún así mira. – chris

+0

si va a votar y editar mi pregunta, asegúrese de saber de antemano cuál es la pregunta. – chris

Respuesta

3

su problema es que su nombre de alias y la ruta física son una y la misma, por lo que apache no sabe cuál de ellos para servir para arriba.

NOTA: Le voy a dar la respuesta basándose en la configuración general de Apache 2, y no en mod_mono, tal vez mod_mono hace algo para evitar esto, he no establece MVC aplicaciones en el marco de un cuadro de * nix antes :-)

en fin ...

si nos fijamos en las configuraciones de ruta que ha ...

/Library/WebServer/vhosts/api 
/Library/WebServer/vhosts/api/gamecenter 
/Library/WebServer/vhosts/api/gamecenter-stage 

sin sus alias en su lugar, estos ya se resuelven en los caminos de su tratando de trazar.

/Library/WebServer/vhosts/api =/
/Library/WebServer/vhosts/api/gamecenter = /gamecenter 
/Library/WebServer/vhosts/api/gamecenter-stage = /gamecenter-stage 

Su continuación, indica a Apache que

/ =/
/gamecenter = /gamecenter 
/gamecenter-stage = /gamecenter-stage 

Cuando Apache intenta entregar el contenido si no hay subfijo archivo o barra existente (como en el último 2) será automáticamente, subfijo la carpeta con a/a continuación, enviar una redirección (306 creo) diciendo esencialmente el navegador para redirigir de EG:

/gamecenter to /gamecenter/ 

con el alias en lugar de decir que ese alias ... es en la ubicación x, entonces h como para tratar de hacer una desicion para servir

/gamecenter/ 

o

/gamecenter/gamecenter/../ (Because in terms of folder structure the alias name is 1 folder level down in the web than it is physically) 

y termina por confundirse, y lo mismo ocurre con lo que la constitución de cualquier máquina virtual hace cuando es incapaz de resolver la ruta, y que es devuelve la raíz del sitio web.

AS I SAY sin embargo, este es el comportamiento general de Apache NO MONO, es posible que mod_mono modifique la canalización de procesamiento de alguna manera que puede cambiar este comportamiento.

Lo que recomendaría es dividir esto en 3 hosts virtuales que puede hacer muy fácilmente incluso en una sola IP.

Lo primero que querrá hacer es somwhere en su principal archivo de configuración de Apache, tiene declaración

Listen 9005 

.Esto hará que todas las instancias virtuales escuche en ese puerto, así como cualquier otro puerto configurado Ejem: 80

A continuación asegúrese de que tiene una captura de forma predeterminada toda máquina virtual, esto va a recoger el nombre del servidor no asignada en otra parte:

<VirtualHost *> 
    DocumentRoot "/some/folder/where/the/default/is/" 
    #Followed by other server directives. NOTE: there is NO servername line 
</VirtualHost> 

Una vez que tenga que configurar, para luego pasar a su "api" sub dominio

<VirtualHost *> 
    ServerName api 
    DocumentRoot "/Library/WebServer/vhosts/api/" 
    #Other required directives here 
</VirtualHost> 

en este punto, voy a hacer una pausa para hablar de su nombre de dominio. Si se trata de un sistema de prueba interno (que sospecho que es), verá que la vida con dominios virtuales es mucho más fácil si instala un servidor DNS en su buzón y luego lo configura como un dominio maestro utilizando una dirección de red interna privada.

Ejem:

Crear una zona de la raíz, y lo llaman "mydevnetwork.local"

continuación, agregue los nombres de máquina a la misma:

Por ejemplo, si su PC se llama devpc1, crear una IP abordar para "devpc1.mydevnetwork.local" y darle a su PC una dirección IP estática de EG: 192.168.50.1

asentando después un alias para que así

api.myde vnetwork.local = devpc1.mydevnetwork.local

No tengo espacio suficiente para hacer una publicación de configuración de DNS completa aquí, pero espero que entiendas la idea.

Una vez que haya DNS (o en un archivo de entradas mínimas archivo host), creado, a continuación, sus anfitriones virtuales bajo Apache llegar a ser realmente fácil de manejar:

<VirtualHost *> 
    ServerName api.mydevnetwork.local 
    DocumentRoot "/Library/WebServer/vhosts/api/" 
    #Other required directives here 
</VirtualHost> 

y fácil de mudarme a otra máquina en caso de necesitar demasiado .

Puede configurar el resto de sus anfitriones virtuales en la misma forma

<VirtualHost *> 
    ServerName gamecenter.mydevnetwork.local 
    DocumentRoot "/Library/WebServer/vhosts/api/gamecenter/" 
    #Other required directives here 
</VirtualHost> 

<VirtualHost *> 
    ServerName gamecenter-stage.mydevnetwork.local 
    DocumentRoot "/Library/WebServer/vhosts/api/gamecenter-stage/" 
    #Other required directives here 
</VirtualHost> 

Nota Iv'e establecen los caminos a ser el mismo que tenías anteriormente, ya pesar de que esto va a funcionar, me 'd recomendamos que dar a cada uno su propia carpeta única, por lo general hacer algo como:

wwwroot 
    api.mydevnetwork.local 
     htdocs <-- Web files go here 
     cgi-bin <-- cgi scripts go here and it's mapped to /cgi-bin/ 
     logs  <-- logs here 
     access <-- htpasswd files here 

Esperemos que si lo anterior no es una solución completa, es posible que al menos obtener algunas ideas adicionales de investigación de la misma.

+0

Había perdido la esperanza de que había una solución por ahí. Definitivamente voy a intentarlo e informaré. gracias. – chris

+0

@chris, ¿esto funcionó para ti? El problema que tengo es que, cuando configuro varios hosts virtuales, se generan varias instancias mod-mono-server4. Me gustaría poder ejecutar múltiples aplicaciones MVC desde la misma instancia de mod-mono-server4, pero no he podido averiguar cómo. ¿Eso es similar a tu problema? – ken

Cuestiones relacionadas