FCGI 应用程序的问题
Trouble with a FCGI application
我在使用 nginx 让 FCGI 应用程序在 C 中工作时遇到问题。我正在使用 spawn-fcgi 创建套接字和 运行 我的应用程序(我将其命名为 paste)
我想这一定是我的应用程序有问题,但我相当确定我从位于 here.
的示例源中复制了所有相关部分
这是 nginx 给我的错误:
[error] 53300#0: *4 upstream prematurely closed connection while
reading response header from upstream, client: 127.0.0.1, server:
localhost, request: "GET /test HTTP/1.1", upstream:
"fastcgi://unix:/tmp/cfcgi.sock:", host: "localhost"
这是应用程序的来源:
#include <fcgi_stdio.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n\r\n");
printf("Hostname: %s", getenv("SERVER_HOSTNAME"));
}
return EXIT_SUCCESS;
}
nginx相关配置变化:
location /test {
include fastcgi_params;
fastcgi_pass unix:/tmp/cfcgi.sock;
}
以及 spawn-fcgi 命令:
spawn-fcgi -s /tmp/cfcgi.sock -M 0777 -P cfcgi.pid -- paste
Nginx 传递给 FastCGI 服务器的变量在 /etc/nginx/fastcgi_params 中列出,您将其包含在配置文件中。而且没有SERVER_HOSTNAME这样的变量。最接近的是 SERVER_NAME.
函数 getenv() returns 如果未找到所请求的变量,则为 0,这发生在您的情况下。然后这个值被printf(%s)引用,导致出现segmentation fault。
因此,要解决此问题,您可以将参数 SERVER_HOSTNAME 添加到 fastcgi_params 文件(之后不要忘记重新加载 Nginx),或者将 SERVER_HOSTNAME 替换为SERVER_NAME 在您的申请中。
我在使用 nginx 让 FCGI 应用程序在 C 中工作时遇到问题。我正在使用 spawn-fcgi 创建套接字和 运行 我的应用程序(我将其命名为 paste)
我想这一定是我的应用程序有问题,但我相当确定我从位于 here.
的示例源中复制了所有相关部分这是 nginx 给我的错误:
[error] 53300#0: *4 upstream prematurely closed connection while
reading response header from upstream, client: 127.0.0.1, server:
localhost, request: "GET /test HTTP/1.1", upstream:
"fastcgi://unix:/tmp/cfcgi.sock:", host: "localhost"
这是应用程序的来源:
#include <fcgi_stdio.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv) {
while(FCGI_Accept() >= 0) {
printf("Content-type: text/html\r\n\r\n");
printf("Hostname: %s", getenv("SERVER_HOSTNAME"));
}
return EXIT_SUCCESS;
}
nginx相关配置变化:
location /test {
include fastcgi_params;
fastcgi_pass unix:/tmp/cfcgi.sock;
}
以及 spawn-fcgi 命令:
spawn-fcgi -s /tmp/cfcgi.sock -M 0777 -P cfcgi.pid -- paste
Nginx 传递给 FastCGI 服务器的变量在 /etc/nginx/fastcgi_params 中列出,您将其包含在配置文件中。而且没有SERVER_HOSTNAME这样的变量。最接近的是 SERVER_NAME.
函数 getenv() returns 如果未找到所请求的变量,则为 0,这发生在您的情况下。然后这个值被printf(%s)引用,导致出现segmentation fault。
因此,要解决此问题,您可以将参数 SERVER_HOSTNAME 添加到 fastcgi_params 文件(之后不要忘记重新加载 Nginx),或者将 SERVER_HOSTNAME 替换为SERVER_NAME 在您的申请中。