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 サーバーで可能ですか、それとも 2 つの Apache サーバーを持つためにシナリオをフォークする必要がありますか? CGI が無効で出荷されたので (Debian Stretch)、セキュリティのためにシナリオをフォークする必要がありますか?

答え1

特定の でのみ CGI を有効にする場合はVirtualHost、cgi 固有のディレクティブ (ScriptAliasまたは<Directory/>を含む -block のOptions +ExecCGIいずれか設定されている方) をメイン サーバー設定からターゲット に移動しますVirtualHost

モジュールmod_cgi(またはmod_cgid) は、サーバーで有効になっている場合はすべての vhost でアクティブになりますが、すべての vhost で使用する必要はありません。

セキュリティとパフォーマンス上の理由から、ほとんどのモジュールがデフォルトで無効になっているのは事実ですが、1 つの vhost でこのモジュールが必要なだけなので、2 番目のサーバーをセットアップする必要はないと私は考えています。他の vhost でスクリプトを実行できない場合 (スクリプトが見つからないか、スクリプトへのアクセスが禁止されている) は、これで十分なScriptAliasはずExecCGIです<Directory/>

リンク:

関連情報