2014-02-17 5 views
4

Nginx 뒤에 사용자 지정 FastCGI 응용 프로그램이 있으며 Nginx가 200 개의 상태 코드 이외의 값을 반환하는 데 어려움을 겪고 있습니다.FastCGI 및 Nginx - HTTP 상태 반환

  • 에 fast_cgi_intercept_errors 설정 :

    나는 다음 시도했습니다.

  • ApplicationStatus을 통해 코드를 반환하는 중입니다.

  • StdError 스트림에서 오류가 다시 발생합니다.

    • "상태 : 404 찾을 수 없음"

    • "HTTP/1.1 404 찾을 수 없음"

    • "X-PHP-응답 - 다음 머리글 중 하나를 보내기

    • 코드 : 404 "

    • "상태 : 404 찾을 수 없음; "

    • "HTTP/1.1 404 찾을 수 없음;"

    • "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에 의해 먹었습니다.

관련 문제