Назад | Перейти на главную страницу

Моно через FastCGI на nginx

Я переживаю 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" , host: "арка"

Команда, используемая для запуска сервера (я пробовал 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.

Требуются два дополнительных параметра FastCGI.

fastcgi_param SERVER_PORT "80";
fastcgi_param SCRIPT_NAME $fastcgi_script_name;

Благодарим KnyghtMare из IRC-канала #mono за его тестовый сценарий. Путем исключения необходимые параметры для 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;
        }
}