views:

1191

answers:

1

Hi,

I've been running most of my PHP apps on my website on a fastcgi backend, served by NGINX. I have a new application which seems pretty well integrated with Apache; it's heavily dependent on dynamically written .htaccess files, for example. I'm working on modifying it to work natively with NGINX, but that's not yet ready. In the meantime, I was going to have NGINX proxy all connections to that path straight to Apache, and let Apache handle it.

However, I'm on a memory limited VPS, and I'd rather not run one set of PHP-CGI processes for NGINX (with their own APC cache) and another for Apache (using more memory for their APC cache). Has anyone had any luck sharing PHP between the two?

mod_ fcgid doesn't appear to support using already running servers, so I tried mod_ fastcgi. This seemed to work at first, but was sucking up quite a lot of memory (committed -- it was growing, not just static). Worse, I couldn't get the DirectoryIndex line in my apache configs to work with mod_fastcgi!

I added

    AddHandler php5-fastcgi .php
    FastCgiExternalServer /var/www -host 127.0.0.1:9000

to my Apache config, and all .php pages are processed, but a path like http://example.com/foo/ doesn't server /foo/index.php! If I remove FastCgiExternalServer, then it does find the index.php, but of course just shows it as text.

I'm assuming it's because DirectoryIndex is processed after FastCgiExternalServer, but I have no idea how this can be changed.

+5  A: 

Problem solved. The trick was to use the following lines

FastCGIExternalServer /var/www/fast-cgi-fake-handler -host 127.0.0.1:9000
AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /fast-cgi-fake-handler

The relative path in Action + the full path in FastCGIExternalServer did it!

Mikeage
Good analysis. +1. See comments of http://stackoverflow.com/questions/487737. 12 down, 3 to go (1 per day)
VonC
What does the rest of your config look like? Inserting the above lines in my Apache config doesn't work.
X-Istence