2014-02-17 79 views
4

我有一個定製的FastCGI應用程序背後的Nginx,我努力讓Nginx返回200狀態代碼以外的任何東西。FastCGI和Nginx - 返回HTTP狀態

我已經試過如下:

  • 上設置fast_cgi_intercept_errors。

  • 通過ApplicationStatusEndRequest返回代碼。

  • 在StdError流上返回錯誤。

  • 發送任何以下標題的:

    • 「狀態:404未找到」

    • 「HTTP/1.1 404未找到」

    • 「X-PHP-應答爲代碼:404「

    • 」狀態:404未找到;「

    • 「HTTP/1.1 404 Not Found;」

    • 「X-PHP-Response-Code:404;」

任何幫助將是巨大的,我很堅持。

回答

1

下面是如何使用fcgi和C++返回404狀態碼的示例。

#include <iostream> 
#include "fcgio.h" 

using namespace std; 

int main(void) 
{ 
    streambuf * cin_streambuf = cin.rdbuf(); 
    streambuf * cout_streambuf = cout.rdbuf(); 
    streambuf * cerr_streambuf = cerr.rdbuf(); 

    FCGX_Request request; 

    FCGX_Init(); 
    FCGX_InitRequest(&request, 0, 0); 

    while (FCGX_Accept_r(&request) == 0) 
    { 
    fcgi_streambuf cin_fcgi_streambuf(request.in); 
    fcgi_streambuf cout_fcgi_streambuf(request.out); 
    fcgi_streambuf cerr_fcgi_streambuf(request.err); 

    cin.rdbuf(&cin_fcgi_streambuf); 
    cout.rdbuf(&cout_fcgi_streambuf); 
    cerr.rdbuf(&cerr_fcgi_streambuf); 

    cout << "Status: 404\r\n" 
     << "Content-type: text/html\r\n" 
     << "\r\n" 
     << "<html><body>Not Found</body></html>\n"; 
    } 

    cin.rdbuf(cin_streambuf); 
    cout.rdbuf(cout_streambuf); 
    cerr.rdbuf(cerr_streambuf); 

    return 0; 
} 
1

nginx丟棄"HTTP/1.1 304 Not Modified\r\n"

nginx使用(和吃)Status標題。

如果我的fastcgi程序返回標頭"Status: 304\r\n"

然後我得到這樣的迴應:

HTTP/1.1 304 
Server: nginx/1.6.2 
Date: Sat, 21 May 2016 10:49:27 GMT 
Connection: keep-alive 

正如你可以看到有沒有Status: 304頭。它已被nginx使用。