【问题标题】:How to pass custom parameters between FCGI servers in C via NGINX?如何通过 NGINX 在 C 中的 FCGI 服务器之间传递自定义参数?
【发布时间】:2015-03-21 19:28:51
【问题描述】:

简介

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

我的问题

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

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

目前的工作

这就是我所拥有的。 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;
}

感谢您的帮助!

【问题讨论】:

    标签: nginx fastcgi


    【解决方案1】:

    身份验证处理程序通过 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");
    

    【讨论】:

    • 感谢本的示例。身份验证处理程序应该如何设置变量?我问是因为我的后端服务器没有看到我在身份验证处理程序中分配的值。我的身份验证处理程序有“int custom_param = 100;”。在后端服务器中,我有一个 getenv("CUSTOM_PARAM"); 的 printf。它显示的值为 0。
    • 在第一个示例中,auth_request_set 正在读取 from 您的 FCGI 身份验证处理程序的标头。我认为混淆可能来自使用相同变量的两个示例,我会澄清一下。
    • 我不清楚我应该如何在我的 fastcgi auth 处理程序代码中设置变量。我有: printf("Content-type: text/html\r\n" // "custom_param: 100\r\n" "custom-param: 100\r\n" ...);此外,后端服务器仍然使用 getenv() 读取值,那么谁将使用 $receive_from_auth 变量?谢谢。
    • 示例的编写方式,它将从您的处理程序中读取 X-Custom-Param 标头,或者您可以将其更改为 $upstream_http_custom_param。但是我可能误解了你的意图,如果没有任何东西可以读取 $receive_from_auth 变量,你真的需要从 fcgi 发回数据吗?
    • fcgi 身份验证处理程序联系 Radius 服务器,该服务器返回一些自定义参数(例如空闲计时器)。我希望将这些参数传递给 fcgi 后端服务器。我不确定如何编写 fcgi 身份验证处理程序以将空闲计时器参数传递给 nginx,以便 nginx 可以将其交给 fcgi 后端。在身份验证处理程序 C 代码中,我有 printf("Content-type: text/html\r\n" "X-Custom-Param: 100\r\n" 在 fcgi 后端服务器代码中,我有一个 printf的 getenv("CUSTOM_PARAM") 并且它显示为 0。我猜“发送 $send_to_auth yourvalue”是没有必要的?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 2019-06-02
    • 1970-01-01
    • 2021-09-21
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多