我在我的智慧结尾。我试图通过FastCGI在Mono下运行ASP.NET MVC 3网站,并且Cassette的HTTP处理程序将无法正确注册。该网站是http://www.tychaia.com/。未在Mono MVC 3下正确注册的HTTP处理程序
奇怪的是:
- 它的工作我的本地机器的罚款。
- 当生产机器上的网站在
xsp4
下运行时,它工作正常。 - 当生产机器上的网站在
fastcgi-mono-server4
下运行时,它无法正常工作。
事情我已经尝试:
- 检查Nginx的配置,并确定它传递所有正确的FastCGI参数(这是)。
- 单声道3.0.7和3.0.10。一个朋友在3.0.7下工作,但对我来说没有骰子。
正是这种特殊的Web.config条目:
<add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
(https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Web.config#L47)
至于我可以告诉大家,我有导致此问题的两个问题:
- MVC的IgnoreRoute与
cassette.axd
网址不匹配,即使明确指定为https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20(并且它工作在联合国版本der普通老XSP4)。当我为字符串“cassette.axd”添加一个明确的IgnoreRoute(通过执行routes.IgnoreRoute("cassette.axd");
),它开始传递给处理程序,除了: - 服务器的HTTP处理程序路径匹配似乎只是确切在FastCGI下匹配。即使我关闭了网站中的所有MVC注册,处理程序只匹配
cassette.axd
,即使如此,处理程序似乎也没有任何路径信息。 - 当我添加更多的条目,如
<add path="cassette.axd/*" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
这些也开始被处理程序处理,但它不响应,因为它通常应该在该URL;您只需获取默认值,就好像没有其他URL参数(可能它们正在被HTTP处理程序路径匹配所使用)。
即FastCGI的是目前设置的方法是:
- 主要Nginx的实例,它仅仅是一个反向代理到更多的Nginx的情况下(我运行多个网站,我喜欢让他们隔离)。它指向:
- Nginx实例,通过UNIX套接字调用FastCGI。
同样,这个问题不会发生在XSP4下,它的只有发生在FastCGI下。尽管我可以将代理转换为XSP4实例,但由于性能方面的原因,我很犹豫。
还有什么我可以在这里失踪?
编辑:这里的一些网址,应该工作。正如你所看到的,他们击中StaticFileHandler的不是纸盒HTTP处理程序:
- http://tychaia.com/cassette.axd/stylesheet/nDvbK5eAxf6miyaRa_J0vl7YdxA=/Content
- http://tychaia.com/cassette.axd/script/oz4BBh-gK6gJkhB5S64l3mXseFQ=/Scripts
而且你可以看到,与IgnoreRoute明确指定,在cassette.axd
路径确实地图,但只有这样的路径:
如果你把一个斜杠在它的结束要么它不工作:
编辑2:我已经更新了网站只是链接到/Content/main.css
文件,以便此问题得到排序时该网站显示正确;如果您在浏览器中检查网络请求,您会看到Cassette包失败的请求。