我在 CentOS 6/Apache 2 设置上启动并运行了 Mono 3.0.6。我在服务器上发布了一个 ASP.NET 4.5/MVC4 网站。但是,当我尝试访问该网站时,我收到状态代码 503(服务暂时不可用),并且在日志中我可以看到 Mono 甚至没有尝试捕获请求(因为它应该尝试将我从 / 路由到 /Home/):
[Tue Mar 26 14:18:38 2013] [error] [client 192.168.40.1] Directory index forbidden by Options directive: /var/www/mvcgui/wwwroot/
我使用默认的 Apache 配置,并将 mod_mono.conf 复制到 /etc/httpd/conf.d/00-mod_mono.conf。我的 VHOST 与 01-mvcgui.conf 位于同一目录中(以确保它在 Mono 之后加载)。这是我的 vhost:
<VirtualHost _default_:80>
ServerAdmin [email protected]
DocumentRoot /var/www/mvcgui/wwwroot
ServerName 192.168.40.132
ErrorLog /var/www/mvcgui/error.log
CustomLog /var/www/mvcgui/requests.log combined
## Mono-specific configuration ##
MonoServerPath mvcgui "/opt/mono/bin/mod-mono-server4"
MonoDebug mvcgui true
MonoSetEnv mvcgui MONO_IOMAP=all
MonoApplications mvcgui "/:/var/www/mvcgui/wwwroot"
## End Mono-specific configuration
<Location />
MonoSetServerAlias mvcgui
SetHandler mono
</Location>
</VirtualHost>
我怀疑请求没有被传递给 Mono。我如何才能确定情况确实如此?
答案1
当然,我花了一天时间才在发帖 5 分钟后找到了解决方案。我想分享一下结果。对于 ASP.NET 4.5/MVC4,您需要更改 mod-mono-server4 获取库的路径。
编辑文件:
vi /opt/mono/bin/mod-mono-server4
并将其中的那行修改为:
exec /opt/mono/bin/mono $MONO_OPTIONS "/opt/mono/lib/mono/**4.0**/mod-mono-server4.exe" "$@"
有了这个:
exec /opt/mono/bin/mono $MONO_OPTIONS "/opt/mono/lib/mono/**4.5**/mod-mono-server4.exe" "$@"
我怀疑 Mono 没有“拦截”请求,因为服务器由于该库路径问题而无法正常启动。现在我可以按预期获取 .NET 页面。