2013-02-21 39 views
1

我正在使用nginx,factcgi和spawn-fcgi並試圖使其正常工作。C++和fastcgi - 上游從上游讀取響應頭時過早關閉FastCGI stdout

我開始產卵,FCGI如下:

g++ rtbTimeSeries.cpp -o forecast.fcgi -I/home/ubuntu/cpp/boost_1_52_0/ -I/home/ubuntu/cpp/NR_C301/ -lfcgi++ -lfcgi 
spawn-fcgi -a 127.0.0.1 -p 8010 -n forecast.fcgi 

當我去

http://127.0.0.1:83/forecast.fcgi 

我得到一個502錯誤

當我看可以生成-FCGI氟利昂的輸出命令行我看到正確的輸出...查看帖子的最底部:

在nginx日誌中,我得到了t他:

2013/02/21 19:42:39 [error] 16342#0: *39 upstream closed prematurely FastCGI stdout while reading response header from upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /forecast.fcgi HTTP/1.1", upstream: "fastcgi://127.0.0.1:8010", host: "127.0.0.1:83" 

這裏是我的C++代碼:

int main() { 
    FCGX_Init(); 
    while(FCGI_Accept() >= 0){ 
     printf("Content-type: text/html\r\n" 
         "\r\n" 

         "<title>FastCGI Hello!</title>" 
         "<h1>FastCGI Hello!</h1>" 
         "Request number %d running on host <i>%s</i>\n", 
         ++count, getenv("SERVER_NAME")); 
    } 
    return 0; 
} 

這裏是我的nginx.conf部分:

server { 
       listen 83; 
       server_name 127.0.0.1; 

      location/{ 
      fastcgi_pass 127.0.0.1:8010; 

      fastcgi_param GATEWAY_INTERFACE CGI/1.1; 
      fastcgi_param SERVER_SOFTWARE nginx; 
      fastcgi_param QUERY_STRING  $query_string; 
      fastcgi_param REQUEST_METHOD  $request_method; 
      fastcgi_param CONTENT_TYPE  $content_type; 
      fastcgi_param CONTENT_LENGTH  $content_length; 
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
      fastcgi_param SCRIPT_NAME  $fastcgi_script_name; 
      fastcgi_param REQUEST_URI  $request_uri; 
      fastcgi_param DOCUMENT_URI  $document_uri; 
      fastcgi_param DOCUMENT_ROOT  $document_root; 
      fastcgi_param SERVER_PROTOCOL $server_protocol; 
      fastcgi_param REMOTE_ADDR  $remote_addr; 
      fastcgi_param REMOTE_PORT  $remote_port; 
      fastcgi_param SERVER_ADDR  $server_addr; 
      fastcgi_param SERVER_PORT  $server_port; 
      fastcgi_param SERVER_NAME  $server_name; 
     } 


    } 

下面是從控制檯輸出的時候我打的網址中瀏覽器。

spawn-fcgi -a 127.0.0.1 -p 8010 -n forecast.fcgi 
Content-Type: text/plain 

Hello world in C 
Content-type: text/html 

<title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 1 running on host <i>127.0.0.1</i> 
Content-Type: text/plain 

Hello world in C 
Content-type: text/html 

<title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 2 running on host <i>127.0.0.1</i> 
Content-Type: text/plain 

Hello world in C 
Content-type: text/html 

<title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 3 running on host <i>127.0.0.1</i> 
Content-Type: text/plain 

Hello world in C 
Content-type: text/html 

<title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 4 running on host <i>127.0.0.1</i> 
Content-Type: text/plain 

Hello world in C 
Content-type: text/html 

<title>FastCGI Hello!</title><h1>FastCGI Hello!</h1>Request number 5 running on host <i>127.0.0.1</i> 

回答

0

你需要#include「fcgi_stdio.h」嗎?

如果我從頭開始編寫應用程序,我會明確使用FCGI_printf,而不是依靠fcgi_stdio.h中的#define魔術。

相關問題