我们有一个 PHP Web 应用程序,正在使用 Capistrano 将其部署到运行 CentOS 5.5 的 LAMP 服务器上。Capistrano 使用符号链接管理切换到最新版本(和回滚),因此我们的文档根目录必须指向该符号链接。
不幸的是,我们发现,在符号链接更新后的 60 秒内,对 PHP 应用程序的 Web 请求仍然指向文档根目录的符号链接的先前目标。
我在 PHP 配置中发现的唯一可能与此相关的设置是设置realpath_cache_ttl
,但是它设置为 120 秒。我在 apache 的配置中找不到任何内容。
我们不使用 APC。
我找的地方对吗?
答案1
Apache 会缓存符号链接,我假设您在 httpd.conf 中使用了 FollowSymLinks。您可以尝试使用 SymLinksIfOwnerMatch,但其对 lstat 的调用不会被缓存 http://httpd.apache.org/docs/2.0/misc/perf-tuning.html#symlinks
答案2
apache 不会缓存符号链接,但它会缓存一些文件位置,如果你使用 APC,它确实会进行一些缓存。我也看到了这一点,但使用 fabric 进行部署。解决方法是在更改符号链接后重新启动/重新加载/优雅地执行 apache。
先尝试优雅,然后重新加载,如果一切都失败了,则重新启动
答案3
就我的情况而言,问题不在于 Apache 本身。我不得不重新启动 php-fpm。
答案4
Apache 不缓存符号链接(尝试这样做是非常愚蠢的;文件系统缓存对正在发生的事情了解得更多,而且速度非常接近)。我需要了解strace
整个过程,以便更好地了解什么时候发生了什么。