2011-06-08 51 views
21

我想在OSX上用Apache2配置mod_mono。我想在同一个虚拟主机上运行多个MVC3项目,但由于某种原因,只有列出的第一个工作正常。任何对此的帮助将非常感谢,因为没有太多的文档。我尝试了很多不同的配置选项,其中没有一个似乎可行。如何在运行Apache2的单个虚拟主机上托管多个MVC3站点?

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

你好,你已经解决了这个问题吗?我也有同样的问题。 – branoholy 2011-08-10 10:42:32

+0

什么都没有。已经尝试了我能找到的每一种配置,而且他们都没有解决这个问题。尽管如此。 – chris 2011-08-14 17:26:11

+0

如果您打算投票并编辑我的问题,请确保您知道问题首先是什么。 – chris 2011-10-06 14:09:16

回答

3

你的问题是,你的别名和物理路径是一样的,所以Apache不知道哪一个服务。

注:我根据一般的Apache2配置给了答案,而不是将mod_mono,也许是mod_mono不会的东西,以防止这一点,我没有设置MVC下一个* nix中框应用程式之前:-)

反正......如果你看看你有你的路径配置

...

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

不到位你的别名,这些已经解决您试图映射路径。

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

你,然后告诉阿帕奇是

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

当Apache试图如果没有文件subfix或现有的斜杠(如在最后2)提供的内容会自动,subfix的文件夹A /然后发出一个重定向(306我相信)实质上是告诉浏览器从EG重定向:

/gamecenter to /gamecenter/ 

有了告诉它别名...在位置别名X它,然后按h如尝试做一个desicion服务

/gamecenter/ 

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

并最终感到困惑,所以做什么任何设置虚拟主机做时,它无法解析路径,这是返回网站根目录。

但是,就我所说,这是普通的非单一Apache行为,有可能mod_mono可能以某种方式改变处理管道,以改变这种行为。

我会推荐的是将其分成3个虚拟主机,即使只使用一个IP,您也可以非常轻松地完成此操作。

你会想要做的第一件事是在somwhere你的主人Apache的配置文件,有

Listen 9005 

声明。这将使所有的虚拟实例侦听该端口以及任何其它配置的端口EG:80

下一步要确保你有一个默认的包罗万象的虚拟主机,这将捕获任何服务器名称没有在其他地方映射:

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

一旦你的设置,然后移动到您的“API”子域

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

在这一点上,我要停下来讨论你的域名。如果这是一个内部测试系统(我怀疑它是这样),那么如果你在你的机器上安装一个DNS服务器,你会发现使用虚拟域名的方式更容易,然后使用私有内部网络地址将其设置为主域名。

EG:

创建根区,并称之为 “mydevnetwork.local”

然后计算机名称添加到它:

EG:如果您的PC被称为devpc1,创建一个IP解决了“devpc1.mydevnetwork.local”,给你的电脑EG的静态IP地址:192.168.50.1

然后设置一个别名,如此

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

Iv'e没有足够的空间做一个完整的DNS设置发布在这里,但希望你明白了。

一旦你有了DNS(或至少主机文件项)成立,那么Apache下您的虚拟主机变得非常易于管理:

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

,易于搬迁到另一台机器,你应该不需要太。

可以在几乎相同的方式设置你的虚拟主机的调养

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

注iv'e设置的路径是一样的,你有以上,即使这会工作,我倒是强烈建议您给每一个它自己独特的文件夹,我一般做这样的事情:

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 

希望如果上面的不是一个完整的解决方案,你可能至少从它那里得到调查的另外一些想法。

+0

我已经放弃了希望那里有解决方案。我一定会试一试并回报。谢谢。 – chris 2011-10-15 00:12:53

+0

@chris,为你做了这个工作吗?我遇到的问题是,当我设置多个虚拟主机时,会生成多个mod-mono-server4实例。我希望能够从同一个mod-mono-server4实例运行多个MVC应用程序,但我一直无法弄清楚如何。这与你的问题类似吗? – ken 2011-11-03 02:48:06

相关问题