gpt4 book ai didi

Apache:在带有 AllowOverride None 的 conf 中包含 htaccess,性能更好?

转载 作者:行者123 更新时间:2023-12-04 01:59:30 24 4
gpt4 key购买 nike

假设我们在文件系统上有 /home/example.org/public_html/ 目录,它作为我的虚拟主机的文档根目录。

该虚拟主机的相关 httpd 配置如下所示:

<VirtualHost *:80>
ServerName example.org:80
...
DocumentRoot /home/example.org/public_html
<Directory /home/example.org/public_html>
AllowOverride All
...
</Directory>
...
</VirtualHost>

为了防止 htaccess 在文件系统上查找而不丢失 htaccess 功能——至少在 DocumentRoot 级别——我将配置转换为以下内容:

<VirtualHost *:80>
ServerName example.org:80
...
DocumentRoot /home/example.org/public_html
<Directory /home/example.org/public_html>
AllowOverride None
Include /home/example.org/public_html/.htaccess
...
</Directory>
...
</VirtualHost>

区别

AllowOverride None
Include /home/example.org/public_html/.htaccess

让我们看看我们已经完成了什么:

httpd does not waste any time looking for and parsing htaccess files resulting in faster request processing

问题:

  1. 使用 Include 指令,Apache 仅在服务启动时或针对每个请求加载 htaccess?
  2. 如果第 1 点是正确的,如何在没有 httpd.exe -k restart 的情况下刷新 apache conf?

最佳答案

首先,请注意检查 .htaccess 通常不是什么大问题,因为磁盘的相关位缓存在内存中。这成为一个问题,例如,您的 web 根目录或目录下有大量目录,并且命中分散在它们之间,因此缓存磁盘 block 的命中率很低。你可能会更好地通过禁用 .htaccess 有选择地为它产生问题的目录树处理。解析 .htaccess 指令当然会产生一点 CPU 负载,但 CPU 通常不应成为服务器的瓶颈。

尽管如此回答您提出的问题;是的,您需要以 root 身份运行命令来加载新配置。不过,与其使用 restart,不如使用 reload 或(更好的)graceful

httpd.exe -k graceful

您可以(但可能不应该)编写一个 cron 作业来定期检查是否需要运行它。在没有大量测试的情况下,我认为这样的事情应该可以作为常规的根 cron 作业运行:

#!/bin/bash
[ /var/run/httpd/http.pid -nt /home/example.org/public_html/.htaccess ] \
&& httpd.exe -k graceful

这当然会产生一些磁盘负载。此负载不会随着流量的增加而增加,但如果您有许多此类包含的文件,则可能会成为一个问题。

安全警告:听起来您正在设置一个非 root 用户可能能够让 Apache 随意使用 Include 指令的情况。这比使用 .htaccess 文件可以完成的功能强大得多,并且相当于根漏洞利用。例如。它可以访问 UserLoadModule 指令,而 .htaccess 指令永远做不到。

我建议您将 Included 指令放在 Apache 配置目录中的一个文件中,并且只能由 root 访问。还有其他方法可以确保只有 root 可以编辑 .htaccess 文件,但是将这些文件从用户拥有的区域中取出可以降低您以后无意中再次打开访问权限的可能性。

虽然 .htaccess 机制确实会产生额外的磁盘负载,但它是专为非根用户使用而设计的机制。如果有一种机制可以让不受信任的用户修改配置,并限制检查 .htaccess 文件的频率,那会很好,但如果它存在,我不知道。

关于Apache:在带有 AllowOverride None 的 conf 中包含 htaccess,性能更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32920801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com