lighttpd 上的 FastCGI 没有收到数据

lighttpd 上的 FastCGI 没有收到数据

我有一个简单的 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 

问题是没有数据从服务器发送到浏览器。我是不是漏掉了什么?

答案1

我认为来自 fastcgi.com 的 Java FastCGI devkit 有一些错误。它最后一次修改是在 2000 年。查看我的答案这里,答案中有一个我需要应用的补丁,以便 FastCGI 接口能够处理多个请求(奇怪的是,您甚至无法通过一个请求)。如果该补丁无法在 Nginx 上工作,则该接口可能有更多错误。考虑试用 Apache 2.4+。您可以使用 Wireshark 比较 FastCGI 通信并查找其他错误,或者您可以只使用 Apache 2.4+。

答案2

尝试使用OutputStream FCGIInterface.request.outStream而不是System.out。

尽管文档声称它会将 System.out 设置为指向 FastCGI 流,但实际上并非如此。可能没有人真正使用过它,可能会有更多错误 :)

相关内容