Skip to Content

Drupal的一个小问题

labrador 的头像
Drupal使用一个叫drupal_http_request的函数从其他网站获取系统更新或rss信息。如果drupal_http_request函数访问失败,它会自动将drupal_http_request_fails变量设为TRUE。在此之后的访问都需要先system_check_http_request,以确定系统确实支持drupal_http_request。而system_check_http_request会调用drupal_http_request访问自己这个站点。

这个系统本身没有什么问题,但如果后台用的是nginx + php-cgi(1 child)这种模式,因为只有一个php-cgi实例,在其中运行的php是不能在访问自己的站点的,此时php-cgi已经是处于忙状态了。于是就会出现gateway time out的错误。

此问题对普通用户没有任何影响。只在调用/admin/admin/report/status时会有导致错误,因为这两个网页会调用system_check_http_request,如果drupal_http_request_fails为TRUE。

解决办法,
  1. 修改system模块里system.module文件中的system_check_http_request,让它去检测google一类肯定不会掉线的网站来确定drupal_http_request的可用性。
  2. 使用两个php-cgi children
  3. 修改web server(nginx)的配置,如果访问/的请求是从本地发起的,则自动转向一个静态文件。

修改系统模块总会造成各式各样的麻烦,两个php-cgi消耗内存比较大,虽然后一种解决方法丑陋了一点,但用起来更简单,以后也不担心drupal升级。

发表新评论

  • 你可以在文本中使用BBCode标记语言。 URL会自动被转为链接。

更多关於格式化选项的信息

CAPTCHA
请验证您是否是机器人。
Image CAPTCHA
Enter the characters shown in the image.