crear - virtual host apache windows
¿Cómo puedo alojar múltiples sitios MVC3 en un único host virtual que ejecuta Apache2? (1)
Estoy tratando de configurar mod_mono con Apache2 en OSX. Me gustaría ejecutar varios proyectos MVC3 en el mismo host virtual, pero por alguna razón, solo el primero de la lista está funcionando. 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.
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>
su problema es que su nombre de Alias y su ruta física son una y la misma, por lo que apache no sabe cuál es el que debe servir.
NOTA: estoy dando la respuesta basada en la configuración general de Apache2, y no en mod_mono, tal vez mod_mono hace algo para evitar esto, no he configurado las aplicaciones MVC bajo un cuadro * nix antes :-)
De todas formas...
Si miras las configuraciones de tu camino tienes ...
/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 a las rutas que intenta mapear.
/Library/WebServer/vhosts/api = /
/Library/WebServer/vhosts/api/gamecenter = /gamecenter
/Library/WebServer/vhosts/api/gamecenter-stage = /gamecenter-stage
Entonces le dices a Apache que
/ = /
/gamecenter = /gamecenter
/gamecenter-stage = /gamecenter-stage
Cuando Apache intenta entregar el contenido, si no hay un subfijo de archivo o una barra (como en los últimos 2), automáticamente subfijará la carpeta con un / luego emitirá un redireccionamiento (306 creo) esencialmente diciéndole al navegador que redirija desde EG :
/gamecenter to /gamecenter/
Con el alias en su lugar para decirle que Alias ... está en la ubicación x, entonces tiene que intentar y hacer una declaración 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 confundiéndose, y también lo hace cualquier configuración de host virtual cuando no puede resolver la ruta, y eso devuelve la raíz del sitio web.
Sin embargo, como digo, este es un comportamiento general de Apache NO-MONO, es posible que mod_mono pueda alterar el proceso de procesamiento de alguna manera para que pueda cambiar este comportamiento.
Lo que recomendaría es dividir esto en 3 hosts virtuales que puede hacer muy fácilmente incluso con una sola IP.
Lo primero que querrá hacer es en algún lugar de su archivo de configuración maestro de Apache, tener una
Listen 9005
declaración. Esto hará que TODAS las instancias virtuales escuchen en ese puerto, así como cualquier otro puerto configurado EG: 80
A continuación, asegúrese de tener una captura predeterminada de todos los hosts virtuales, esto detectará cualquier nombre de servidor que no esté asignado en otro lugar:
<VirtualHost *>
DocumentRoot "/some/folder/where/the/default/is/"
#Followed by other server directives. NOTE: there is NO servername line
</VirtualHost>
Una vez que tengas esa configuración, luego pasa a tu subdominio "api"
<VirtualHost *>
ServerName api
DocumentRoot "/Library/WebServer/vhosts/api/"
#Other required directives here
</VirtualHost>
En este punto, voy a hacer una pausa para discutir su nombre de dominio. Si se trata de un sistema de prueba interno (que sospecho que es), la vida con los dominios virtuales le resultará mucho más fácil si instala un servidor DNS en su casilla, y luego lo configura como un dominio maestro utilizando una dirección de red interna privada.
P.EJ:
Cree una zona raíz y llámela "mydevnetwork.local"
a continuación, agregue los nombres de la máquina a ella:
EG: si tu PC se llama devpc1, crea una dirección IP para "devpc1.mydevnetwork.local" y dale a tu PC una dirección IP estática de EG: 192.168.50.1
A continuación, establezca un alias para que así
api.mydevnetwork.local = devpc1.mydevnetwork.local
No tengo el espacio para hacer una publicación completa de configuración de DNS aquí, pero espero que tengas la idea.
Una vez que haya configurado el DNS (o, como mínimo, las entradas del archivo del host), sus hosts virtuales bajo Apache serán realmente fáciles de administrar:
<VirtualHost *>
ServerName api.mydevnetwork.local
DocumentRoot "/Library/WebServer/vhosts/api/"
#Other required directives here
</VirtualHost>
y fácil de trasladar a otra máquina si usted también lo necesita.
Puede configurar el resto de sus hosts virtuales de la misma manera
<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: establezca las rutas para que sean iguales a las que tenía anteriormente, y aunque esto funcionará, le recomiendo encarecidamente que le dé a cada una su propia carpeta única, generalmente hago 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
Con suerte, si lo anterior no es una solución completa, al menos podría obtener algunas ideas adicionales de investigación.