Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm going through 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:, server: arch, request: "GET /Default.aspx HTTP/1.1", upstream: "fastcgi://", 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: /stopable=True

nginx config:

    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_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
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" \
REMOTE_PORT="28886" \
SCRIPT_FILENAME="/var/www/" \
DOCUMENT_ROOT="/var/www/" \
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_CHARSET="ISO-8859-1,utf-8;q=0.7,*;q=0.3" \
cgi-fcgi -bind -connect

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

        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_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


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.