You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Markus Schiegl <ms...@schiegl.com> on 2006/04/22 23:33:43 UTC
mod_proxy_fcgi and php
Hi,
i took some time and played with the latest mod_proxy_fcgi and PHP as
Backend.
It even works somehow :-)
I use trunk on Solaris 10x86 and PHP 5.1.2 configured as fastcgi server.
PHP has been configured with "doc_root = /opt/www/html" and
"cgi.fix_pathinfo = 0"
Omitting these settings when accessing /opt/www/html/i.php gives:
"No input file specified."
According to truss PHP tried to stat some weird files
(e.g. proxy:balancer://phpfiles/i.php) finds nothing and *bang*
In the working case SCRIPT_FILENAME is set to e.g.
"proxy:balancer://phpfiles/i.php"
My simple php apps work nevertheless.
relevant lines from httpd.conf...
=================================
<Proxy balancer://phpfiles>
BalancerMember fcgi://localhost:8000
</Proxy>
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -f
# according to the docs REQUEST_FILENAME should contain the full
filename
# in this case its the same as REQUEST_URI (i.e. /i.php and not
/opt/www/html/i.php)
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} \.php$
#RewriteRule ^/(.*) balancer://phpfiles/$1
[E=SCRIPT_FILENAME:%{DOCUMENT_ROOT}%{REQUEST_FILENAME},P]
# tried to overwrite SCRIPT_FILENAME, rewrite.log confirms this, but it
didn't work ;-)
# RewriteRule ^/(.*) fcgi://localhost:8000/$1 [P] # needs patch below
(1)
RewriteRule ^/(.*) balancer://phpfiles:8000/$1 [P]
error.log (Patch (1) applied and corresponding RewriteRule used)
==================================================================
...
mod_proxy_fcgi.c(88): proxy: FCGI: canonicalising URL
//localhost:8000/i.php
mod_proxy_fcgi.c(113): [client 192.168.210.20] proxy: FCGI: set
r->filename to proxy:fcgi://localhost:8000/i.php
mod_proxy_fcgi.c(118): [client 192.168.210.20] proxy: FCGI: set
r->path_info to /i.php
proxy_util.c(1397): [client 192.168.210.20] proxy: *: found reverse
proxy worker for fcgi://localhost:8000/i.php
mod_proxy.c(756): Running scheme fcgi handler (attempt 0)
...
>From my limited perspective r->filename should be set to
"/opt/www/html/i.php"
Any ideas?
While playing with mod_rewrite i realized it does not recognize fcgi as
scheme yet (1)
The following patch should solve this.
Index: httpd-trunk/modules/mappers/mod_rewrite.c
===================================================================
--- httpd-trunk/modules/mappers/mod_rewrite.c (revision 396157)
+++ httpd-trunk/modules/mappers/mod_rewrite.c (working copy)
@@ -577,6 +577,9 @@
if (!strncasecmp(uri, "tp://", 5)) { /* ftp:// */
return 6;
}
+ if (!strncasecmp(uri, "cgi://", 6)) { /* fcgi:// */
+ return 7;
+ }
break;
case 'g':
--
Markus Schiegl | ms@schiegl.com | 7159881@ICQ | PGP-KeyID:
0x21063504
Re: mod_proxy_fcgi and php
Posted by Garrett Rooney <ro...@electricjellyfish.net>.
On 4/22/06, Markus Schiegl <ms...@schiegl.com> wrote:
Sorry it took me so long to get back to this. Got distracted with
other things, etc.
> From my limited perspective r->filename should be set to
> "/opt/www/html/i.php"
> Any ideas?
mod_proxy_fcgi is talking to an arbitrary socket that could correspond
to any file on disk, how would it figure out what to set r->filename
to?
The fact that PHP has settings you can tweak to make this work implies
to me that it's not a problem we need to fix...
> While playing with mod_rewrite i realized it does not recognize fcgi as
> scheme yet (1)
> The following patch should solve this.
>
> Index: httpd-trunk/modules/mappers/mod_rewrite.c
> ===================================================================
> --- httpd-trunk/modules/mappers/mod_rewrite.c (revision 396157)
> +++ httpd-trunk/modules/mappers/mod_rewrite.c (working copy)
> @@ -577,6 +577,9 @@
> if (!strncasecmp(uri, "tp://", 5)) { /* ftp:// */
> return 6;
> }
> + if (!strncasecmp(uri, "cgi://", 6)) { /* fcgi:// */
> + return 7;
> + }
> break;
>
> case 'g':
I'll look at getting this checked in, thanks!
-garrett