WebApp/Apache

インストール

バイナリインストール

# yum install http
※オンラインインストール

ディレクトリ構成

ディレクトリ説明
/etc/httpd/conf/設定ファイル
/var/log/httpd/logファイル
/var/www/WEBコンテンツ格納

ソースからインストールする場合

# tar zxf httpd-<version>.tar.gz
# cd httpd-<version>
# ./configure
※必要なオプションは -help で確認。--with-apr=/usr/local/apr が必要な場合もある
# make
# make install

/usr/local/apache2 に 設定ファイルやバイナリがインストールされる

 

各種コマンド

コマンド説明
apachectl start開始
apachectl stop停止
apachectl restart再起動
apachectl gracefull処理中のリクエストを待って再起動
apachectl gracefull-stop処理中のリクエストを待って停止
/usr/sbin/httpd -f <ファイル>デフォルトの設定ファイル以外を読み込んで起動
/usr/sbin/httpd -l静的モジュール一覧表示
/usr/sbin/httpd -M静的モジュールと、動的モジュール(DSOモジュール)一覧表示


 

設定ファイル

【書式】ディレクティブ 値
ディレクティブと、値の間はスペースか、TAB。ディレクティブは大文字小文字を意識しない

主要設定

ディレクティブ説明
ServerRootインストールされたサーバのベースディレクトリ
Include外部設定ファイルの読み込み、ServerRootからの相対パスか絶対パスで指定。ファイル名にワイルドカードの使用可
DocumentRootWEBのトップディレクトリとなるディレクトリを指定
ServerName自身のホスト名とポート番号を取得するのに使用する。未設定の場合DNSから取得を試みる
ListenApacheサーバーの待ち受けポート(通常変更しない 80で固定)
AllowOverride.htaccessを設置したディレクトリ以下において、httpd.confの設定を上書き可能にする
設定値許可されるディレクティブ、設定値は複数指定可能
none全て禁止
All全て許可
FileInfoAddType、AddEncoding、AddLanguage
IndexesFancyIndexing、Addlcon、AddDescription
Limitホスト名やIPアドレスを用いたアクセス制限
AuthConfigパスワードによるユーザー認証
ErrorLogエラーログのファイル名
LogLevelエラーログの出力レベルを指定。指定したレベル以上のログが出力される
LogFormat引数1 に ログ出力形式を指定。引数2 にログフォーマットの定義名を指定(任意)可能。
CustomLogディレクティブで定義名を指定することで、そのフォーマットでログ出力する。
フォーマットはApacheドキュメント参照
TransferLog一番最後に記述された LogFormat ディレクティブのフォーマットを使用。LogFormatが全く指定されてない場合は、Common Log Formatを使用する
CustomLogTransferLogと全く同じ動作だが、引数2に、LogFormatで定義したログの定義名を指定できる
OrderAllow、Denyを評価する順序を決める。よって引数は、Allow,Deny または Deny,Allowになる
Allow from引数で指定したホストからの接続を許可する
Deny from引数で指定したホストからの接続を拒否する
SetEnv環境変数を定義する。ここで定義した環境変数はCGIなどの外部プログラムで利用可能

特定の範囲に設定を限定

特定ディレクトリや、特定URLにマッチした場合に共通設定ではなく独自の設定を使うことが可能
一定の範囲で設定を有効にするものをコンテナ指示子と言う

コンテナ指示子コンテキスト説明
<Directory directory-path>ディレクトリ特定のディレクトリとその下のすべてのサブディレクトリに適用される指示子を設定する
<Files filename>指定したファイルやファイル群に適用される指示子を設定する
<Location URL>特定のURLとその下のすべてのサブディレクトリに適用される指示子を設定する
URLが /status 以下に設定を反映する場合は <Location /status>
<DirectoryMatch 正規表現><Directory>と同じ動作だが正規表現が使用可能
<FilesMatch 正規表現><Files>と同じ動作だが正規表現が使用可能
<LocationMatch 正規表現><Location>と同じ動作だが正規表現が使用可能
<Proxy URL>Apacheをプロキシサーバーとして使用する場合に指定する
<VirtualHost アドレス:[ポート]>バーチャルホスト仮想ホストの設定するのに指定する。指定したIPに一致した場合のみ設定がが適用される
<Limit HTTPメソッド>-指定したHTTPメソッドに対してアクセス制御を行う
<LimitExept HTTPメソッド>指定したHTTPメソッド以外に対してアクセス制御を行う

ドキュメントの見方

ApacheのHPに使用可能なディレクティブが掲載されている。以下はApache2.2のディレクティブ
http://httpd.apache.org/docs/2.2/ja/mod/directives.html
ディレクティブの見方は以下の通り

