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/>包含的區塊Options +ExecCGI,以設定的為準)從主伺服器設定移至目標VirtualHost

如果在伺服器中啟用了模組mod_cgi(或mod_cgid),那麼它當然會在所有虛擬主機中處於活動狀態,但您不必在每個虛擬主機中都使用它。

確實,出於安全性和效能原因,大多數模組預設已停用,但在我看來,您不需要僅設定第二台伺服器,因為您需要在一個虛擬主機中使用此模組。如果您無法在其他虛擬主機中執行任何腳本(缺少ScriptAlias/ExecCGI或禁止存取腳本<Directory/>),這應該足夠了。

連結:

相關內容