いくつかの 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/>
。
リンク: