我正在使用
PHP 5.4.21运行Apache 2.4.6(Amazon)的标准安装,使用以下配置为我的虚拟主机:
DirectoryIndex index.PHP # ... FallbackResource /index.PHP
我的index.PHP是简单的缩影:
<?PHP echo "Hello world";
访问http://< server-name> /神秘地显示整页只有五秒钟!任何其他页面都有预期的响应时间(这很快).
我发现,这五秒钟与Keep-Alive功能的默认等待时间有关;在这种情况下,在Apache等待时间之后断开连接之前,不会发送分块响应的最后几个字节.顺便说一句,这也完全破坏了持久连接给你带来的任何好处.
这是Apache的已知错误还是我错过了一些非常明显的东西?
2017/04/18:这已在Apache 2.4.25:
https://bz.apache.org/bugzilla/show_bug.cgi?id=58292中修复
原文链接:https://www.f2er.com/php/139176.html从this bug report开始,我意识到这个问题可能与DirectoryIndex指令有关.
标准Apache安装在配置中附带以下部分:
<IfModule dir_module> DirectoryIndex index.html </IfModule>
此语句后面的任何指令(例如虚拟主机中的指令)都不会覆盖此设置;相反,它会被添加到请求索引时将尝试的页面堆栈中.当您执行strace httpd -X并在读取请求后立即检查stat()调用时,可以确认此行为,例如:
stat("/path/to/vhost/index.html",0x7fff9dc41b90) = -1 ENOENT stat("/path/to/vhost/index.PHP",{st_mode=S_IFREG|0664,st_size=130,...}) = 0
虽然我无法准确说明原因,但在指定DirectoryIndex index.PHP之前必须清除任何以前的DirectoryIndex指令,即index.PHP必须是尝试处理请求的第一个页面.
这可以使用以下配置完成:
DirectoryIndex disabled DirectoryIndex index.PHP