LPIC-2 試験勉強メモ その 9

LPIC-2 試験勉強メモ その 9

Web サービス

Apache の設定

Apache 概要

Apache は広く使われているオープンソースの Web サーバーである。 デーモンの名前は httpd で、ポート番号は 80 番である。 起動時に設定ファイル /etc/httpd/conf/httpd.conf を読み込む。

リクエストを並列処理する仕組みに MPM (MultiProcessing Module) がある。 Linux の主な MPM には prefork と worker があり、いずれかの MPM を組み込む。 主要なディストリビューションでは prefork が起動する。

  • prefork: 1 つのリクエストに対して 1 つのプロセスがサービスを行う
  • worker: 1 つのリクエストに対してプロセス内の 1 つのスレッドがサービスを行う

ディレクティブ

ディレクティブ説明
Listen待機ポート番号を指定
MaxClients同時接続できる最大値を指定 (サービスリクエストの最大数)
StartServers起動時に生成される子サーバープロセスの数を指定
MinSpareServers待機する子サーバープロセスの最小個数を指定
MazSpareServers待機する子サーバープロセスの最大個数を指定
KeepAliveHTTP の持続的な接続を有効にする
KeepAliveTimeoutKeepAlive 接続で次のリクエストが来るまでサーバーが待機する時間を指定 (秒)
Aliasファイルシステムのファイルやディレクトリの別名を指定 (ドキュメントルート外も参照可能)
Redirectリクエストを他のサーバーに転送する
ErrorDocumentエラーコードに対しての処理を指定
DocumentRootドキュメントルートとして Web サーバー内のディレクトリを指定
DirectoryIndexクライアントがディレクトリをリクエストした時に調べるファイルのリスト
Options Indexes指定した場合はファイルのリストを返す (指定しない場合は 403 エラー)
Options FollowSymLinksドキュメント外のファイルへのシンボリックリンクを有効にする
UserDir後悔するユーザーディレクトリを相対パスあるいは絶対パスで指定する
AllowOverride.htaccess ファイルで許可または拒否するディレクティブの種類を指定
AccessFileName.htaccess ファイル以外の名前でディレクティブ許可設定するファイル名を指定
<Directory>Directory タグで囲まれたファイルシステムのパスへのアクセス許可を定義
AuthType認証の種類を指定 (Basic: 基本認証, Digest: ダイジェスト認証)
AuthName認可領域の名前を指定
AuthUserFile認証に使用するユーザーとパスワードが格納されたファイルを指定
Require認証されたユーザーの中でどのユーザーがどのリソースにアクセスできるかを指定
OrderAllow と Deny が評価される順番を制御 (デフォルトは Deny, Allow)
Allowアクセスを許可するホストを指定 (Allow from [all
Denyアクセスを拒否するホストを指定 (Deny from [all
Satisfyホストのアクセス制御 (Allow) とユーザー認証 (Require) の両方が指定されている時のアクセスポリシーを指定 (Any
SSLEngineSSL プロトコル on/off を指定
SSLProtocol使用する SSL プロトコルバージョンを指定
SSLCertificateKeyFileサーバー秘密鍵を指定
SSLCertificateFileサーバー証明書を指定
SSLVerifyClientクライアント認証をするか否か
<VirtualHost>仮想ホストに関する設定を定義
NameVirtualHost名前ベースの仮想ホストを設定する
CustomLogログを出力するファイル名を指定
LogFormatログのフォーマットを指定
ErrorLogエラーログを出力するファイル名を指定
LoadModuleDSO の仕組みにより、起動時に動的に読み込むモジュールを指定
Alias
Alias [URL のパス] [ファイルのパス|ディレクトリのパス]

Redirect

指定した URL パスへのリクエストを他のサーバーにリダイレクトする。

Redirect [URL のパス] [URL]

ErrorDocument

エラーが発生したときに、エラーコードに対してレスポンスする処理を指定する。

  • 指定したファイルをクライアントに返す
  • サーバー内の別の URL パスへリダイレクトする
  • 外部サーバーへリダイレクトする
ErrorDocument [エラーコード] [ドキュメント]

主なエラーコードデフォルトの表示説明
401Unauthorizedユーザー認証に失敗した
403Forbiddenサーバーがアクセス権のないファイルにアクセスした
404Not Found指定されたファイルは存在しない
500Server ErrorCGI や拡張モジュールなどサーバー内部でのエラー
AllowOverride

許可または拒否するディレクティブの種類を指定する。 指定できるディレクティブタイプには次のようなものがある。

ディレクティブタイプ説明使用を許可する主なディレクティブ
AuthConfig認証に関するディレクティブを許可AuthGroupFile, AuthName, AuthType, AuthUserFile, Rquire
FileInfoドキュメントのタイプやメタデータなどを制御するディレクティブを許可DefaulTyype, ErrorDocument
Indexesディレクトリインデックスを制御するディレクティブを許可DirectoryIndex, FancyIndexing
Limitホストへのアクセス制御を行うディレクティブを許可Allow, Deny, Order
OptionsOptions ディレクティブなどを許可Options
Allすべてのディレクティブを記述可能
None.htaccess ファイルは無視する
Require

認証されたユーザーの中でどのユーザーがどのリソースにアクセスできるかを指定する。

  • Require user [ユーザー名のリスト]: 指定されたユーザーだけを許可
  • Require group [グループ名のリスト]: 指定されたグループのユーザーだけを許可
  • Require valid-user: すべての認証されたユーザーを許可
CustomLog

ログファイルを指定。 ログのフォーマットか、フォーマットのニックネームを指定する。

CustomLog [ログファイル名] [ニックネーム|フォーマット]

フォーマット文字列説明
%hリモートホスト名
%lリモートログ名
%uリモートユーザー名 (認証時)
%t受付時刻
%rリクエストの最初の行
%sステータス
%bレスポンスのバイト数

apachectl コマンド

Apache httpd を制御するシェルスクリプトである。

  • start: httpd デーモンを起動する
  • stop: httpd デーモンを停止する
  • restart: httpd デーモンを再起動する
  • graceful: クライアントの接続終了を待って httpd デーモンを再起動する
  • graceful-stop: クライアントの接続終了を待って httpd デーモンを終了する
  • configtest (-t): 設定ファイルの書式チェックを行う

httpd に -t オプションをつけることでも設定ファイルの書式チェックを行うことが可能。

承認モジュール

承認機能を提供するモジュール

主な承認モジュール名説明使用可能な承認プロバイダー対応 Apache バージョン
mod_authz_coreコア承認を提供env, all, method, expr2.3 ~
mod_authz_userユーザー承認を提供user, valid-user2.1 ~
mod_authz_hostホスト承認を提供ip, host, forward-dns, local2.4 ~
mod_authz_gropufileプレーンテキストを用いたグループ承認を提供2.1 ~
  • Require env: Apache の環境変数によるアクセス制御
  • Require all: granted と denied によるアクセス制御
  • Require method: HTTP method によるアクセス制御
  • Require expr (expression) によるアクセス制御

htpasswd コマンド

Apache で基本認証を行うためのアカウントとパスワードを生成する。

htpasswd [オプション] [パスワードファイル名] [ユーザー名]

  • -c: 新規にパスワードファイルを作成して指定したユーザーを登録する
  • -D: 指定したユーザーを削除する
  • -n: 作成するユーザーエントリーをパスワードファイルに格納せず、標準出力に表示する

証明書の作成

  1. openssl コマンドで秘密鍵と CSR (Certificate Signing Request: 証明書発行要求) を生成する
  2. CSR を CA (Certificate Authoriy: 認証局) に送る
  3. CA からサーバー証明書を受け取る

仮想ホスト

1 台のホストで複数の Web サーバーを提供する。 Web サーバーごとに異なったホスト名やドキュメントルートを持つことが可能。

  • IP ベース: IP アドレスで選択する
  • 名前ベース: ホスト名で選択する

メインサーバーも VirtualHost ブロックで定義する。 VirtualHost ブロック内では ServerName と DocumentRoot が必須である。 それ以外の指定しないディレクティブはグローバルなディレクティブが参照される。 NameVirtualHost ディレクティブにはバーチャルホストで使用する IP アドレスを指定する。 * を指定した場合にはすべてのインタフェースへのリクエストに対して設定できる。

SNI (Server Name Indication)

SSL ハンドシェイク時にクライアントがアクセスしたいホスト名を平文でサーバーに伝える仕組みである。 SSL/TLS の拡張仕様の一つ。

ホスト名が指定された HTTP ヘッダが暗号化されてしまうため、他の方法でアクセスしたいホスト名を伝達する。 ブラウザ側も対応している必要があるが、最近のブラウザはほとんど対応済み。

Nginx の設定

Nginx 概要

高コンカレンシー、高パフォーマンス、低消費メモリを特徴とする Web サーバー、リバースプロキシーサーバーである。 ロシアの Igor Sysoev 氏が開発し、2004 年に最初のバージョンが公開された。

  • HTTP サーバー
  • FastCGI サーバーへのプロキシー
  • HTTP サーバーへのリバースプロキシー、ロードバランサー
  • SMTP 及び POP3/IMAP へのリバースプロキシー、ロードバランサー
  • 起動プログラム名: /etc/init.d/nginx
  • 設定ファイル: /etc/nginx/nginx.conf

待機ポート (listen) やサーバー名 (server_name) といった基本的な設定は server ブロックで指定する。 server ブロックは複数用意することができる。

  • listen: リクエストを受け付けるアドレス、ポート番号、プロトコルを指定する (デフォルト: listen *:80)

location ディレクティブでは一致した URL に対する処理を記述する。 location[‘URL パス’] 配下の次の設定でアクセスするファイルを指定する。 最初の文字から最長一致で判定される。 一致しないものは自ホストで処理する。

  • root: ドキュメントルート
  • index: インデックスファイルのリスト
プレフィックス評価方法
なし前方一致で最長一致。他の正規表現が一致すればそちらを優先する
^~前方一致で最長一致。一致した場合、他の正規表現を評価しない
=完全一致
~大文字と小文字を区別する
~*大文字と小文字を区別しない
リバースプロキシー

location[‘<パス名>’] 配下に proxy_pass を指定するとリバースプロキシーとして動作する。 指定した転送先にリクエストを転送する。

FastCGI プロキシー

FastCGI は CGI プロセスを永続的あるいは一定期間稼働させておくことにより、プロセス起動のオーバーヘッドをなくして処理速度を向上させる。 転送先のホストは fastcgi_pass で指定する。

Squid の設定

サーバープログラムは squid (/usr/sbin/squid) で設定ファイルは squid.conf (/etc/squid/squid.conf) である。 デフォルトで 3128 番ポートを使用する。

主なディレクティブ説明
cache_memキャッシュメモリのサイズを指定
cache_dirキャ主要ディスク領域のサイズを指定
maximum_object_sizeキャッシュメモリに格納されるオブジェクトの最大サイズ
auth_param認証方式と認証プログラムを指定 (Basic 認証, Diges 認証, NTLM 認証)
http_port待ち受けポート番号
cache_dir [ストレージタイプ] [キャッシュディレクトリ] [キャッシュサイズ  [第 1 階層ディレクトリの個数] [第 2 階層ディレクトリの個数]

ACL

  1. acl ディレクティブで制御対象を定義する
  2. http_access ディレクティブでアクセス対象への許可あるいは拒否を設定する
acl [acl 名] [acl タイプ] 引数
acl タイプ説明
src送信元 IP アドレス
dst宛先 IP アドレス
time曜日と時間帯
url_regexURL の正規表現
port宛先ポート番号
proto転送プロトコル
methodHTTP リクエストメソッド
proxy_authユーザー認証
http_access [allow|deny] [!][acl 名]
  • 指定が一切ない場合は拒否される
  • 指定に一致しないリクエストは最後の行の allow|deny の逆になる
  • 指定は上から順に比較処理される
  • 複数の acl 名を指定した場合は論理積になる