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。
二胎准生证http://www.0123.cn/ertai/
解决办法,
- 修改system模块里
system.module
文件中的system_check_http_request
,让它去检测google一类肯定不会掉线的网站来确定drupal_http_request
的可用性。 - 使用两个php-cgi children
- 修改web server(nginx)的配置,如果访问/的请求是从本地发起的,则自动转向一个静态文件。
修改系统模块总会造成各式各样的麻烦,两个php-cgi消耗内存比较大,虽然后一种解决方法丑陋了一点,但用起来更简单,以后也不担心drupal升级。
时间: 2024-10-09 12:37:04