我有一个简单的 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 流,但实际上并非如此。可能没有人真正使用过它,可能会有更多错误 :)