У меня есть Mono 3.0.6, работающий на установке CentOS 6 / Apache 2. Я опубликовал на сервере веб-сайт ASP.NET 4.5 / MVC4. Однако, когда я пытаюсь перейти на веб-сайт, я получаю код состояния 503 (Служба временно недоступна), и в журналах я вижу, что Mono даже не пытается перехватить запрос (поскольку он должен попытаться перенаправить меня из / в / Домой/):
[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 webmaster@example.com
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 получает файл lib.
Отредактируйте файл:
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, как и ожидалось.