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