項目説明
説明ディレクティブの説明
構文引数に使用できる文字列や指定方法
コンテキスト指定可能な場所(サーバー設定ファイル、ディレクトリ、バーチャルホスト、.htaccess)
上書きディレクティブを.htaccess内で使用する際に必要な権限
ステータスディレクティブを利用するのに拡張モジュールの追加インストールか確認(Coreは常に使用可能)
モジュールディレクティブを利用するのに必要なモジュール
互換性下位バージョンとの互換性


 

パフォーマンスに関する設定

ディレクティブ説明
KeepAliveOnに設定することでKeepAliveを有効にする
MaxKeepAliveRequests1つのKeepAliveで受け付けるリクエスト数を指定する
KeepAliveTimeoutリクエストしてない状態が何秒続いたらコネクションを切断するか指定
TimeOutGETリクエストを受け取るのにかかる総時間、POST/PUTリクエストにて次のTCPパケットが届くまでの待ち時間
レスポンスを返す際、TCPのACKが帰ってくるまでの時間を設定する"

preforkのディレクティブ

ディレクティブ説明
StartServersApache起動時に生成される子プロセスの数を指定
MinSpareServers子プロセスの数を、Min〜Maxで指定した値の間で自動的に調整する
MaxSpareServers
ServerLimitサーバープロセス数の上限
MaxClients作成可能な子プロセスの上限。ServerLimitを超える値は設定できない
MaxRequestsPerChild指定した数のリクエストを受け付けた後に子プロセスを終了させる(主にメモリリーク対策)

workerディレクティブ

ディレクティブ説明
StartServersApache起動時に生成される子プロセスの数を指定
ThredLimitThreadsPerChildで設定可能な上限
ThreadsPerChild子プロセス毎に生成されるスレッド数
MinSpareThreads待機スレッドをMin〜Mazで指定した値の間で自動的に調整する
MaxSpareThreads
MaxRequestsPerChild指定した数のリクエストを受け付けた後に子プロセスを終了させる(主にメモリリーク対策)

preforkとwokerの違い

モジュール処理パフォーマンスメモリ消費
preforkマルチプロセス
シングルスレッド
リクエストをプロセスで処理
親プロセスが不調になっても、そのリクエストのみの影響に留まる
アクセス数の数分、プロセスが起動する
多い
wokerマルチプロセス
マルチスレッド
リクエストをスレッドで処理
親プロセスが不調になったらリクエスト全てに影響する
アクセス数=スレッド数で、1プロセスが処理できるスレッド数はThreadsPerChildで設定する
少ない

どちらを使用しているかは、httpd -l コマンドで確認する
MPM(マルチプロセッシングモジュール)を切り替えるには、Apache2.2以前は、ソースからの再インストールが必要
Apache2.4以降は httpd.conf の LoadModuleディレクティブで指定可能

 

CGIスクリプトを実行する

# 拡張子がcgiは、CGIスクリプトとして動作させる
AddHandler cgi-script .cgi

# http://<サーバー>/cgi-bin/ を /var/www/cgi-bin/ にマップし、マップ先をCGIスクリプトに指定
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

# 
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI Includes FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>


 

拡張モジュール

モジュールはApacheソースファイルのmodules/generatorsディレクトリやネットから取得する

インストール

Apacheの開発キットである httpd-devel がインストールされている必要がある

apxs -i -a -c <モジュールソースファイル>
オプション説明
-iインストール
-ahttpd.confにLoadModuleディレクティブを追加
-cコンパイル

インストールしたモジュールの組み込み

httpd.confを以下のように編集する(インストールすると自動で追加される)

LoadModule <モジュール識別子> <モジュールのパス>

モジュールが存在する場合のみ設定を有効にする

<IfModule モジュール名>
    各種設定
</IfModule>


 

環境変数による制御

属性にマッチした場合、変数を定義する

SetEnvIf <属性> <変数>[=値]
※値を省略すると1が設定される
属性説明
Remote_Hostリクエストを行なっているクライアントのホスト名
Remote_Addrリクエストを行なっているクライアントの IPアドレス
Server_Addrリクエストを受け取ったサーバのIP アドレス (2.0.43 以降のみ)
Request_Method使用されているメソッド名(GET, POST など)
Request_Protocolリクエストが行なわれたプロトコルの名前とバージョン("HTTP/0.9", "HTTP/1.1" など)
Request_URIURL のスキームとホストの後の部分

その他、Referer(参照元)などHTTPヘッダーの値を属性にすることも可能

特定参照元のみGIFファイルへの直接参照を可能にする

SetEnvIf Referer example\.com allow_site
SetEnvIf Referer example\.jp allow_site
<Files *.gif>
    order by deny,allow
    Deny from all
    Allow from env=allow_site
</Files>


 

認証処理

Apache2.2以降で、認証モジュールが分割された

モジュール説明
mod_auth_XX認証(BASIC/DIGESTなど)を提供
mod_authz_XX承認(アクセス制御)を提供
mod_authn_XX認証プロバイダー(ユーザー情報の呼び出し)サポート

認証の設定

