[FASTCGI] FastCGI-developers Digest, Vol 15, Issue 10

tbandrowsky tbandrowsky at treatyist.com
Wed Oct 28 19:41:00 EDT 2009


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 at mailman.fastcgi.com wrote:
> Send FastCGI-developers mailing list submissions to
> 	fastcgi-developers at mailman.fastcgi.com
> 
> 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 at mailman.fastcgi.com
> 
> You can reach the person managing the list at
> 	fastcgi-developers-owner at mailman.fastcgi.com
> 
> 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 <rclemley at booksys.com>
> Subject: Re: [FASTCGI] FastCGI as a Filter?
> To: fastcgi-developers at mailman.pins.net
> Message-ID: <4AE7438C.7070901 at booksys.com>
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Date: Sat, 24 Oct 2009 23:52:55 -0400
> > From: tbandrowsky <tbandrowsky at treatyist.com>
> > 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 <tbandrowsky at treatyist.com>
> Subject: Re: [FASTCGI] FastCGI as a Filter?
> To: Garrett Wollman <wollman at csail.mit.edu>
> Cc: fastcgi-developers at mailman.pins.net
> Message-ID: <1256697047.3271.5.camel at 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 <tbandrowsky at treatyist.com> 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 at LandbaseSystems.com>
> Subject: [FASTCGI] Is there any method (within fcgi) to return a
> 	different HTTP status code than '200 OK'?
> To: fastcgi-developers at mailman.fastcgi.com
> Message-ID:
> 	<20091028145114.4F00F7C08D at smtp-ext-01.mx.pitdc1.expedient.net>
> 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 at mailman.fastcgi.com
> http://mailman.pins.net/mailman/listinfo.cgi/fastcgi-developers
> 
> 
> End of FastCGI-developers Digest, Vol 15, Issue 10
> **************************************************
> 




More information about the FastCGI-developers mailing list