Nginx,SiginalR和FastCGI与单声道:未找到应用程序

问题描述:

我试图让所有这些设置运行,我现在失败了。我主要想测试Websockets,并且由于IIS 7.5不支持它们,我试图用Nginx和Mono/FastCGI来设置它。Nginx,SiginalR和FastCGI与单声道:未找到应用程序

所以,一切都是基于Windows的,没有linux,没有unix:windows。目前,所有我从打电话http://localhost:7171/app(或http://127.0.0.1:7171/app)得到的是这样的错误:

No Application Found 

Unable to find a matching application for request: 

Host localhost:7171 
Port 7171 
Request Path /app/index.html 
Physical Path C:\nginx\html/app/index.html 

这里是CONFIGS现在:

fastcgi.conf

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
fastcgi_param QUERY_STRING  $query_string; 
fastcgi_param REQUEST_METHOD  $request_method; 
fastcgi_param CONTENT_TYPE  $content_type; 
fastcgi_param CONTENT_LENGTH  $content_length; 

fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
fastcgi_param REQUEST_URI  $request_uri; 
fastcgi_param DOCUMENT_URI  $document_uri; 
fastcgi_param DOCUMENT_ROOT  $document_root; 
fastcgi_param SERVER_PROTOCOL $server_protocol; 

fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 

fastcgi_param REMOTE_ADDR  $remote_addr; 
fastcgi_param REMOTE_PORT  $remote_port; 
fastcgi_param SERVER_ADDR  $server_addr; 
fastcgi_param SERVER_PORT  $server_port; 
fastcgi_param SERVER_NAME  $server_name; 

# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param REDIRECT_STATUS 200; 

fastcgi_params

fastcgi_param QUERY_STRING  $query_string; 
fastcgi_param REQUEST_METHOD  $request_method; 
fastcgi_param CONTENT_TYPE  $content_type; 
fastcgi_param CONTENT_LENGTH  $content_length; 

fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
fastcgi_param REQUEST_URI  $request_uri; 
fastcgi_param DOCUMENT_URI  $document_uri; 
fastcgi_param DOCUMENT_ROOT  $document_root; 
fastcgi_param SERVER_PROTOCOL $server_protocol; 

fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 

fastcgi_param REMOTE_ADDR  $remote_addr; 
fastcgi_param REMOTE_PORT  $remote_port; 
fastcgi_param SERVER_ADDR  $server_addr; 
fastcgi_param SERVER_PORT  $server_port; 
fastcgi_param SERVER_NAME  $server_name; 

# PHP only, required if PHP was built with --enable-force-cgi-redirect 
fastcgi_param REDIRECT_STATUS 200; 

fastcgi_param PATH_INFO   ""; 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 

nginx.conf

server { 
listen  7171; 
server_name 127.0.0.1; 


#charset koi8-r; 

#access_log logs/host.access.log main; 

location/{ 

    #fastcgi_index index.html; 
    #fastcgi_pass 127.0.0.1:9000; 
    #include C:\\nginx\\conf\\fastcgi_params; 
} 

location /app { 

    fastcgi_index index.html; 
    fastcgi_pass 127.0.0.1:9000; 
    include fastcgi_params; 
} 
} 

,这里是用来启动FastCGI的CMD线:

"C:\Program Files (x86)\Mono-2.10.8\bin\fastcgi-mono-server4" /socket=tcp:127.0.0.1:9000 /applications=/:/c://nginx//html//app 

感谢一大堆!

It almost work but signalr's scripts (signalr/hubs) are just giving me 404's now. Working on it...

在与SignalR的开发人员聊天后,他们证实SignalR不受Nginx + FastCgi混合支持。

如果您打算使用SignalR,我会推荐使用IIS。查看他们的网站以获取更多关于SignalR的信息。

干杯

+2

不是说它不被支持。它还不能完全支持单声道。 SignalR的下一个版本将支持多个主机。 – davidfowl 2012-01-19 06:04:44

发现问题的人谁想要得到它的工作。看起来,启动fast-cgi-mono-server4并指向绝对路径的/ application不起作用。我必须使用相对路径启动它:

"C:\Program Files (x86)\Mono-2.10.8\bin\fastcgi-mono-server4" /applications=/:/..\\..\\..\\nginx\\html\\app\\ /socket=tcp:127.0.0.1:9000 

此外,Nginx似乎无法路由除/以外的位置。所以你必须在根上只有一个应用程序。

location/{ 
     root c:\\nginx\\html\\app;    
     fastcgi_index index.html; 
     fastcgi_pass 127.0.0.1:9000; 
     include C:\\nginx\\conf\\fastcgi_params; 
    } 

它几乎工作,但信号员的脚本(信号器/集线器)现在只是给我404。处理它...

+0

非常感谢。关于相对路径的建议节省了我的时间。 – ajukraine 2013-02-22 12:38:42