PHP 向不到 1% 的用户提供空白页

PHP 向不到 1% 的用户提供空白页

我们最近将网站迁移到 varnish 后面的负载平衡 apache 集群。从那时起,一小部分用户报告他们无法查看任何页面。我已经将问题缩小了很多。这个问题在迁移之前并不存在,旧的基础设施是一个大盒子。

我们在 Rackspace Cloud 上运行了 8 个 apache2 实例,所有实例都在 varnish 3.0 后面,使用 Rackspace Cloud 负载均衡器(Zeus)进行负载平衡,还有 2 个 mysql 实例,总共 10 台服务器,全部都是 Linux。

用户可以查看静态 html 文件。用户可以查看静态资产(例如图像)。用户无法查看任何 php 文件,即使是仅包含 phpinfo() 的简单文件也无法查看;当负载均衡器不在画面中时,用户无法查看任何 php 文件。

Apache 日志中除了访问日志外没有显示任何值得注意的内容。PHP 错误报告设置为记录,而不是显示,尽管我将其设置为短时间显示,但用户仍然会看到空白页而没有错误。Apache/Varnish/PHP 错误日志没有显示任何值得注意的内容。

服务器是:

  • Ubuntu Maverick 10.10
  • Apache 2.2.16-1ubuntu3.1 (mpm-worker)
  • PHP 5.3.3-1ubuntu9.5(用于fcgi)
  • PHP APC 正在使用中
  • 应用程序在 Code Igniter 上
  • Varnish 原先是 2.1.3,现在则是 3.0.0 - 两个版本都存在这个问题
  • MySQL 是主-主设置中的数据库后端,但是由于客户端访问仅包含 phpinfo(); 的文件的问题,我确信数据库不是问题。

一些配置的快照:

我可以提供进一步调试所需的任何/所有日志,但对于遇到此问题的用户来说,其中没有任何值得注意的内容,典型的访问来自 apache,没有来自 php 的错误。

我感觉它可能以某种方式与 php 会话存储有关,尽管我无法证实这一点。

任何有关该问题的见解都将不胜感激。最后再重申一次,该问题仅影响极少数用户。有 5-10 人就该问题与我们联系,但我认为这个数字比没有报告该问题的人要大。与我们联系的这 5-10 名用户来自不同的大洲/国家/ISP。

答案1

也许这会对您有所帮助:您是否已设置 KeepAlive ?

我们在 varnish 中使用 mpm-itk 时遇到了同样的问题,问题是,当使用与实际保持活动会话不同的虚拟主机访问 mpm-itk 时,它会终止连接。然后,每个普通浏览器都会尝试重新连接,但 varnish 在默认配置下不会这样做。删除 KeepAlive 后,这种行为就不会发生,因此它解决了这个问题。

我知道您没有使用 mpm-itk,但也许值得一试。

另一个想法:您可以绕过清漆访问网站并尝试强制空白页吗?这样您也许会发现清漆是否是问题所在。

答案2

事实证明,这是由于权限问题导致 PHP 无法记录到指定的日志文件,并且错误显示被禁用。

因此,PHP 错误不会显示,或者无法记录 - 但空白页的根本原因是由于奇怪的 PHP 致命错误。

相关内容