【问题标题】:Return response from FasctCGI to nginx从 FasctCGI 向 nginx 返回响应
【发布时间】:2016-02-25 11:48:38
【问题描述】:

我是一个 FastCGI 菜鸟,我面临一个问题和一些我无法找到任何答案的问题,我想做的是使用 FastCGI 处理 url 凭据并批准或拒绝,例如这是网址。 http://mydomain/myalias/image.jpg?key=ttttttttt

我想要做的是将 key 参数发送到 fastCGI 进行一些处理并返回到 nginx 200(OK)以提供文件或 403(禁止)。 这是我的 nginx 配置:

location /my_location/ {
    root   /var/www/html;
    index  index.html index.htm;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_param  SCRIPT_FILENAME  /etc/nginx/conf.d/process_request.php;
    fastcgi_param  QUERY_STRING $uri;
    fastcgi_param  KEY_VALUE $arg_key;
    include /etc/nginx/fastcgi_params;
}

在我的 process_request.php 文件中,我可以使用这个成功读取 KEY_VALUE:

$_SERVER['KEY_VALUE'];

我想要的是将响应返回给 nginx 我正在尝试的是:

header("Status: 200 OK");

header("Status: 403 forbidden");

但问题是它只返回一个响应代码为 200 或 403 的空白页面,而没有在浏览器中显示我的图像。 那么我缺少什么,我想在代码为 200 时显示图像?

【问题讨论】:

    标签: php nginx fastcgi


    【解决方案1】:

    Nginx 有一个功能可以完全满足您的需求,并且不会将 PHP 与提供静态文件捆绑在一起。

    auth_request

    ngx_http_auth_request_module 模块(1.5.4+)根据子请求的结果实现客户端授权。如果子请求返回 2xx 响应码,则允许访问。如果它返回 401 或 403,则访问被拒绝并带有相应的错误代码。子请求返回的任何其他响应代码都被视为错误。

    你的配置看起来像:

    location /my_location/ {
      auth_request /access/auth;
      root   /var/www/html;
      index  index.html index.htm;
    }
    
    location /access/auth {
      fastcgi_pass   127.0.0.1:9000;
      fastcgi_param  SCRIPT_FILENAME  /etc/nginx/conf.d/process_request.php;
      fastcgi_param  QUERY_STRING $uri;
      fastcgi_param  KEY_VALUE $arg_key;
      include /etc/nginx/fastcgi_params;
    }
    

    在这种情况下,您的 PHP 脚本只会返回 200 以表示已通过身份验证,否则任何其他代码 (403) 将返回禁止。您还可以使用 error_page 403 = /forbidden.html 之类的内容自定义 403 响应外观

    如果 PHP 返回 200,则 Nginx 将允许原始请求继续并直接从磁盘提供图像或其他内容以及图像的正确标头。

    【讨论】:

    • 谢谢,我试过了,但我有一个问题,就是 fastcgi_param 被空传递给 php 脚本。有没有办法将 get 参数传递给 auth/request ?
    • 试试:fastcgi_param QUERY_STRING $query_string;
    • 我修复了它发送整个 uri 然后在 php 脚本中解析参数 fastcgi_param QUERY_STRING $request_uri;谢谢
    【解决方案2】:

    在响应 200 的情况下,您必须返回图像而不是返回状态。

    您可以通过以下方式返回图像: Return a PHP page as an image.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多