Можно ли выполнение 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), конечно, активен во всех виртуальных хостах, если он включен на сервере, но вам не обязательно использовать его в каждом виртуальном хосте.

Это правда, что большинство модулей отключены по умолчанию из соображений безопасности и производительности, но ИМХО вам не нужно настраивать второй сервер только потому, что вам нужен этот модуль в одном vhost. Этого должно быть достаточно, если вы не можете выполнить какие-либо скрипты в других vhosts (отсутствует ScriptAliasили ExecCGIзапрещен доступ к скрипту <Directory/>).

Ссылки:

Связанный контент