![nginx 上通过 FastCGI 实现 Mono](https://linux22.com/image/581458/nginx%20%E4%B8%8A%E9%80%9A%E8%BF%87%20FastCGI%20%E5%AE%9E%E7%8E%B0%20Mono.png)
我正在经历http://www.mono-project.com/FastCGI_Nginx无法使其工作。FastCGI 服务器似乎正在运行。以下是错误日志中的内容:
上游读取响应标头时,上游发送了意外的 FastCGI 记录:3,客户端:192.168.1.125,服务器:arch,请求:“GET /Default.aspx HTTP/1.1”,上游:“fastcgi://127.0.0.1:9000”,主机:“arch”
用于启动服务器的命令(我已经尝试过 server2 和 server4,使用简单的 .NET 2.0 或 .NET 4.0 项目):
fastcgi-mono-server2 /applications=arch:/:/var/www/test/public/ /socket=tcp:127.0.0.1:9000 /stopable=True
nginx配置:
server
{
listen 80;
server_name arch;
access_log /var/www/test/log/access.log;
error_log /var/www/test/log/error.log;
location /
{
root /var/www/test/public;
index index.html index.htm default.aspx Default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
使用 xsp4 效果很好,我可以浏览网站。
我已启用 FastCGI 日志记录,这是输出:
[2012-04-15 23:51:18Z] Debug Accepting an incoming connection.
[2012-04-15 23:51:18Z] Notice Beginning to receive records on connection.
[2012-04-15 23:51:18Z] Debug Record received. (Type: BeginRequest, ID: 1, Length: 8)
[2012-04-15 23:51:18Z] Debug Record received. (Type: Params, ID: 1, Length: 386)
[2012-04-15 23:51:18Z] Debug Record received. (Type: Params, ID: 1, Length: 0)
[2012-04-15 23:51:18Z] Debug Read parameter. (PATH_INFO = )
[2012-04-15 23:51:18Z] Debug Read parameter. (SCRIPT_FILENAME = /var/www/test/public/Home)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_HOST = arch)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_USER_AGENT = Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_ACCEPT = text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_ACCEPT_LANGUAGE = en-gb,en;q=0.5)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_ACCEPT_ENCODING = gzip, deflate)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_CONNECTION = keep-alive)
[2012-04-15 23:51:18Z] Debug Read parameter. (HTTP_COOKIE = ASP.NET_SessionId=2C3D702C9B0F23F69B80820B)
[2012-04-15 23:51:18Z] Error Failed to process connection. Reason: Argument cannot be null.
Parameter name: s
[2012-04-15 23:51:18Z] Debug Record sent. (Type: EndRequest, ID: 1, Length: 8)
[2012-04-15 23:51:18Z] Debug The FastCGI connection has been closed.
答案1
需要两个额外的 FastCGI 参数。
fastcgi_param SERVER_PORT "80";
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
感谢 #mono IRC 频道的 KnyghtMare 提供的测试脚本。通过排除法,找到了 nginx conf 所需的参数。使用说明:您可能需要更改最后一行的 IP 和端口号,然后HTTP_HOST
。
SERVER_SOFTWARE="lighttpd/1.4.26" \
SERVER_NAME="127.0.0.1" \
GATEWAY_INTERFACE="CGI/1.1" \
SERVER_PORT="80" \
SERVER_ADDR="127.0.0.1" \
REMOTE_PORT="28886" \
REMOTE_ADDR="127.0.0.1" \
SCRIPT_NAME="/" \
PATH_INFO="" \
SCRIPT_FILENAME="/var/www/" \
DOCUMENT_ROOT="/var/www/" \
REQUEST_URI="/" \
QUERY_STRING="" \
REQUEST_METHOD="GET" \
REDIRECT_STATUS="200" \
SERVER_PROTOCOL="HTTP/1.1" \
HTTP_HOST="arch" \
HTTP_CONNECTION="keep-alive" \
HTTP_CACHE_CONTROL="max-age=0" \
HTTP_USER_AGENT="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11" \
HTTP_ACCEPT="text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" \
HTTP_ACCEPT_ENCODING="gzip,deflate" \
HTTP_ACCEPT_LANGUAGE="en-US,en;q=0.8" \
HTTP_ACCEPT_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.3" \
cgi-fcgi -bind -connect 127.0.0.1:9000
经过一些修改以使资源文件正常工作后,这是当前配置:
server
{
listen 80;
server_name arch;
access_log /var/www/test/log/access.log;
error_log /var/www/test/log/error.log debug;
root /var/www/test/public;
location /
{
try_files $uri @proxy;
}
location @proxy
{
fastcgi_index /Home;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}