cgi 执行是否可以受 ServerName 限制?

cgi 执行是否可以受 ServerName 限制?

我配置了几个 VirtualHost 条目。

<VirtualHost *:80>
        ServerName subdomain1.domain.tld
        [...]
        DocumentRoot /var/www/html/subdomain1
        [...]
</VirtualHost>

<VirtualHost *:80>
        ServerName subdomain2.domain.tld
        [...]
        DocumentRoot /var/www/html/subdomain2
        [...]
</VirtualHost>

后来我出于某种原因启用了 cgi (cgid)。从那时起,CGI被触发通过在某些路径中询问domain.tld/a_path_for_a_cgi/。据我所知,不依赖于为 VirtualHost 条目配置的子域。

我希望大多数子域名都禁用该功能:

subdomain1.domain.tld/a_path_for_a_cgi/ => disallow or not to find
subdomain2.domain.tld/a_path_for_a_cgi/ => disallow or not to find
subdomain3.domain.tld/a_path_for_a_cgi/ => allow

这在 Apache 服务器中可行吗,还是我应该分叉该方案以拥有两个 Apache 服务器?由于 cgi 已禁用(Debian Stretch),我是否应该出于安全考虑分叉该方案?

答案1

如果您只想在特定的 中启用 CGI VirtualHost,则将特定于 cgi 的指令(ScriptAlias<Directory/>包含 的 -block Options +ExecCGI,以配置的为准)从主服务器配置移动到目标VirtualHost

如果在服务器中启用了模块mod_cgi(或mod_cgid),它当然会在所有虚拟主机中处于活动状态,但您不必在每个虚拟主机中使用它。

确实,出于安全和性能原因,大多数模块默认被禁用,但在我看来,您不需要仅仅因为在一个虚拟主机中需要此模块而设置第二台服务器。如果您无法在其他虚拟主机中执行任何脚本(缺少ScriptAlias/ExecCGI或禁止访问脚本<Directory/>),这应该就足够了。

链接:

相关内容