dsxd62219570
2009-02-22 10:17 阅读 63
已采纳

在Apache和NGINX之间共享PHP-CGI

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.

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    dongzhidian3538 dongzhidian3538 2009-02-22 19:33

    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!

    点赞 评论 复制链接分享

相关推荐