【问题标题】:Trouble with a FCGI applicationFCGI 应用程序出现问题
【发布时间】:2015-07-02 17:30:20
【问题描述】:

我无法使用 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

【问题讨论】:

    标签: c nginx fastcgi


    【解决方案1】:

    Nginx 传递给 FastCGI 服务器的变量列在 /etc/nginx/fastcgi_params 中,您将其包含在配置文件中。并且没有像 SERVER_HOSTNAME 这样的变量。最接近的是 SERVER_NAME。

    如果未找到请求的变量,则函数 getenv() 将返回 0,这在您的情况下会发生。然后这个值被printf(%s)引用,导致出现分段错误。

    因此,要解决此问题,您可以将参数 SERVER_HOSTNAME 添加到您的 fastcgi_params 文件(之后不要忘记重新加载 Nginx),或者在您的应用程序中将 SERVER_HOSTNAME 替换为 SERVER_NAME。

    【讨论】:

    • 谢谢!这就是问题
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多