Re: FastCGI-developers Digest, Vol 15, Issue 10

Rob Lemley <[email protected]>
Newsgroups gmane.comp.web.fastcgi.devel
Message-ID <[email protected]>
Great!  I guess that's one of the differences between

  AliasMatch ^/(path/to/yourfiles/*.ext) /yourfastcgiserver

and

  AddHandler my-file-type .xyz
  Action my-file-type /myfastcgiapp

In my AliasMatched fastcgi server, I don't even get a PATH_TRANSLATED var.

tbandrowsky wrote:
> Hey, some answers!  I managed to get it to work and I'm super excited
> about it.  For the purposes of having a FastCGI process multiple
> different files, the following worked, for Apache (This was on an Ubuntu
> based machine). In the below, xspserve is the name of my C++ FastCGI.
>
>         FastCGIServer /var/www/xsp-bin/xspserve
>         AddType application/x-httpd-fastxsp xsp
>         Action application/x-httpd-fastxsp /xsp-bin/xspserve
>
>         <Directory "/var/www/xsp-bin">
>                 AllowOverride None
>                 Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
>         </Directory>
>
> To read the file that is my "custom script" file, I found that
> PATH_TRANSLATED seemed to be the one that did what I needed.
> SCRIPT_NAME game the name of the C++ chumpy itself, and that simply
> wasn't what I was looking for.
>
> Todd
>
> On Wed, 2009-10-28 at 12:00 -0400,
> fastcgi-developers-request-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org wrote:
>   
>> Send FastCGI-developers mailing list submissions to
>> 	fastcgi-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
>>
>> To subscribe or unsubscribe via the World Wide Web, visit
>> 	http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
>> or, via email, send a message with subject or body 'help' to
>> 	fastcgi-developers-request-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
>>
>> You can reach the person managing the list at
>> 	fastcgi-developers-owner-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
>>
>> When replying, please edit your Subject line so it is more specific
>> than "Re: Contents of FastCGI-developers digest..."
>>
>>
>> Today's Topics:
>>
>>    1. Re: FastCGI as a Filter? (Rob Lemley)
>>    2. Re: FastCGI as a Filter? (tbandrowsky)
>>    3. Is there any method (within fcgi) to return a different HTTP
>>       status code than '200 OK'? (Rick Thorne)
>>
>>
>> ----------------------------------------------------------------------
>>
>>
>> Message: 1
>> Date: Tue, 27 Oct 2009 14:01:32 -0500
>> From: Rob Lemley <[email protected]>
>> Subject: Re: [FASTCGI] FastCGI as a Filter?
>> To: [email protected]
>> Message-ID: <[email protected]>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> Date: Sat, 24 Oct 2009 23:52:55 -0400
>>     
>>> From: tbandrowsky <[email protected]>
>>> Subject: [FASTCGI] FastCGI as a Filter?
>>>
>>> I'm trying to make heads or tales of whether or not Apache 2 supports
>>> FastCGI as a filter.  Basically, I want to have a bunch of files with a
>>> particular extension in a directory all get passed through to my FastCGI
>>> application rather than get spewed out directly.  I've read that one
>>> does not need filters to do this, although clearly, filters look like
>>> they would be a pretty elegant approach. Can I do this sort of a thing
>>> with Apache, or am I just banged and should use something like Sun's web
>>> server?
>>>   
>>>       
>> Apparently mod_fastcgi (the apache fastcgi module) does not support
>> FastCGI filter role:
>>
>> "mod_fastcgi does not implement the Authorizer or Filter roles described
>> in the FastCGI specification. However, you can approximate the Filter
>> role using Apache's Action  directive to route requests to a FastCGI
>> Responder. See the documentation for mod_actions for information on the
>> Action directive."
>> (http://www.fastcgi.com/om_archive/servers/apache/apache-fastcgi/mod_fastcgi.html)
>>
>> The mod_action solution (which I have no experience with) seems to catch
>> all files with a given mime-type or, in this case, extension:
>>     # Files of a particular file extension
>>     AddHandler my-file-type .xyz
>>     Action my-file-type /cgi-bin/program.cgi
>>
>> which, translated to FastCGI, I think would look something like (untested):
>>
>>     # Files of a particular file extension
>>     AddHandler my-file-type .xyz
>>     Action my-file-type /myfastcgiapp
>>     FastCgiServer /myfastcgiapp ....
>>
>> I believe the way to set this up with apache  AliasMatch directive,
>> which allows you to capture input requests based on a more general
>> regular expression pattern, to set the Apache2 "AliasMatch" directive to
>> pass only the files you want to filter to your FastCGI server:
>>
>>     #APACHE CONFIG:
>>
>>     # NameVirtualHost *:80
>>
>>     <VirtualHost *:80>
>>       ServerName yourserver.example.com
>>       ServerAlias yourserver
>>       AliasMatch ^/(path/to/yourfiles/*.ext) /yourfastcgiserver
>>     </VirtualHost>
>>
>>     FastCgiExternalServer /yourfastcgiserver  -socket
>>     /var/run/yourfastcgiserver/socket
>>
>>     #END OF APACHE CONFIG
>>
>> Next, you would implement the FastCGI server to read the files and
>> filter them as necessary.  This usage of FastCGI is fairly well known
>> and I don't have a good concise example in my own code.  To filter these
>> files, generally all you would do is open the filename found in the
>> FastCGI Environment (CGI) variable "SCRIPT_NAME."  You might need to
>> adjust the directory or something depending on how your server namespace
>> is set up.
>>
>>     while accept_fastcgi_request(request)                    
>>     #FCGX_Accept(), etc
>>         script_name = lookup(request.envp, "SCRIPT_NAME")
>>         filter(script_name)                                   # writes
>>     using FCGX_PutStr(), may need to Put the HTTP response header too.
>>     endwhile
>>
>>
>> All of the information about the request will come through the FastCGI
>> request.  You'll look at various fields in the FastCGI environment to
>> determine the file to open and filter.  Generally your program might
>> look at REQUEST_URI, QUERY_STRING and SCRIPT_NAME.  You may also want to
>> check for POST request data in some case (depends on having
>> "CONTENT_TYPE=multipart/form-data; boundary.....).  Or you can just
>> ignore any query string and post data and just filter the SCRIPT_NAME.
>>
>> NOTE: usually (always?) REQUEST_URI == SCRIPT_NAME + "?" + QUERY_STRING
>>
>> Rob
>>
>> -------------- next part --------------
>> An HTML attachment was scrubbed...
>> URL: <http://mailman.pins.net/mailman/private.cgi/fastcgi-developers/attachments/20091027/51de45cd/attachment-0001.html>
>>
>> ------------------------------
>>
>> Message: 2
>> Date: Tue, 27 Oct 2009 22:30:47 -0400
>> From: tbandrowsky <[email protected]>
>> Subject: Re: [FASTCGI] FastCGI as a Filter?
>> To: Garrett Wollman <[email protected]>
>> Cc: [email protected]
>> Message-ID: <1256697047.3271.5.camel@tbandrow-desktop>
>> Content-Type: text/plain; charset="UTF-8"
>>
>> Thanks!  Turns out that is exactly what I was trying to do and it works
>> wonderfully.
>>
>> On Mon, 2009-10-26 at 11:53 -0400, Garrett Wollman wrote:
>>     
>>> <<On Sat, 24 Oct 2009 23:52:55 -0400, tbandrowsky <[email protected]> said:
>>>
>>>       
>>>> I'm trying to make heads or tales of whether or not Apache 2 supports
>>>> FastCGI as a filter.  Basically, I want to have a bunch of files with a
>>>> particular extension in a directory all get passed through to my FastCGI
>>>> application rather than get spewed out directly.
>>>>         
>>> That's pretty easy to accomplish, although I don't know about using
>>> the filter mechanism for that.  Here's what we do for PHP:
>>>
>>> ScriptAlias /.php5-cgi /usr/bin/php5-cgi
>>> Action php5-script /.php5-cgi
>>> Action application/x-httpd-fastphp5 /.php5-cgi
>>>
>>> AddType application/x-httpd-fastphp5 php5
>>>
>>> -GAWollman
>>>
>>>       
>>
>>
>> ------------------------------
>>
>> Message: 3
>> Date: Wed, 28 Oct 2009 10:51:09 -0400
>> From: Rick Thorne <Rick-fmpmzfu+nTwn/[email protected]>
>> Subject: [FASTCGI] Is there any method (within fcgi) to return a
>> 	different HTTP status code than '200 OK'?
>> To: fastcgi-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
>> Message-ID:
>> 	<20091028145114.4F00F7C08D-TjF1lRVedEqNcXN1wV05eeUwyxKFjzCdYmU9tAad8xPR7s880joybQ@public.gmane.org>
>> Content-Type: text/plain; charset="us-ascii"; format=flowed
>>
>> Is there any method (within fcgi) to return a HTTP status code other 
>> than '200 OK'?
>>
>> I'm serving up images stored in a database; using fcgi and Apache.
>>
>> Using www.httpviewer.net to track the response 'back' from our 
>> server, a request for an existing image (through our fcgi 
>> application) returns the following HTTP information:
>>    HTTP/1.1 200 OK(CR)(LF)
>>    Date: Tue, 27 Oct 2009 16:57:57 GMT(CR)(LF)
>>    Server: Apache/2.2.11 (Win32) PHP/5.3.0 mod_fastcgi/2.4.6(CR)(LF)
>>    Content-Length: 3302(CR)(LF)          <--- written by our fcgi application
>>    Content-Type: image/png(CR)(LF)               <--- written by our 
>> fcgi application
>>    (CR)(LF)                                      <--- written by our 
>> fcgi application
>>    ...3302 bytes of .png data                    <--- written by our 
>> fcgi application
>>
>> The web page receives and displays the image correctly.
>>
>> The web page can also generate requests for images that do not exist, 
>> and these requests also come through our fcgi application (we don't 
>> know that they do not exist until we attempt to find them in the database).
>>
>> We'd like to return the '404 Not Found' header for these non-existent 
>> images, as in:
>>    HTTP/1.1 404 Not Found(CR)(LF)
>>    Date: Tue, 27 Oct 2009 17:04:47 GMT(CR)(LF)
>>    Server: Apache/2.2.11 (Win32) PHP/5.3.0 mod_fastcgi/2.4.6(CR)(LF)
>>    (CR)(LF)
>>
>> However, within our fcgi application I don't appear to have control 
>> over the first three HTTP response lines (the lines that starts with 
>> 'HTTP/1.1', 'Date:', and 'Server:').  I believe Apache generates 
>> these lines when it successfully parses the fcgi request and finds 
>> the required fcgi startup file.  Then it calls the fcgi application 
>> and pushes the data through the pipes to and from our fcgi application.
>>
>> In other words, apparently all fcgi applications have to work with 
>> only the 'HTTP/1.1 200 OK(CR)(LF)' response and cannot change this 
>> response code to another value.
>>
>> The FCGX_SetExitStatus() command does 'not' control this HTTP 
>> response code (?I tried w/o success on the output stream, perhaps I 
>> should have tried the error stream?).
>>
>> The current workaround I have for this particular issue is to keep 
>> the '200 OK' response and return an empty .png image.  This solution 
>> 'works' (in this particular example), but I'd also like to be able to 
>> respond with other HTTP codes for some other error conditions.
>>
>> Note: I'm writing this fcgi application in 'C', so I can pretty much 
>> call any (public) operating system/Apache/fcgi dynamic link library 
>> entry point.
>>
>> Thoughts and/or suggestions welcome...
>>
>> Rick Thorne
>> Landbase Systems Corporation
>> One World / One Map
>> (412)563-9120 (Office)
>> (412)563-9122 (Desk)
>>
>>
>>
>> ------------------------------
>>
>> _______________________________________________
>> FastCGI-developers mailing list
>> FastCGI-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
>> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
>>
>>
>> End of FastCGI-developers Digest, Vol 15, Issue 10
>> **************************************************
>>
>>     
>
>
> _______________________________________________
> FastCGI-developers mailing list
> FastCGI-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
>
>
>

_______________________________________________
FastCGI-developers mailing list
FastCGI-developers-xGejAJT2w6xVgU18Zptdi0EOCMrvLtNR@public.gmane.org
http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.