2011-06-08 2 views
21

J'essaye de configurer mod_mono avec Apache2 sur OSX. Je voudrais exécuter plusieurs projets MVC3 sur le même hôte virtuel, mais pour une raison quelconque, seul le premier listé fonctionne. Toute aide à ce sujet serait très appréciée car il n'y a pas beaucoup de documentation à ce sujet. J'ai essayé beaucoup d'options de configuration différentes, dont aucune ne semble fonctionner.Comment héberger plusieurs sites MVC3 sur un seul hôte virtuel exécutant 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

Bonjour, avez-vous déjà résolu ce problème? J'ai le même problème. – branoholy

+0

rien encore. J'ai essayé toutes les configurations que j'ai pu trouver et aucune d'entre elles ne semble résoudre ce problème. regarde quand même. – chris

+0

Si vous voulez voter et éditer ma question, assurez-vous de savoir d'abord de quoi il s'agit. – chris

Répondre

3

votre problème est que votre nom d'alias et le chemin physique sont une seule et même, si apache ne sait pas lequel de servir.

NOTE: Je donne la réponse en fonction de la configuration générale Apache2, et non sur mod_mono, peut-être mod_mono fait quelque chose pour éviter cela, je l'ai pas défini applications MVC sous une boîte * nix avant :-)

Quoi qu'il en soit ...

si vous regardez vos configurations de chemin que vous avez ...

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

sans vos alias en place, ceux-ci déjà résoudre les chemins que vous essayez de la carte.

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

Votre puis dire Apache

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

Lorsque Apache tente de livrer le contenu s'il n'y a pas de fichier subfix ou slash existant (comme dans les 2 derniers), il sera automatiquement subfix le dossier avec a/émettre alors une redirection (306 je crois) dire essentiellement le navigateur pour rediriger de EG:

/gamecenter to /gamecenter/ 

Avec l'alias en place pour lui dire que alias ... est à l'emplacement x il alors h pour essayer de faire un desicion pour servir

/gamecenter/ 

ou

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

et finit par se confondre, et le fait que tout hôte virtuel mis en place fait quand il est incapable de résoudre le chemin, et qui est retourne la racine du site. Comme je le dis, cependant, il s'agit d'un comportement général d'Apache NON-MONO, il est possible que mod_mono puisse modifier le pipeline de traitement d'une manière ou d'une autre, ce qui peut changer ce comportement.

Ce que je recommanderais est de diviser ceci en 3 hôtes virtuels que vous pouvez faire très très facilement même sur une seule IP.

La première chose que vous voulez faire est somwhere dans votre fichier de configuration maître Apache, ont une déclaration

Listen 9005 

.Ainsi, tous les instances virtuelles écouter sur ce port, ainsi que tout autre port configuré EG: 80

Suivant Assurez-vous que vous avez une prise par défaut tout hôte virtuel, ce attrapera un nom de serveur ne sont pas mappés ailleurs:

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

Une fois que vous avez cette installation, déplacez ensuite sur votre « api » sous-domaine

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

à ce stade, je vais faire une pause pour discuter de votre nom de domaine. S'il s'agit d'un système de test interne (ce que je soupçonne), vous trouverez la vie avec des domaines virtuels plus facile si vous installez un serveur DNS sur votre boîte, puis configurez-le comme un domaine maître en utilisant une adresse réseau interne privée.

EG:

Créer une zone racine, et l'appellent "mydevnetwork.local"

ajouter ensuite les noms de machines à elle:

EG: si votre PC est appelé devpc1, créez une adresse IP adresse pour "devpc1.mydevnetwork.local" et donner à votre PC une adresse IP statique EG: 192.168.50.1

Ensuite, définissez un alias pour que si

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

Iv'e n'a pas la place pour faire un post complet de configuration DNS ici, mais j'espère que vous avez l'idée.

Une fois que vous avez DNS (ou à une entrée de fichier hôte minimum) mis en place, alors vos hôtes virtuels sous Apache devient vraiment facile à gérer:

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

et facile à déplacer vers une autre machine si vous avez besoin aussi .

Vous pouvez régler le reste de vos hôtes virtuels dans la même façon

<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> 

Remarque iv'e définir les chemins pour les mêmes que vous aviez plus haut, et même si cela va fonctionner, je « d conseille vivement que vous donnez chacun son propre dossier unique, je fais généralement quelque chose comme:

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 

si tout va bien si ce qui précède n'est pas une solution complète, vous pourriez au moins obtenir d'autres idées d'enquête de celle-ci.

+0

J'avais abandonné l'espoir qu'il y avait une solution là-bas. Je vais certainement essayer et rendre compte. Je vous remercie. – chris

+0

@chris, cela a-t-il fonctionné pour vous? Le problème que je rencontre est que, lorsque je configure plusieurs hôtes virtuels, plusieurs instances mod-mono-server4 apparaissent. J'aimerais pouvoir exécuter plusieurs applications MVC à partir de la même instance mod-mono-server4, mais je n'ai pas réussi à comprendre comment. Est-ce similaire à votre problème? – ken

Questions connexes