如何通过NGINX在C中的FCGI服务器之间传递自定义参数?

时间:2015-01-22 20:46:02

标签: nginx fastcgi

简介

我的FastCGI服务器是用C语言编写的。我希望FCGI auth服务器将一些自定义参数(例如Radius服务器返回的一些参数)传递给FCGI "back-end"服务器。

我的问题

NGINX是否支持在C中的两个FCGI服务器之间传递自定义参数?如果是的话,我将非常感谢以下方面的帮助:

  1. 如何编程FCGI auth服务器以将变量传递给NGINX。
  2. 如何对FCGI后端服务器进行编程以读取自定义参数
  3. 如何配置nginx.conf文件。在下面的示例中,我有“fastcgi_param CUSTOM_PARAM custom_param;”。我不知道这是否是这样做的方式,我通过HTTP头参数完成了它。
  4. 辛苦工作

    这就是我所拥有的。 FCGI / auth服务器将设置custom_param variable,我希望NGINX将此变量转发到FCGI后端服务器。

    location / {
        auth_request /auth;
        include fastcgi_params;
        fastcgi_pass   127.0.0.1:9000;
    }
    
    location = /auth {
        include fastcgi_params;
        fastcgi_param CUSTOM_PARAM custom_param;
        fastcgi_pass   127.0.0.1:9010;
    }
    

    感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

身份验证处理程序通过http标头将信息传递回服务器。使用nginx,您将使用auth_request_set将这些值分配给变量:

location / {
    auth_request /auth;
    auth_request_set $receive_from_auth $upstream_http_x_custom_param;
    include fastcgi_params;
    fastcgi_pass   127.0.0.1:9000;
}

从nginx向FCGI发送参数的方式与您指示的方式相同:

location = /auth {
    include fastcgi_params;
    set $send_to_auth yourvalue; 
    fastcgi_param CUSTOM_PARAM $send_to_auth;
    fastcgi_pass   127.0.0.1:9010;
}

这些参数是从环境中读取的:

char *custom_param;
custom_param = getenv("CUSTOM_PARAM");