![可以检测相同文件的PHP Opcode缓存](https://linux22.com/image/624638/%E5%8F%AF%E4%BB%A5%E6%A3%80%E6%B5%8B%E7%9B%B8%E5%90%8C%E6%96%87%E4%BB%B6%E7%9A%84PHP%20Opcode%E7%BC%93%E5%AD%98.png)
我目前正在使用 APC 和 PHP FPM 来缓存几百个 Wordpress 网站。使用 2GB 缓存一切运行良好,但效率不高,缓存总是满的。
举个例子,如果我在同一个服务器上有 200 个 Wordpress 网站,并且所有网站都有相同的版本,那么它将缓存 200 个相同的 wp-db.php 文件。
我似乎记得几年前有人讨论过它可能存在安全风险。我怀疑这不再是一个问题(尤其是对于 PHP FPM 而言),但无论如何我控制着所有网站,因此好处大于坏处。
近年来这种情况有变化吗?特别是有了新的默认 Zend Opcache?像符号链接这样的黑客手段并不理想,例如,您无法一次性升级 500 个网站,因此它会不时出现严重故障。
答案1
这是一个部分回应,因为我没有在使用 zend opcode 时遇到过这种情况。
上次我使用 apc 时,我发现这个功能是个 bug,我以前从来没觉得它是个功能 :-)。如果您将chroot
-ed 池与 php-fpm 一起使用,并且如果所有池在 chroot 中都具有相同的相对路径,那么它们将在 apc 中共享相同的缓存键。因为键是完整的绝对文件路径,而在 chroot 中,此文件路径不能包含部分前chroot。
因此你可以尝试使用 chroot。但这需要一些技巧:
- chroot 应该包含 php 可能需要的所有元素(临时目录、/etc/hosts、一些设备)
- php mail 无法工作,应在 smtp 模式下使用
- 一些文件应该从缓存中排除,所有包含设置的文件,如果您忘记这一点,网站就会混乱!
- 也许还有其他人,chroot从来都不是简单的