我在Nginx后面有一个自定义的FastCGI应用程序,我很难让Nginx返回除200状态代码之外的任何内容。
我尝试了以下内容:
设置fast_cgi_intercept_errors。
通过ApplicationStatus
中的EndRequest
返回代码。
在StdError流上返回错误。
发送以下任何标题:
“状态:404未找到”
“找不到HTTP / 1.1 404”
“X-PHP-Response-Code:404”
“状态:404未找到;”
“找不到HTTP / 1.1 404;”
“X-PHP-Response-Code:404;”
任何帮助都会很棒,我很困难。
答案 0 :(得分:2)
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吃掉了。
答案 1 :(得分: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;
}