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 | 待機する子サーバープロセスの最大個数を指定 |
| KeepAlive | HTTP の持続的な接続を有効にする |
| KeepAliveTimeout | KeepAlive 接続で次のリクエストが来るまでサーバーが待機する時間を指定 (秒) |
| Alias | ファイルシステムのファイルやディレクトリの別名を指定 (ドキュメントルート外も参照可能) |
| Redirect | リクエストを他のサーバーに転送する |
| ErrorDocument | エラーコードに対しての処理を指定 |
| DocumentRoot | ドキュメントルートとして Web サーバー内のディレクトリを指定 |
| DirectoryIndex | クライアントがディレクトリをリクエストした時に調べるファイルのリスト |
| Options Indexes | 指定した場合はファイルのリストを返す (指定しない場合は 403 エラー) |
| Options FollowSymLinks | ドキュメント外のファイルへのシンボリックリンクを有効にする |
| UserDir | 後悔するユーザーディレクトリを相対パスあるいは絶対パスで指定する |
| AllowOverride | .htaccess ファイルで許可または拒否するディレクティブの種類を指定 |
| AccessFileName | .htaccess ファイル以外の名前でディレクティブ許可設定するファイル名を指定 |
| <Directory> | Directory タグで囲まれたファイルシステムのパスへのアクセス許可を定義 |
| AuthType | 認証の種類を指定 (Basic: 基本認証, Digest: ダイジェスト認証) |
| AuthName | 認可領域の名前を指定 |
| AuthUserFile | 認証に使用するユーザーとパスワードが格納されたファイルを指定 |
| Require | 認証されたユーザーの中でどのユーザーがどのリソースにアクセスできるかを指定 |
| Order | Allow と Deny が評価される順番を制御 (デフォルトは Deny, Allow) |
| Allow | アクセスを許可するホストを指定 (Allow from [all |
| Deny | アクセスを拒否するホストを指定 (Deny from [all |
| Satisfy | ホストのアクセス制御 (Allow) とユーザー認証 (Require) の両方が指定されている時のアクセスポリシーを指定 (Any |
| SSLEngine | SSL プロトコル on/off を指定 |
| SSLProtocol | 使用する SSL プロトコルバージョンを指定 |
| SSLCertificateKeyFile | サーバー秘密鍵を指定 |
| SSLCertificateFile | サーバー証明書を指定 |
| SSLVerifyClient | クライアント認証をするか否か |
| <VirtualHost> | 仮想ホストに関する設定を定義 |
| NameVirtualHost | 名前ベースの仮想ホストを設定する |
| CustomLog | ログを出力するファイル名を指定 |
| LogFormat | ログのフォーマットを指定 |
| ErrorLog | エラーログを出力するファイル名を指定 |
| LoadModule | DSO の仕組みにより、起動時に動的に読み込むモジュールを指定 |
Alias
Alias [URL のパス] [ファイルのパス|ディレクトリのパス]Redirect
指定した URL パスへのリクエストを他のサーバーにリダイレクトする。
Redirect [URL のパス] [URL]ErrorDocument
エラーが発生したときに、エラーコードに対してレスポンスする処理を指定する。
- 指定したファイルをクライアントに返す
- サーバー内の別の URL パスへリダイレクトする
- 外部サーバーへリダイレクトする
ErrorDocument [エラーコード] [ドキュメント]| 主なエラーコード | デフォルトの表示 | 説明 |
|---|---|---|
| 401 | Unauthorized | ユーザー認証に失敗した |
| 403 | Forbidden | サーバーがアクセス権のないファイルにアクセスした |
| 404 | Not Found | 指定されたファイルは存在しない |
| 500 | Server Error | CGI や拡張モジュールなどサーバー内部でのエラー |
AllowOverride
許可または拒否するディレクティブの種類を指定する。 指定できるディレクティブタイプには次のようなものがある。
| ディレクティブタイプ | 説明 | 使用を許可する主なディレクティブ |
|---|---|---|
| AuthConfig | 認証に関するディレクティブを許可 | AuthGroupFile, AuthName, AuthType, AuthUserFile, Rquire |
| FileInfo | ドキュメントのタイプやメタデータなどを制御するディレクティブを許可 | DefaulTyype, ErrorDocument |
| Indexes | ディレクトリインデックスを制御するディレクティブを許可 | DirectoryIndex, FancyIndexing |
| Limit | ホストへのアクセス制御を行うディレクティブを許可 | Allow, Deny, Order |
| Options | Options ディレクティブなどを許可 | 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, expr | 2.3 ~ |
| mod_authz_user | ユーザー承認を提供 | user, valid-user | 2.1 ~ |
| mod_authz_host | ホスト承認を提供 | ip, host, forward-dns, local | 2.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: 作成するユーザーエントリーをパスワードファイルに格納せず、標準出力に表示する
証明書の作成
- openssl コマンドで秘密鍵と CSR (Certificate Signing Request: 証明書発行要求) を生成する
- CSR を CA (Certificate Authoriy: 認証局) に送る
- 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
- acl ディレクティブで制御対象を定義する
- http_access ディレクティブでアクセス対象への許可あるいは拒否を設定する
acl [acl 名] [acl タイプ] 引数| acl タイプ | 説明 |
|---|---|
| src | 送信元 IP アドレス |
| dst | 宛先 IP アドレス |
| time | 曜日と時間帯 |
| url_regex | URL の正規表現 |
| port | 宛先ポート番号 |
| proto | 転送プロトコル |
| method | HTTP リクエストメソッド |
| proxy_auth | ユーザー認証 |
http_access [allow|deny] [!][acl 名]- 指定が一切ない場合は拒否される
- 指定に一致しないリクエストは最後の行の allow|deny の逆になる
- 指定は上から順に比較処理される
- 複数の acl 名を指定した場合は論理積になる
コメント