我正在使用 PHP 5.4.21 运行 Apache 2.4.6 (Amazon) 的标准安装,对我的虚拟主机使用以下配置:
DirectoryIndex index.php
# ...
FallbackResource /index.php
Run Code Online (Sandbox Code Playgroud)
我index.php
是简单的缩影:
<?php echo "Hello world";
Run Code Online (Sandbox Code Playgroud)
访问http://<server-name>/
神秘地仅在五秒钟后显示完整页面!任何其他页面都有预期的响应时间(很快)。
我发现这五秒与该Keep-Alive
功能的默认等待时间有关;在这种情况下,直到 Apache 在该等待时间之后切断连接后,才会发送分块响应的最后几个字节。顺便说一句,这也完全破坏了持久连接本来可以为您带来的任何收益。
这是Apache的一个已知错误还是我在这里遗漏了一些非常明显的东西?
2017/04/18:这已在 Apache 2.4.25 中修复:https ://bz.apache.org/bugzilla/show_bug.cgi ? id = 58292
从这个错误报告中,我意识到这个问题可能与DirectoryIndex
指令有关。
标准的 Apache 安装在配置中包含以下部分:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
Run Code Online (Sandbox Code Playgroud)
此语句之后的任何指令,例如虚拟主机中的指令,都不会覆盖此设置;相反,它被添加到一个页面堆栈中,当请求索引时将尝试这些页面。当您在读取请求后立即执行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
Run Code Online (Sandbox Code Playgroud)
虽然我不能确切地说出原因,但DirectoryIndex
在指定之前必须清除任何先前的指令DirectoryIndex index.php
,即index.php
必须是尝试处理请求的第一页。
这可以使用以下配置来完成:
DirectoryIndex disabled
DirectoryIndex index.php
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
993 次 |
最近记录: |