我目前使用以下设置为客户托管网站:
- Apache 2.2.16
- mod_fastcgi 版本 2.4.7
- php 5.3.3
Apache 使用 worker MPM 并通过动态 FastCGI 配置提供 PHP 服务:
FastCgiSuexec /usr/sbin/suexec FastCgiConfig -singleThreshold 0 -pass-header 授权 -idle-timeout 3600 SuexecUserGroup 用户组 操作应用程序/x-httpd-fastphp /cgi-bin/php.fcgi 添加类型应用程序/x-httpd-fastphp.php
这个方法很好用,但是这会为每个 VirtualHost 创建一个 php-cgi 实例(即使 cgi-bin 目录对于给定帐户在物理上是相同的),所以如果客户端有几个子域,它就会开始累积,导致服务器不可用并将其破坏。
因此,这让我想到了一个实际问题,是否可以通过单个 php-cgi 实例为帐户提供所有 php 请求?最好同时保留 suexec 位,以防止客户端读取其目录之外的文件。
答案1
如果我可以添加个人意见的话..
使用 Nginx,它更快,更简单,更容易做你想做的事......(并且占用更少的内存)
这是我的个人喜好。:D
https://calomel.org/nginx.html是一个很好的详细的例子
答案2
您是否对每个虚拟主机都有一些 fcgid 配置?(除了全局 fcgid 配置),即在标签内?
我只是认为这可能是问题的一个可能原因,可以通过为所有 Web 帐户所共有的某些文件系统路径添加 fcgid 配置来解决,如下所示(例如,如果使用 Ubuntu,则在 /etc/apache2/sites-enabled/000-default 中):
NameVirtualHost SOME-IP-ADDRESS:80
<Directory /some-path/webaccounts/>
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
</Directory>
<VirtualHost SOME-IP-ADDRESS:80>
...
至少我们在 2Gb RAM 机器(Ubuntu 8.04)上使用 fcgid 与大约 20-30 个 vhosts 没有任何问题,设置与上述一致。