首先,我们暂时对文件缓存根本不感兴趣,重要的是用户缓存。
对于我们正在开发的一些应用程序,我们需要将有关数据库结构和查询结果的信息存储在缓存中。
我们的服务器上有几十个站点,其中一些由具有 ftp 访问权限的客户控制。
我担心虚拟主机(我们无法控制 php 文件的虚拟主机)会干扰另一个虚拟主机的缓存。我们可以对应用程序进行编码,使其缓存键不发生冲突,但我们不能保证客户不会清除或修改我们的缓存值。
我们在 CentOS 5.3 服务器上安装了 mod_php,并安装了 plesk。我们安装了 mod_php apc.cache_by_default=0
,但apc.filters="-/.*"
它似乎破坏了我们安装的许多第三方应用程序。
我已经在 vhost 中尝试过php_admin_flag apc.enabled off
,php_admin_value apc.enabled 0
但似乎没有效果。
有没有什么办法可以仅对某些站点完全禁用 apc?
或者,有没有办法让每个虚拟主机拥有单独的用户缓存?或者不同的缓存解决方案?我们正在考虑 memcached,但我担心它会有类似的问题。
谢谢。
答案1
这种用法需要 memcache。请获取 memcache,阅读以下文档:http://memcached.org。
答案2
APC 和 mod_php 的问题在于 mod_php 与 apache 位于同一个进程中。这意味着您只能为所有 vhost 进行一次 PHP 配置。
尝试查看 PHP 的 FastCGI 接口。不幸的是,我没有在 apache 上进行设置的经验(我们使用 nginx),但我们已经很好地利用了它在共享托管服务器上为不同站点分离配置。分离配置意味着分离所有内容:您可以为不同的站点启用不同的 PHP 模块,为不同的站点设置不同的会话存储,为不同的站点设置不同的上传限制,等等。基本上,它归结为为(至少)每个客户端配备一个单独的 PHP-FCGI 服务器。每个 FCGI 服务器都有自己的配置;我们使用/srv/$domain/fcgi/php.ini
,但无论您和 Plesk 如何使用都可以。
CGI 可能也有效;我不太确定 APC 是如何进行缓存的。如果缓存在内存中,那么 CGI 就无济于事了,因为它会为每个请求创建一个新进程,这意味着每个请求都会丢失任何内存缓存。需要说明的是,即使这样做有效,也不建议这样做,但这样做更容易进行测试。
答案3
正如本文所述Linux 系统管理员博客:
为特定虚拟主机配置或使用.htaccess使用:
php_flag apc.cache_by_default On