その1に引き続き、apacheのお勉強です。
apacheを復習する(その1) - おもしろWEBサービス開発日記
AccessFileName
AccessFileNameディレクティブで指定されたファイルは特権を持ちます。デフォルトでは.htaccessというファイル名が指定されています。ドキュメントディレクトリ内に、.htaccess(またはAccessFileNameで指定したファイル名)があった場合、そのファイルに書かれている内容でapacheの設定を上書きする事が出来ます。
例
AccessFileName .htaccess
AllowOverride
AllowOverrideディレクティブは、AccessFileNameディレクティブにて指定したファイル(通常は.htaccess)で、上書きする事が出来るディレクティブを設定します。デフォルトはAllです。.htaccessを使用するとパフォーマンスが落ちるので、webサーバとして公開するような際にはnoneを指定して.htaccessを読み込まないようにしておきます。
例
全てのディレクティブ指定を許可
AllowOverride All
全ての上書きを禁止
AllowOverride none
名前ベースのバーチャルホスト
バーチャルホストとは、1台のサーバで複数のドメインを運用する技術のことを指します。Apacheでバーチャルホストを実現する手段としては、名前ベースとIPベースがあります。最近は名前ベースのバーチャルホストを使用するのが普通だと思うので、こちらにフォーカスして調べます。
名前ベースのバーチャルホストとは、ブラウザが送るリクエストに含まれるドメイン名を見て、サーバ側で処理するコンテンツを分ける技術です。名前ベースのバーチャルホストを利用すると、一つのIPで複数ドメインを運営できて非常に便利です。でも一つ気をつけないといけない点があります。SSLを利用する場合です。SSLは、その仕様上リクエストを送る前に(つまりドメインを判別する前に)証明書の送付が行われます。なので、名前ベースのバーチャルホストを使っている場合、サーバ証明書を複数使い分けることができません。
NameVirtualHost, VirtualHost, ServerName
NameVirtualHostは名前ベースのバーチャルホストを設定するためのディレクティブです。NameVirtualHostディレクティブを設定した場合、そこで設定したIPアドレス/ポート番号を設定しているVirtualHostディレクティブを調べ、リクエストで指定されたドメイン名と同じServerNameを持つブロックの設定を適用します。NameVirtualHostを設定しなかった場合は、リクエストで指定されたIPアドレスと合致するVitualHostブロックを検索します(つまりIPベースのバーチャルホストになります)。
例
NameVirtualHost *:80DocumentRoot /www/example1 ServerName www.example.com # 他の設定 DocumentRoot /www/example2 ServerName www.example.org # 他の設定
User-Agentでアクセス制限
BrowserMatchディレクティブを使うと、User-Agentの内容でアクセス設定が出来ます。でもUser-Agentはクライアント側で詐称する事が可能なので、基本的には使わないのではないかと思います。
ヘッダ情報でアクセス制限
SetEnvIfディレクティブを使うと、リクエストヘッダーでアクセス制限ができます。
エラーメッセージの変更
ErrorDocumentディレクティブで、エラーが発生したときにクライアントに返すhtmlを指定できます。
例
ErrorDocument 404 /404.html
パスワードを使った認証
下記エントリでメモっているので基本的に省略します。Requireディレクティブだけ少し気になったので書きます。
apacheでの認証方法 - おもしろWEBサービス開発日記
Requireディレクティブ
パスワードファイルにはユーザ名とパスワードが複数書くことができます。Requireディレクティブでは、パスワードファイルに書かれているユーザ全員(valid-user)を許可するのか、そのうちの一部を許可するのか設定できます。一部を許可する場合は、グループで管理する方法とユーザで管理する方法の二通りがあります。
アクセス制限と認証を組み合わせるには
Satisfyディレクティブを使用すると、アクセス制限とパスワード認証の両方を使うか、またはどちらかがOKならアクセス可能にするか設定できます。デフォルトはallを指定したのと同じです。
例
アクセス制限と認証どちらかをパスすればアクセス可能にする設定。
Satisfy any
リダイレクト
apacheでリダイレクトの設定をしたい時はRecirectディレクティブを使います。
例
通常パターン(302)
Redirect /hoge/ http://www.example.com/fuga/
ステータスを指定したパターン。ステータスコード(301など)を指定する事も出来ます。
Redirect parmanent /hoge/ http://www.example.com/fuga/
正規表現を使ってリダイレクト
RedirectMatchディレクティブを使うと、正規表現も使ったリダイレクトができます。
例
Redirect parmanent ^/hoge/(.*)$ http://www.example.com/fuga/$1
コンテントネゴシエーション
リクエストヘッダーの
- Accept-Language
- Accept-Charset
- Accept-Encoding
に指定してあるクライアントのコンテンツの対応状況を見て、サーバ側が最適なものを選択できる仕組みをコンテントネゴシエーションといいます。
コンテントネゴシエーションが有効な時の設定
AddLanguageディレクティブを使用すると、言語設定を拡張子を関連づける事が出来ます。同じように、AddCharsetディレクティブを使用すると、文字コードを拡張子と関連づける事が出来ます。
ServerTokens
ServerTokensディレクティブを使用すると、レスポンスヘッダーのサーバ情報を隠すことができます。Apacheのバージョン情報等をクライアントに隠す事で、セキュリティを高める事が出来ます。apache2.2ではextra/httpd-languages.confに設定があります。
例
ServerTokens Prod
ServerSignature
ServerSignatureディレクティブを使用すると、エラードキュメントのサーバ情報を隠すことができます。ServerTokensディレクティブと同じように、情報を隠す事でセキュリティを高めます。
例
ServerSignature Off
参考
Apacheハンドブック | |
![]() | Ben Laurie おすすめ平均 ![]() ![]() ![]() Amazonで詳しく見る by G-Tools |
できるPRO Apache Webサーバー Apache2/1.3対応 (できるPROシリーズ) | |
![]() | 辻 秀典 おすすめ平均 ![]() ![]() ![]() Amazonで詳しく見る by G-Tools |