[fpc-pascal] Is Path_Info available in FastCGI working as proxy?

silvioprog silvioprog at gmail.com
Fri Jan 30 14:47:07 CET 2015


On Thu, Jan 29, 2015 at 7:28 PM, silvioprog <silvioprog at gmail.com> wrote:

> On Thu, Jan 29, 2015 at 6:58 PM, Michael Van Canneyt <
> michael at freepascal.org> wrote:
>>
>> On Thu, 29 Jan 2015, silvioprog wrote:
>>
>>> Hello,
>>>
>>> I've the same problem in Apache and nginx: TRequest.PathInfo always
>>> returns an empty string.
>>>
>>> In Apache, I'm using the the mod_proxy_fcgi module already distributed
>>> in Apache 24. In nginx, I'm using this configuration:
>>>
>>> location /dev/duallsms {
>>> fastcgi_pass  localhost:8080;
>>> ... other configurations ...
>>> fastcgi_param PATH_INFO $fastcgi_path_info; # from nginx docs
>>> }
>>>
>>> First I've tested it on Windows, but I've noticed that it fail in Linux
>>> too. So I ask: is PATH_INFO available in FastCGI (working as proxy)? If
>>> not, what I use instead it?!
>>>
>>
>> PATH_INFO is not always available, you need to configure that in apache
>> and/or nginx.
>>
>
> Thanks for the information.
>
>
>> See http://httpd.apache.org/docs/trunk/mod/mod_proxy_fcgi.html
>>
>> The FPC fcl-web components by themselves do not try to reconstruct
>> PATH_INFO.
>> You can try determining it from SCRIPT_URI  or SCRIPT_NAME.
>
>
> Hm... what do you think about to read it from the REQUEST_URI param? If it
> is good, you need to do a small change in FCL (if relevant hehe). The patch
> in attached allows to use the implementation below:
>
> program project1;
>
> {$mode objfpc}{$H+}
>
> uses
>   HttpDefs, custfcgi;
>
> type
>
>   { TMyFCGIRequest }
>
>   TMyFCGIRequest = class(TFCGIRequest)
>   public
>     property CGIParams;
>   end;
>
>   { TMyFCGIHandler }
>
>   TMyFCGIHandler = class(TFCGIHandler)
>   public
>     function CreateRequest: TFCGIRequest; override;
>     procedure HandleRequest(ARequest: TRequest; AResponse: TResponse);
> override;
>   end;
>
>   { TMyFCGIHandler }
>
>   function TMyFCGIHandler.CreateRequest: TFCGIRequest;
>   begin
>     Result := TMyFCGIRequest.Create;
>   end;
>
>   procedure TMyFCGIHandler.HandleRequest(ARequest: TRequest; AResponse:
> TResponse);
>   begin
>     // open "
> http://localhost/dev/duallsms/pesquisa/contato?campo=nome&filtro=fulano"
> and get
>     // the "REQUEST_URI:
> /dev/duallsms/pesquisa/contato?campo=nome&filtro=fulano" output
>     AResponse.Contents.Text := 'REQUEST_URI: ' +
>       TMyFCGIRequest(ARequest).CGIParams.Values['REQUEST_URI'];
>   end;
>
> begin
>   with TMyFCGIHandler.Create(nil) do
>   try
>     Port := 8080;
>     Run;
>   finally
>     Free;
>   end;
> end.
>

I'm resending this last question because I'm not sure if my email was
delivered.

-- 
Silvio Clécio
My public projects - github.com/silvioprog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20150130/17d070a1/attachment.html>


More information about the fpc-pascal mailing list