On September 19, 2011 8:37 , Jim Riggs <apache-li...@riggs.me> wrote:
httpd ->  balancer ->  fcgi balancer members ->  php-fpm

Issue 1: PHP-FPM does not handle the "proxy:balancer" prefix in SCRIPT_FILENAME. It does handle 
"proxy:fcgi" as a special case (see https://bugs.php.net/bug.php?id=54152 fix by jim). So, it seems we need 
to also add a "proxy:balancer" exception there unless a balanced mod_proxy_fcgi member should actually be 
using "proxy:fcgi" instead. What are people's thoughts on the prefix that should be sent by httpd in this 
case? To address this for now, I have modified PHP (fpm_main.c alongside jim's existing changes).

As the person who wrote the changes that Jim later modified and committed, this seems reasonable to me, assuming it is correct (I say "assuming" only because I have never used mod_proxy_fcgi in a balancer configuration).


Issue 2: Once I got Issue 1 addressed, everything started working except in the case of a query string. I spent 
considerable time tracing and trying to figure out where the issue is occurring, but I am hoping one of you who is much 
more familiar with the code than I will be able to say, "Oh, look right here." The problem is that the query 
string is getting appended to SCRIPT_FILENAME if proxied through a balancer. FPM does not like this. It does not seem to 
happen in the case of proxying directly to "fcgi://...", but once I change this to "balancer://...", 
the query string gets added to SCRIPT_FILENAME. I believe this happened with both ProxyPass* and mod_rewrite [P]. In 
mod_rewrite, this should get handled in splitout_queryargs(), but somehow it is getting added back (probably in 
proxy_balancer_canon() which adds the query string back to r->filename?). For right now, I have done a brute-force 
"fix" for this by adding the code below to the beginning of send_environment() in mod_proxy_fcgi.c, before the 
calls to ap_add_common_vars() and ap_add_cgi_vars(). I am guessing that this isn't the ultimate fix for this issue, so I 
am interested in others' thoughts.

+    /* Remove query string from r->filename (r->args is already set and passed 
via QUERY_STRING) */
+    q = ap_strchr_c(r->filename, '?');
+    if (q != NULL) {
+        *q = '\0';
+    }


This sounds like it is related to https://issues.apache.org/bugzilla/show_bug.cgi?id=51077 as well. Probably a new patch is needed to consistently and properly fix all of the cases (regular, mod_proxy_{f,s}cgi, mod_proxy_{f,s}cgi + balancer).

--
  Mark Montague
  m...@catseye.org


Reply via email to