passing data to CGI scripts via PATH_INFO
Lyle
webmaster at cosmicperl.com
Fri May 23 09:17:50 UTC 2014
On 22/05/2014 22:52, Valentin V. Bartenev wrote:
> On Thursday 22 May 2014 22:14:23 Lyle wrote:
>> ...
>> Also gives a 403. So I suspect that nginx is looking for a file called =
>> in a folder named api.cgi/
>> I'm not sure what configuration we need to do to fix this.
> [..]
>
> As I already said, nginx knows nothing about CGI. It doesn't look for any
> files in your location with "fastcgi_pass". It just passes request and
> all the FastCGI params that you have configured with the values that you
> have set.
>
> For example, since you have:
>
> fastcgi_param PATH_INFO $fastcgi_path_info;
>
> and missing the fastcgi_split_path_info directive, then probably nginx pases
> empty string in PATH_INFO.
>
> Please, check the docs to figure out how exactly the $fastcgi_path_info
> variable works and what values it takes:
> http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#var_fastcgi_path_info
Ah, I see. It's the FastCGI module that's reading the wrong filename.
I think I understand the process now. Nginx is passing variables to the
fastcgi module, as defined in the config. One of these being:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
$fastcgi_script_name being everything after http://.../ by default. So
FastCGI was trying to open a file that didn't exist. The
fastcgi_split_path_info variable addresses this issue, by overloading
$fastcgi_script_name and $fastcgi_path_info with the split from the
regexp. So adding the following:
fastcgi_split_path_info ^(.+\.(?:cgi|pl))(.*)$;
Before the fastcgi_param instructions has fixed the issue. Hooray!
Thanks for your help.
Lyle
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20140523/acf7dc6f/attachment.html>
More information about the nginx
mailing list