Apache の configtest 宣言はどこにありますか?

Apache の configtest 宣言はどこにありますか?

Apache Web サーバーのセキュリティを強化したいと考えています。

  1. 開ける:

    セキュリティ
  2. 編集:

    ServerTokens 製品版
    サーバー署名オフ
  3. 再読み込み/再起動:

    /etc/init.d/apache2 をリロード
    /etc/init.d/apache2 を再起動

Prod と Off の値は問題ないはずですが、次のエラーが発生します。

ServerTokens は 1 つの引数を取り、Server: ヘッダーに表示されるトークン (最小、OS、または完全) を決定します。
アクション「configtest」が失敗しました。
ServerSignature は、サーバー署名の有効化/無効化 (on|off|email) という 1 つの引数を取ります。
アクション「configtest」が失敗しました。

Prod と Off を受け入れるように指示するには、Apache の configtest 宣言はどこにありますか?

問題解決:

設定ファイル内にインラインコメントがありましたが、これは許可されていません。

したがって、次のことを行わないでください。

ServerTokens Prod # 2012年10月20日に追加

代わりに、次のようにします。

# 2012 年 10 月 20 日に追加されました:
ServerTokens 製品版

しかし、エラー メッセージにはオプションが 3 つ (Min、OS、Full) しかなく、すべて小文字 (on|off|email) だったのに対し、構成ファイルにはさらに多くのオプションと ucfirst があったため、混乱しました。

答え1

Debian/Ubuntuまたは同様のシステムを使っているようです。configtestを実行すると、

apache2ctl configtest

Prod を受け入れるように宣言を変更することはできません (すでに受け入れています)。また、変更する必要もありません。

エラーメッセージは非常に明確です。 ServerTokens takes one argument ... このエラーメッセージは、ServerTokensディレクティブに複数のパラメータを指定した場合のみ表示されます。

 ServerTokens Prod 1

観察したのと同じ方法で失敗します。ServerTokens および ServerSignature ディレクティブに複数のパラメータがある理由を理解する必要があります。まず最初に試すのは、ファイルを vim にロードし、:set invlistファイル内の隠し文字を表示する which を使用することです。

答え2

何を意味しているか分かりません。 apache2 configtest(RedHat ボックスでは) apachectl を実行します。Apache が提供するスクリプトである apachectl を見ると、基本的に httpd -t が実行されています。

したがって、configtest を実行すると、httpd 自体が構成をテストすることになります。

ifdefineこれを回避する方法の1つは、問題のある設定スタンザの周りに否定のsをいくつか入れることです。

例: 設定ファイル内:

<ifdefine ! DONTRUNMYBADCONFIG >
ServerTokens Prod
ServerSignature Off
</ifdefine>

そして実行する

httpd -t -DDONTRUNMYBADCONFIG

-DDONTRUNMYBADCONFIG設定をテストします。他のすべては正常にテストされると思いますが、これら 2 つのディレクティブはApache のコマンド ラインにある限り無視されます。

必要に応じて、「confgitest」セクションのスクリプト-DDONTRUNMYBADCONFIGに追加して、通常どおり実行することもできます。/etc/init.d/apache2service httpd configtest

関連情報