.htaccessを配置するディレクトリで AllowOverride AuthConfig が設定されていれば.htaccessでも制御可能

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authn_file_module modules/mod_authn_file.so
<Directory "/var/www/html/auth/">
    AuthType Digest
    AuthName "DIGEST Resorce"
    AuthUserFile /etc/httpd/conf/htdigest
    Require valid-user
</Directory>
ディレクティブ説明
AuthType認証タイプ(BasicやDigest)を定義
AuthName認証する領域の名称(任意の名前が可能だが重複させないこと)
AuthUserFile認証ユーザーが定義されているファイル
Require認証可能なユーザーをスペース区切りで列挙。valid-userはユーザー情報ファイルのユーザー全て

ユーザー情報定義ファイル

# htpasswd -c <AuthUserFile> <AuthName> <ユーザー名>


 

Proxy機能

フォワードProxyは、クライアントに代わってWEBサーバーへアクセスする
リバースProxyはインターネット側からのリクエストを中継してバックエンドサーバーへ振り分ける

拡張モジュール説明
proxy_moduleApache Proxy機能を可能にする
proxy_balancer_moduleロードバランス機能を可能にする
proxy_ftp_moduleFTPでロードバランスを可能にする
proxy_http_moduleHTTPでロードバランスを可能にする
proxy_ajp_moduleAJP(TomcatなどのServletコンテナ通信)でロードバランスを可能にする
proxy_connect_moduleトンネリングの為のCONNECTメソッドでロードバランスを可能にする

リクエストURLで負荷分散

<IfModule proxy_module.c>
    # フォワードProxyを無効にする
    ProxyRequests Off
    # http://<サーバー>/srv1 でアクセスした場合、http://server1.comにリクエスト転送
    ProxyPass /srv1 http://server1.com
    ProxyPassReverse /srv1 http://server1.com
    # http://<サーバー>/srv2 でアクセスした場合、http://server2.comにリクエスト転送
    ProxyPass /srv2 http://server2.com
    ProxyPassReverse /srv2 http://server2.com
</IfModule>

リクエストやトラフィックによる負荷分散

ProxyRequests Off
# http://<サーバー>/cluster でアクセスした場合、192.168.11.10または20へ振り分けられる
# リモートサーバーのアドレスに balancer:// を用いることで負荷分散が可能になる
# timeoutでバックエンドサーバに接続する際のタイムアウト値(秒)
ProxyPass /cluster balancer://mycrs lbmethod=<パラメータ> timeout=1
<Proxy balancer://mycrs>
    # loadfactor は重み付け(1〜100で指定)で192.168.11.20は10に比べて2倍の頻度で割り振られる
    BalancerMember http://192.168.11.10 loadfactor=1
    BalancerMember http://192.168.11.20 loadfactor=2
</Proxy>
パラメータ説明
bytraffic処理したリクエストの数で重み付けする
bytraffic転送量のバイト数で重み付けする
bybusyness待機中のリクエスト数で振り分ける

Load Balancer Managerの使用

LoadModule status_module modules/mod_status.so
# http://<サーバー>/balancer_status をマネージャのURLとする
<Location /balancer_status>
    SetHandler balancer-manager
    # アクセス制限
    Order Deny,Allow
    Allow from 192.168.11.
</Location>


 

SSL/TSLの導入

必要なパッケージとモジュール確認

# rpm -q openssl
# rpm -q mod_ssl

サーバー証明書の作成

# cd /etc/pki/tls/certs
# make <ファイル名>
サーバー証明書(<ファイル名>.crt)とサーバー鍵(<ファイル名>.key)が作成される

設定する

# vi /etc/httpd/conf.d/ssl.con
以下の箇所を作成したファイルに変更する
SSLCertificateFile /etc/pki/tls/certs/<ファイル名>.crt
SSLCertificateKeyFile /etc/pki/tls/private/<ファイル名>.key


 

負荷ツール(Apache Bench)

ab [オプション] URL
オプション説明
-n 数値リクエスト回数
-c 数値同時実行数
-t 数値サーバーからのレスポンス待ち時間(秒)
-p ファイル名サーバへ指定のファイルを送信
-t コンテンツタイプコンテンツヘッダを指定
-v 数値動作状況の表示レベルを指定
-w結果をhtmlで出力
-x 属性html出力のtableタグに属性を追加
-y 属性html出力のtrタグに属性を追加
-z 属性html出力のtdまたはthタグに属性を追加
-c cookie名称=値cookie値を渡してテストする
-a UID:PASSベーシック認証のページをテストする
-P UID:PASS認証の必要なプロキシを通じてテストする
-x プロキシサーバ名:ポート番号プロキシ経由でリクエストする
-vabのバージョン番号を表示
-khttp/1.1のkeepaliveを有効にする
-hヘルプ表示

トップ   編集 凍結解除 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-12-20 (土) 00:28:20 (829d)