Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm going through http://www.mono-project.com/FastCGI_Nginx and can't get it to work. The FastCGI server seems to be running. The following is from the error log:

upstream sent unexpected FastCGI record: 3 while reading response header from upstream, client: 192.168.1.125, server: arch, request: "GET /Default.aspx HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "arch"

Command used to start the server (I've tried server2 and server4, using a simple .NET 2.0 or .NET 4.0 project):

fastcgi-mono-server2 /applications=arch:/:/var/www/test/public/ /socket=tcp:127.0.0.1:9000 /stopable=True

nginx config:

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;
    }
}

Using xsp4 works fine, I can browse the site.

I've enabled FastCGI logging, this is the output:

[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.
share|improve this question

1 Answer 1

up vote 3 down vote accepted

Two additional FastCGI parameters are required.

fastcgi_param SERVER_PORT "80";
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

Credit goes to KnyghtMare from the #mono IRC channel for his test script. By elimination, the required parameters for the nginx conf were found. Usage note: you might have to change the IP and port number on the last line, and 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

After some more modifications to get resource files working, this is the current configuration:

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;
        }
}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.