マニュアル: Apache HTTP Server

投稿日: 更新日:

セキュリティ

  • POSTの制限値: LimitRequestBody
    • デフォルトは0(無制限)のため、DoSアタックをされる可能性がある。
  • Server: ヘッダ: ServerTokens
    • この値を ProductOnly にすると、Server: Apache とのみ表示される。
    • これ自身がセキュリティ向上になるわけではないが、入れておいて損はない。

HTTP -> HTTPへの昇格

以下のようにします。 RewriteCondはLet’s Encryptのための設定です。

<VirtualHost *:80>
   RewriteEngine On
   RewriteCond %{REQUEST_URI} !^/\.well\-known/acme-\challenge/
   RewriteRule ^/?(.*) https://example.com/$1 [R=301,L]
</VirtualHost>

Proxy

Apacheの背後にTomcatがある時など、 プロキシを使ったときのエラー画面をデフォルトにするには、 ProxyErrorOverrideをOnにする。

ProxyErrorOverride On

ログ

標準で設定されているアクセスログフォーマットがあって、 それぞれCommonと、Combinedと呼びます。

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined

それぞれ以下のような意味があります1

  • %h: リモートホスト名(デフォルトはHostnameLookupsOffのため、IPアドレスになる。
  • %l: ログ名(mod_identが存在してIdentityCheckOnのときのみ。それ以外は-になる。
  • %u: 認証したときはそのユーザ名。認証に失敗したときはいんちきの(bogus)ユーザ名になりうる。
    • 記載がないですが、認証していないときは-になります。
  • %t: 時刻([18/Sep/2011:19:18:28 -0400]のような形式([日/月/年:時:分:秒 オフセット])
  • %r: リクエストの最初の行
    • 記載されていないですが、GET / HTTP/1.1などのHTTPヘッダが入ります。
  • %s, %>s: ステータスコード。
    • %sはオリジナルのリクエストのステータスコード
    • %>sは最後のステータスコード。
    • 301でリダイレクトして200を返したときは、%sは301、%>sは200が返ると思われます。
  • %b: レスポンスのサイズ(バイト)、ただしHTTPヘッダは除く。-のときは何も返していません。
  • Combinedのみ
    • %{Referer}i: リクエストヘッダReferer
    • %{User-agent}i: リクエストヘッダUser-agent

リスト表示(DirectoryListings)

ファイルサーバなど、ディレクトリ以下をリスト表示する場合の機能。 ヘッダとフッタの設定も可能。

DirectoryListings - Httpd Wiki

CGI

昔懐かしい(?)CGIを動かす方法。

基本的には以下の設定が必要です。

  • mod_cgiまたはmod_cgidが有効なこと
  • AddHandler/SetHandlerによるCGIの設定
  • Options ExecCGI

あとCGIスクリプト側の設定

  • CGIスクリプトは実行パーミッションが必要
  • CGIスクリプトまでのディレクトリのパーミッション
    • Apacheの実行ユーザで実行権限があること2
    • オーナー以外の書き込み権限がないこと

  1. mod_log_config - Apache HTTP Server Version 2.4 ↩︎

  2. ディレクトリの実行権限なので、そのディレクトリへ移動する権限です。 ↩︎

公式サイト

外部サイト

逆引きマニュアル