如何使用 fastcgi 配置 Lighthttpd

发布于 2024-12-08 12:49:42 字数 2873 浏览 1 评论 0原文

我在 Windows 上安装了 LightTPD。 它通常在没有 fastcgi 的情况下启动。 然后我复制/粘贴 fastCGI 示例之一

#include <sstream>  // manipulate strings (integer conversion)
#include <string>   // work with strings in a more intuitive way
#include "libfcgi2.h" // Header file for libfcgi2.dll (linked with libfcgi2.lib)

using namespace std;

int main( )
{ 
    printf("Start...\r\n");
    FCGX_REQUEST Req = { 0 }; // Create & Initialize all members to zero
    int count(0);
    string sReply;
    ostringstream ss;

    FCGX_InitRequest( &Req, 0, 0 ); // FCGX_DEBUG - third parameter

    // Open Database
    while(true)
    {
        if( FCGX_Accept_r(&Req) < 0 ) break; // Execution is blocked here until a Request is received
        count++; 
        ss << count; // Stringstream is a typesafe Integer conversion
        sReply = "Content-Type: text/html\r\n\r\n   Hello World " + ss.str();
        FCGX_PutStr( sReply.data(),   sReply.length(),   Req.pOut ); 
        ss.str(""); // clear the string stream object
    }

    // Close Database
    printf("End...\r\n");
    return 0;
}

并尝试使用以下配置启动服务器:

server.modules              = (
    ...
    "mod_fastcgi",

....

fastcgi.server = ( ".exe" =>
    ( "" =>
        ( "bin-path" => "C:\FastCGI\Examples\C++\Ex_Counter.exe",
           "port" => 8080,
           "min-procs" => 1,
           "max-procs" => 1
        )
    )
) 

并在启动时出现错误:

C:\LightTPD>LightTPD.exe -f conf\lighttpd-inc.conf -m lib -D
cygwin warning:
  MS-DOS style path detected: conf\lighttpd-inc.conf
  Preferred POSIX equivalent is: conf/lighttpd-inc.conf
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
2011-10-07 12:50:25: (log.c.166) server started
2011-10-07 12:50:25: (mod_fastcgi.c.1367) --- fastcgi spawning local
        proc: C:\FastCGI\Examples\C++\Ex_Counter.exe
        port: 8080
        socket
        max-procs: 1
2011-10-07 12:50:25: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 8080
        socket
        current: 0 / 1
2011-10-07 12:50:25: (mod_fastcgi.c.1104) the fastcgi-backend C:\FastCGI\Example
s\C++\Ex_Counter.exe failed to start:
2011-10-07 12:50:25: (mod_fastcgi.c.1108) child exited with status 0 C:\FastCGI\
Examples\C++\Ex_Counter.exe
2011-10-07 12:50:25: (mod_fastcgi.c.1111) If you're trying to run your app as a
FastCGI backend, make sure you're using the FastCGI-enabled version.
If this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2011-10-07 12:50:25: (mod_fastcgi.c.1399) [ERROR]: spawning fcgi failed.
2011-10-07 12:50:25: (server.c.942) Configuration of plugins failed. Going down.

我没有使用 php,所以我不知道应该在哪里设置此标志。

I've installed LightTPD on windows.
It starts without fastcgi normally.
Then I copy/paste one of the fastCGI examples

#include <sstream>  // manipulate strings (integer conversion)
#include <string>   // work with strings in a more intuitive way
#include "libfcgi2.h" // Header file for libfcgi2.dll (linked with libfcgi2.lib)

using namespace std;

int main( )
{ 
    printf("Start...\r\n");
    FCGX_REQUEST Req = { 0 }; // Create & Initialize all members to zero
    int count(0);
    string sReply;
    ostringstream ss;

    FCGX_InitRequest( &Req, 0, 0 ); // FCGX_DEBUG - third parameter

    // Open Database
    while(true)
    {
        if( FCGX_Accept_r(&Req) < 0 ) break; // Execution is blocked here until a Request is received
        count++; 
        ss << count; // Stringstream is a typesafe Integer conversion
        sReply = "Content-Type: text/html\r\n\r\n   Hello World " + ss.str();
        FCGX_PutStr( sReply.data(),   sReply.length(),   Req.pOut ); 
        ss.str(""); // clear the string stream object
    }

    // Close Database
    printf("End...\r\n");
    return 0;
}

and trying to start server with following config:

server.modules              = (
    ...
    "mod_fastcgi",

....

fastcgi.server = ( ".exe" =>
    ( "" =>
        ( "bin-path" => "C:\FastCGI\Examples\C++\Ex_Counter.exe",
           "port" => 8080,
           "min-procs" => 1,
           "max-procs" => 1
        )
    )
) 

And gain error on start up:

C:\LightTPD>LightTPD.exe -f conf\lighttpd-inc.conf -m lib -D
cygwin warning:
  MS-DOS style path detected: conf\lighttpd-inc.conf
  Preferred POSIX equivalent is: conf/lighttpd-inc.conf
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
    http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
2011-10-07 12:50:25: (log.c.166) server started
2011-10-07 12:50:25: (mod_fastcgi.c.1367) --- fastcgi spawning local
        proc: C:\FastCGI\Examples\C++\Ex_Counter.exe
        port: 8080
        socket
        max-procs: 1
2011-10-07 12:50:25: (mod_fastcgi.c.1391) --- fastcgi spawning
        port: 8080
        socket
        current: 0 / 1
2011-10-07 12:50:25: (mod_fastcgi.c.1104) the fastcgi-backend C:\FastCGI\Example
s\C++\Ex_Counter.exe failed to start:
2011-10-07 12:50:25: (mod_fastcgi.c.1108) child exited with status 0 C:\FastCGI\
Examples\C++\Ex_Counter.exe
2011-10-07 12:50:25: (mod_fastcgi.c.1111) If you're trying to run your app as a
FastCGI backend, make sure you're using the FastCGI-enabled version.
If this is PHP on Gentoo, add 'fastcgi' to the USE flags.
2011-10-07 12:50:25: (mod_fastcgi.c.1399) [ERROR]: spawning fcgi failed.
2011-10-07 12:50:25: (server.c.942) Configuration of plugins failed. Going down.

I'm not using php, so i don't know where i should set this flag.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心房的律动 2024-12-15 12:49:42

看来该示例在开始使用 FCGX 库函数之前未能调用 FCGX_Init()。这将导致 FCGX_Accept_r 返回非 0 错误条件,并导致您的示例以您看到的日志文件中指示的 0 状态退出。

来自 fcgiapp.h

/*
 *----------------------------------------------------------------------
 *
 * FCGX_Accept_r --
 *
 *      Accept a new request (multi-thread safe).  Be sure to call
 *  FCGX_Init() first.
 *

It appears that the example failed to call FCGX_Init() before it started using the FCGX library functions. This will cause FCGX_Accept_r to return a non 0 error condition and causes your example to exit with the 0 status indicated in the log file you are seeing.

From fcgiapp.h:

/*
 *----------------------------------------------------------------------
 *
 * FCGX_Accept_r --
 *
 *      Accept a new request (multi-thread safe).  Be sure to call
 *  FCGX_Init() first.
 *
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文