从FasctCGI返回响应到nginx


Return response from FasctCGI to nginx

我是一个FastCGI noob,我面临着一个问题和一些我找不到任何答案的问题,我试图做的是使用FastCGI来处理url凭据,并批准或拒绝,例如,这就是url。http://mydomain/myalias/image.jpg?key=ttttttttt

我想做的是将密钥参数发送到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时显示图像?

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将允许原始请求继续,并直接从磁盘提供图像或其他内容,以及图像的正确标头。

如果响应为200,则必须返回图像,而不是返回状态。

您可以通过以下方式返回图像:将PHP页面作为图像返回。