Я успешно установить Mono (Stable 4.2.3.4) на Ubuntu 14.04 с NGINX (1.8.1) для размещения ASP.NET MVC приложений, и он отлично работает. Единственное, что я не могу решить, это проблема «index/root (/) 404».Mono и Nginx: Индекс (/) 404 обслуживается StaticFileHadler
Я использую пользовательский CustomMvcRouteHandler для Catchall маршрута:
routes.MapRoute(
"UrlHandler", // Route name
"{*url}",
null,
null,
new[] { "web.Controllers" }
).RouteHandler = new CustomMvcRouteHandler();
Это прекрасно работает и все ожидаемые запросы направляются через CustomMvcRouterHandler(); но не для индекса (/). По какой-либо причине запрос индекса (/) обслуживается StaticFileHandler и генерирует эту ошибку:
System.Web.HttpException: Ресурс не найден.
Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, если его имя было изменено или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
Детали: Запрошенный URL:/
стека исключений трассировки:
at System.Web.StaticFileHandler.ProcessRequest (System.Web.HttpContext context) <0x407e59f0 + 0x00753> in <filename unknown>:0
at System.Web.DefaultHttpHandler.BeginProcessRequest (System.Web.HttpContext context, System.AsyncCallback callback, System.Object state) <0x407e5720 + 0x00153> in <filename unknown>:0
at System.Web.HttpApplication+<Pipeline>c__Iterator1.MoveNext() <0x408c5000 + 0x04485> in <filename unknown>:0
at System.Web.HttpApplication.Tick() <0x408c2730 + 0x00057> in <filename unknown>:0
Пожалуйста, обратите внимание, что это работает таким образом только на Mono, на мой Dev машине Windows, и даже на каких-либо IIS для Windows хостинг одного и того же веб-приложения с тем же web.config и т. д. работает нормально даже для запросов root (/), и эти запросы маршрутизируются через CustomMvcRouteHandler().
Что я действительно не понимаю, так это то, что Mono обслуживает индекс (/) с помощью StaticFileHandler. Если я создам файл index.html в корневой структуре веб-структуры, то он обслуживается StaticFileHandler (как и ожидалось, потому что статический обработчик файлов ищет этот файл).
Это конфигурационный файл NGINX для сайта:
server {
listen 80;
listen [::]:80;
server_name example.com;
access_log /var/www/example.com/logs/access.log;
error_log /var/www/example.com/logs/error.log;
include /etc/nginx/fastcgi_params;
location/{
fastcgi_index /;
root /var/www/example.com/www/;
fastcgi_pass 127.0.0.1:9000;
}
}
Обойти я использую сейчас чейнинг строки:
fastcgi_index /;
к
fastcgi_index /Default.aspx;
Таким образом, корневой доступ (/) изменяется на /Default.aspx и маршрутизируется через конвейер ASP.NET MVC, но, конечно, мне нужно, чтобы ch ange код и обрабатывать /Default.aspx как /.
Любые идеи?