UNIX的なアレ:gihyo.jp出張所

第9回知っておきたいApacheの基礎知識 その5

前回はユーザにコンテンツを返すためのDocumentRootの設定をしてきました。今回はDocumentRootの設定に引き続き、各種ディレクトリやファイルへの設定をする方法を紹介していきたいと思います。

この設定をいれることで、DocumentRoot内で一部のファイルに対してアクセス制限をかけたりすることができるようになります。

よく使われる設定

それでは、まず頻繁に使用される設定を紹介していきたいと思います。

項目Optionsの設定
記述Options Indexes FollowSymLinks
説明Optionsの引数に、使用をしたいOptionをスペース区切りで追記していく。上記はIndexesとFollowSymlinksという機能を使用した場合の設定例。
項目Allow Overrideの設定
記述AllowOverride None
説明.htaccessで設定を上書きするかどうかの設定。Noneで上書きができない状態となっている。
項目アクセス制限の設定
記述Order allow,deny
Allow from all
Deny from example.com
説明アクセス制限をかけるための設定。Orderは、Allow/Denyの順番をどちらから先にかけるかを設定することができる。allow、deny はブラックリスト方式、deny,allow はホワイトリスト方式のアクセス制限をかける際に使用をする。Allow from, Deny fromはそれぞれ受け入れるホストと許可をするホストを記述する。

その他にも設定可能な項目はたくさんありますが、頻繁に利用されるものをここで記載いたしました。

さまざまなディレクティブ

各ディレクトリやファイルに対して設定を行う方法はapacheでは3種類あります。

それぞれの役割をまとまると下表のとおりになっています。

 ディレクティブ
ディレクティブ名説明
Directory ディレクティブOSのディレクトリからみた構造にマッチする
Files ディレクティブファイル名にマッチする
Location ディレクティブURLとして送られてきた文字列にマッチする

それではサンプルのhttpd.confを例にとってひとつずつ説明をしていきましょう。

Directory ディレクティブ

httpd.confのサンプルの、65行目~70行目の部分で使用しています。

<Directory "/usr/local/apache2/htdocs">   # Directoryディレクティブの設定
    Options Indexes FollowSymLinks        # Indexes,FollowSymLinksの設定
    AllowOverride None                    # .htaccessでの設定の上書きを許可しない
    Order allow,deny                      # allow/denyを適用する順番
    Allow from all                        # すべてのユーザからのアクセスを許可する
</Directory>                              # Directoryディレクティブの終了

これはOSから見た/usr/local/apache2/htdocs以下のディレクトリに対して、<Directory "/usr/local/apache2/htdocs">から</Directory>までに記載されている設定を適用する、という意味になります。

指定したディレクトリ以下には、すべて適用されるという点には注意してください。

上記の場合ですと、⁠Allow from all」というようにすべてのユーザからのアクセスを許可しているので、対象のディレクトリ以下はすべて見ることができる設定となっています。

Files ディレクティブ

httpd.confのサンプルの、75行目~78行目の部分で使用しています。

<FilesMatch "^\.ht">   # FilesMatchディレクティブの設定
    Order allow,deny   # allow/denyを適用する順番
    Deny from all      # すべてのユーザからのアクセスを拒否する
</FilesMatch>          # FilesMatchディレクティブの終了

Filesディレクティブでは、ファイル名を指定します。上記の場合は、正規表現が利用できるFilesMatchを使用していますので、⁠^.ht」にマッチするファイルへのアクセスが拒否されている設定です。

.htaccessなどのアクセス制限ファイルは、ユーザーからは直接見れる必要はありません。そのため、このような設定が入れることでアクセスの制限をかけるようにしています。

Location ディレクティブ

httpd.confのサンプルの、224行目~228行目の部分で使用しています(サンプルではコメントアウトされています⁠⁠。

<Location /server-status>      # Locationディレクティブの設定
    SetHandler server-status   # server-statusの設定
    Order deny,allow           # deny/allowを適用する順番
    Deny from all              # すべてのユーザからのアクセスを拒否する
</Location>                    # Locationディレクティブの終了

Locationディレクティブは、ユーザからのリクエストURLに対して設定をかけることができます。たとえば、http://servername/index.htmlというリクエストがきた場合は、⁠/index.html」がLocationディレクティブにマッチします。

上記の例ですと、http://servername/server-statusというリクエストが来た場合はすべてのリクエストを拒否をするという設定です。

なお、上記の例は少し特殊なパターンです。Apacheは「/server-status」というリクエストを送るとApacheのステータスを返す機能を持っています。server-statusというディレクトリやファイルは存在はしないので、このような場合はLocationディレクティブで制限をかけます。

各種ディレクティブの正規表現

Filesディレクティブでは使用していましたが、Directory、Files、Locationそれぞれ正規表現を使用することができます。正規表現を使用したい場合は、ディレクティブにDirectoryMatch、FilesMatch、LocationMatchを使用をするか、~を記述します。

正規表現を使用できることは非常に便利ですが、多数のアクセスを受けると高負荷になってしまう可能性もあります。適用させる場所には、注意して使用をするようにしましょう。

最後に

今回は、Directory、Files、Locationディレクティブについて説明をしてきました。

DocumentRootに指定した中でアクセス制限をかけたりなど非常に便利な機能ですが、使いすぎるとどんどんと設定が複雑になってしまいます。たとえば、ユーザに見せたくない情報をDocumentRoot内に設置してDenyで防ぐことはお勧めできません。最初からDocumentRoot外におく設計をしておくようにしましょう。そちらのほうが設定もわかりやすくなりますし、思わぬ事故も防ぐことができます。

無駄な設定を増やさずに、シンプルな設定で構築をするように心がけるようにしましょう。

おすすめ記事

記事・ニュース一覧