使用 fastcgi-mono-server4 在 nginx 上的 Mono 2.11 將不起作用
我在 centos 6.2 上執行我的 nginx 1.0.15 網路伺服器設置了 mono 2.11。我從原始碼建構它,xps2、xps4 和 fastcgi-mono-server2 按預期工作。問題是當我嘗試執行 fastcgi-mono-server4 時。當我執行時:
fastcgi-mono-server4 /applications=site:/:/srv/www/html/ /socket=tcp:127.0.0.1:9000 /loglevels=Debug /printlog=true
這是我從 fastcgi-mono-server2 得到的:
[2012-06-06 23:51:07Z] Debug Record received. (Type: BeginRequest, ID: 1, Length: 8) [2012-06-06 23:51:07Z] Debug Record received. (Type: Params, ID: 1, Length: 801) [2012-06-06 23:51:07Z] Debug Record received. (Type: Params, ID: 1, Length: 0) [2012-06-06 23:51:07Z] Debug Read parameter. (QUERY_STRING = ) [2012-06-06 23:51:07Z] Debug Read parameter. (REQUEST_METHOD = GET) [2012-06-06 23:51:07Z] Debug Read parameter. (CONTENT_TYPE = ) [2012-06-06 23:51:07Z] Debug Read parameter. (CONTENT_LENGTH = ) [2012-06-06 23:51:07Z] Debug Read parameter. (SCRIPT_NAME = /) [2012-06-06 23:51:07Z] Debug Read parameter. (REQUEST_URI = /) [2012-06-06 23:51:07Z] Debug Read parameter. (DOCUMENT_URI = /) [2012-06-06 23:51:07Z] Debug Read parameter. (DOCUMENT_ROOT = /srv/www/html) [2012-06-06 23:51:07Z] Debug Read parameter. (SERVER_PROTOCOL = HTTP/1.1) [2012-06-06 23:51:07Z] Debug Read parameter. (GATEWAY_INTERFACE = CGI/1.1) [2012-06-06 23:51:07Z] Debug Read parameter. (SERVER_SOFTWARE = nginx/1.0.15) [2012-06-06 23:51:07Z] Debug Read parameter. (REMOTE_ADDR = 192.168.128.121) [2012-06-06 23:51:07Z] Debug Read parameter. (REMOTE_PORT = 62326) [2012-06-06 23:51:07Z] Debug Read parameter. (SERVER_ADDR = 192.168.128.125) [2012-06-06 23:51:07Z] Debug Read parameter. (SERVER_PORT = 80) [2012-06-06 23:51:07Z] Debug Read parameter. (SERVER_NAME = site) [2012-06-06 23:51:07Z] Debug Read parameter. (REDIRECT_STATUS = 200) [2012-06-06 23:51:07Z] Debug Read parameter. (PATH_INFO = ) [2012-06-06 23:51:07Z] Debug Read parameter. (SCRIPT_FILENAME = /srv/www/html/) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_HOST = site) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_ACCEPT_ENCODING = gzip, deflate) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_CONNECTION = keep-alive) [2012-06-06 23:51:07Z] Debug Read parameter. (HTTP_COOKIE = ASP.NET_SessionId=0176BE8FC161E702439D3C91) [2012-06-06 23:51:07Z] Debug Record received. (Type: StandardInput, ID: 1, Length: 0) [2012-06-06 23:51:08Z] Debug Record sent. (Type: StandardOutput, ID: 1, Length: 196) [2012-06-06 23:51:08Z] Debug Record sent. (Type: StandardOutput, ID: 1, Length: 128) [2012-06-06 23:51:08Z] Debug Record sent. (Type: StandardOutput, ID: 1, Length: 0) [2012-06-06 23:51:08Z] Debug Record sent. (Type: EndRequest, ID: 1, Length: 8)
這就是我從 fastcgi-mono-server4 得到的:
[2012-06-06 23:50:52Z] Debug Record received. (Type: BeginRequest, ID: 1, Length: 8) [2012-06-06 23:50:52Z] Debug Record received. (Type: Params, ID: 1, Length: 801) [2012-06-06 23:50:52Z] Debug Record received. (Type: Params, ID: 1, Length: 0) [2012-06-06 23:50:52Z] Debug Read parameter. (QUERY_STRING = ) [2012-06-06 23:50:52Z] Debug Read parameter. (REQUEST_METHOD = GET) [2012-06-06 23:50:52Z] Debug Read parameter. (CONTENT_TYPE = ) [2012-06-06 23:50:52Z] Debug Read parameter. (CONTENT_LENGTH = ) [2012-06-06 23:50:52Z] Debug Read parameter. (SCRIPT_NAME = /) [2012-06-06 23:50:52Z] Debug Read parameter. (REQUEST_URI = /) [2012-06-06 23:50:52Z] Debug Read parameter. (DOCUMENT_URI = /) [2012-06-06 23:50:52Z] Debug Read parameter. (DOCUMENT_ROOT = /srv/www/html) [2012-06-06 23:50:52Z] Debug Read parameter. (SERVER_PROTOCOL = HTTP/1.1) [2012-06-06 23:50:52Z] Debug Read parameter. (GATEWAY_INTERFACE = CGI/1.1) [2012-06-06 23:50:52Z] Debug Read parameter. (SERVER_SOFTWARE = nginx/1.0.15) [2012-06-06 23:50:52Z] Debug Read parameter. (REMOTE_ADDR = 192.168.128.121) [2012-06-06 23:50:52Z] Debug Read parameter. (REMOTE_PORT = 62326) [2012-06-06 23:50:52Z] Debug Read parameter. (SERVER_ADDR = 192.168.128.125) [2012-06-06 23:50:52Z] Debug Read parameter. (SERVER_PORT = 80) [2012-06-06 23:50:52Z] Debug Read parameter. (SERVER_NAME = site) [2012-06-06 23:50:52Z] Debug Read parameter. (REDIRECT_STATUS = 200) [2012-06-06 23:50:52Z] Debug Read parameter. (PATH_INFO = ) [2012-06-06 23:50:52Z] Debug Read parameter. (SCRIPT_FILENAME = /srv/www/html/) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_HOST = site) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_ACCEPT_LANGUAGE = en-us,en;q=0.5) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_ACCEPT_ENCODING = gzip, deflate) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_CONNECTION = keep-alive) [2012-06-06 23:50:52Z] Debug Read parameter. (HTTP_COOKIE = ASP.NET_SessionId=0176BE8FC161E702439D3C91) [2012-06-06 23:50:53Z] Debug Record received. (Type: StandardInput, ID: 1, Length: 0) [2012-06-06 23:50:53Z] Debug Record sent. (Type: EndRequest, ID: 1, Length: 8)
我沒有看到我做錯了什麼。任何幫助都會很棒。
**編輯:**重做的事情,現在我收到了錯誤網關的 502 錯誤。日誌看起來仍然一樣。
查看了我的 Nginx 錯誤日誌,發現了許多這樣的條目:
2012/06/18 13:56:01 [error] 3108#0: *4 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.128.121, server: site, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "site"
無論 fastcgi-mono-server4 是否打開,我都會得到相同的響應。它現在總是顯示 502 錯誤。
我的範例 MVC3 應用程序在 badgerports.org 的 Mono 2.10.8.1 上執行良好(我使用 ubuntu)。
從源安裝 Mono 2.11.2 後,相同的應用程序將始終返回 502 Bad Gateway,就像您的情況一樣。
我的 nginx 日誌如下所示:
[error] 3384#0: *101 upstream sent unexpected FastCGI record: 3 while reading response header from upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "localhost:8000"
在 printlog 選項設置為 true 的情況下呼叫 fastcgi-mono-server4
sudo /opt/mono-2.11.2/bin/fastcgi-mono-server4 /printlog=True /applications=/:/var/www/mono/Mvc3Template /socket=tcp:127.0.0.1:9000
它會在訪問 localhost:8000/ 後生成這個堆棧跟踪
[2012-07-27 14:55:57Z] Notice Beginning to receive records on connection. [2012-07-27 14:55:58Z] Error ERROR PROCESSING REQUEST: System.TypeInitializationException: An exception was thrown by the type initializer for Mono.WebServer.FastCgi.WorkerRequest Server stack trace: at Mono.WebServer.FastCgi.ApplicationHost.ProcessRequest (Mono.WebServer.FastCgi.Responder responder) [0x00001] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/ApplicationHost.cs:47 at (wrapper remoting-invoke-with-check) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder) at (wrapper xdomain-dispatch) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (object,byte[]&,byte[]&) Exception rethrown at [0]: ---> System.InvalidCastException: Cannot cast from source type to destination type. at System.Configuration.ConfigurationManager.get_AppSettings () [0x00000] in <filename unknown>:0 at Mono.WebServer.FastCgi.WorkerRequest..cctor () [0x0002c] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/WorkerRequest.cs:50 --- End of inner exception stack trace --- at (wrapper xdomain-invoke) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder) at (wrapper remoting-invoke-with-check) Mono.WebServer.FastCgi.ApplicationHost:ProcessRequest (Mono.WebServer.FastCgi.Responder) at Mono.WebServer.FastCgi.Responder.Process () [0x00060] in /home/r522/Desktop/mono-2.11.2/build/xsp-2.10.2/src/Mono.WebServer.FastCgi/Responder.cs:90 [2012-07-27 14:55:58Z] Notice Finished receiving records on connection
這是我的一些配置:
#/etc/nginx/sites-enabled/mono server { listen 8000; server_name localhost; access_log /var/log/nginx/mono.access.log; error_log /var/log/nginx/mono.error.log; location / { root /var/www/mono/Mvc3Template; index index.html index.htm default.aspx Default.aspx; fastcgi_index /Home/Index; # Points to HomeController Index Action fastcgi_pass 127.0.0.1:9000; include /etc/nginx/fastcgi_params; } }
# Directory structure /var/www/mono ├── Mvc3Template │ ├── bin │ ├── Content │ ├── Controllers | ... omitted rest ├── Mvc3Template.sln ├── Mvc3Template.suo ├── Mvc3Template.userprefs ├── packages
我在這裡找到了解決我的問題的方法:bugzilla.xamarin.com/show_bug.cgi?id=2876(讓我感到困擾的是,它假設已在 2012 年 2 月修復 - 我編譯的單聲道在 6 月發布,但它沒有開箱即用)
我根據那裡找到的修復單聲道安裝的建議製作了一個腳本,只需將 PREFIX 變數指向您的單聲道目錄並執行它:
#!/bin/bash # Your mono directory PREFIX=/opt/mono-2.11.2 FILES=('mod-mono-server4' 'fastcgi-mono-server4' 'xsp4') cd $PREFIX/lib/mono/4.0 for file in "${FILES[@]}" do cp "$file.exe" ../4.5 done cd $PREFIX/bin for file in "${FILES[@]}" do sed -ie 's|mono/4.0|mono/4.5|g' $file done
在此之後,應用程序“工作”,但還沒有完全到位。它不再是 502,而且我得到了一個不錯的堆棧跟踪…
System.Web.Compilation.CompilationException : at IKVM.Reflection.Reader.ModuleReader.ResolveType (Int32 metadataToken, IGenericContext context) [0x00000] in <filename unknown>:0 Description: Error compiling a resource required to service this request. Review your source file and modify it to fix this error. Details: : at IKVM.Reflection.Reader.ModuleReader.ResolveType (Int32 metadataToken, IGenericContext context) [0x00000] in <filename unknown>:0 Error origin: Compiler Error source file: ~/Global.asax Exception stack trace:
所以我還有一些事情要弄清楚,但我希望從中得到一些幫助。