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

FastCGI на lighttpd данные не получены

У меня есть простой скрипт FastCGI:

public static void main (String args[]) {
        int count = 0;
        while(new FCGIInterface().FCGIaccept()>= 0) {
            count ++;
            System.out.println("Content-type: text/html\n\n");
            System.out.println("<html>");
            System.out.println(
                    "<head><TITLE>FastCGI-Hello Java stdio</TITLE></head>");
            System.out.println("<body>");
            System.out.println("<H3>FastCGI Hello Java stdio</H3>");
            System.out.println("request number " + count +
                    " running on host "
                    + System.getProperty("SERVER_NAME"));
            System.out.println("</body>");
            System.out.println("</html>");
        }
    }

Настройте с помощью lighttpd как:

server.modules   += ( "mod_fastcgi" )
fastcgi.debug = 1    
fastcgi.server = ( "/cgi" =>
 ( "fastcgi" =>
   ("port" => 8888,
    "host" => "127.0.0.1",
    "bin-path" => "/var/www/tiny.fcgi",
    "min-procs" => 1,
    "max-procs" => 1,
    "check-local" => "disable" 
 ))
)

В журнале:

2012-11-24 04:35:04: (mod_fastcgi.c.1367) --- fastcgi spawning local 
    proc: /var/www/tiny.fcgi 
    port: 54321 
    socket  
    max-procs: 1 
2012-11-24 04:35:04: (mod_fastcgi.c.1391) --- fastcgi spawning 
    port: 54321 
    socket  
    current: 0 / 1 
2012-11-24 04:35:39: (mod_fastcgi.c.3061) got proc: pid: 0 socket: tcp:127.0.0.1:54321 load: 1 

Проблема в том, что данные с сервера в браузер не отправляются. Я что-то упустил?

Я думаю, что у разработчика Java FastCGI непосредственно с fastcgi.com есть некоторые ошибки. Последний раз он был изменен в 2000 году. Проверьте мой ответ Вот, в ответе есть патч, который мне нужно было применить, чтобы интерфейс FastCGI работал более чем с одним запросом (странно, как вы даже не получили ни одного запроса). Если патч не помогает вам работать на Nginx, вероятно, в интерфейсе больше ошибок. Попробуйте Apache 2.4+. Вы можете использовать Wireshark для сравнения связи FastCGI и найти другую ошибку, или вы можете просто использовать Apache 2.4+.

Попробуйте использовать OutputStream FCGIInterface.request.outStream вместо System.out.

Хотя в документах утверждается, что System.out будет указывать на поток FastCGI, на самом деле это не так. Наверное, никто на самом деле этим не пользовался, может быть еще багов :)