Я настроил несколько записей 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/>
).
Ссылки: