*[[WebApp]]/Apache [#e102892f] #contents **インストール [#x105d5ca] ***バイナリインストール [#nefe3a8d] # yum install http ※オンラインインストール ディレクトリ構成~ |BGCOLOR(#f0f8ff):CENTER:ディレクトリ|BGCOLOR(#f0f8ff):CENTER:説明| |/etc/httpd/conf/|設定ファイル| |/var/log/httpd/|logファイル| |/var/www/|WEBコンテンツ格納| ***ソースからインストールする場合 [#ecb93008] # tar zxf httpd-<version>.tar.gz # cd httpd-<version> # ./configure ※必要なオプションは -help で確認。--with-apr=/usr/local/apr が必要な場合もある # make # make install /usr/local/apache2 に 設定ファイルやバイナリがインストールされる ~ #br **各種コマンド [#l2d43306] |BGCOLOR(#f0f8ff):CENTER:コマンド|BGCOLOR(#f0f8ff):CENTER:説明| |apachectl start|開始| |apachectl stop|停止| |apachectl restart|再起動| |apachectl gracefull|処理中のリクエストを待って再起動| |apachectl gracefull-stop|処理中のリクエストを待って停止| |/usr/sbin/httpd -f <ファイル>|デフォルトの設定ファイル以外を読み込んで起動| |/usr/sbin/httpd -l|静的モジュール一覧表示| |/usr/sbin/httpd -M|静的モジュールと、動的モジュール(DSOモジュール)一覧表示| ~ #br **設定ファイル [#y65f5097] 【書式】ディレクティブ 値 ディレクティブと、値の間はスペースか、TAB。ディレクティブは大文字小文字を意識しない ***主要設定 [#x2068690] |BGCOLOR(#f0f8ff):CENTER:ディレクティブ|>|BGCOLOR(#f0f8ff):CENTER:説明| |ServerRoot|>|インストールされたサーバのベースディレクトリ| |Include|>|外部設定ファイルの読み込み、ServerRootからの相対パスか絶対パスで指定。ファイル名にワイルドカードの使用可| |DocumentRoot|>|WEBのトップディレクトリとなるディレクトリを指定| |ServerName|>|自身のホスト名とポート番号を取得するのに使用する。未設定の場合DNSから取得を試みる| |Listen|>|Apacheサーバーの待ち受けポート(通常変更しない 80で固定)| |AllowOverride|>|.htaccessを設置したディレクトリ以下において、httpd.confの設定を上書き可能にする| |~|BGCOLOR(#f0f8ff):CENTER:設定値|BGCOLOR(#f0f8ff):CENTER:許可されるディレクティブ、設定値は複数指定可能| |~|none|全て禁止| |~|All|全て許可| |~|FileInfo|AddType、AddEncoding、AddLanguage| |~|Indexes|FancyIndexing、Addlcon、AddDescription| |~|Limit|ホスト名やIPアドレスを用いたアクセス制限| |~|AuthConfig|パスワードによるユーザー認証| |ErrorLog|>|エラーログのファイル名| |LogLevel|>|エラーログの出力レベルを指定。指定したレベル以上のログが出力される| |LogFormat|>|引数1 に ログ出力形式を指定。引数2 にログフォーマットの定義名を指定(任意)可能。&br;CustomLogディレクティブで定義名を指定することで、そのフォーマットでログ出力する。&br;フォーマットは[[Apacheドキュメント参照>http://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html#formats]]| |TransferLog|>|一番最後に記述された LogFormat ディレクティブのフォーマットを使用。LogFormatが全く指定されてない場合は、Common Log Formatを使用する| |CustomLog|>|TransferLogと全く同じ動作だが、引数2に、LogFormatで定義したログの定義名を指定できる| |Order|>|Allow、Denyを評価する順序を決める。よって引数は、Allow,Deny または Deny,Allowになる| |Allow from|>|引数で指定したホストからの接続を許可する| |Deny from|>|引数で指定したホストからの接続を拒否する| |SetEnv|>|環境変数を定義する。ここで定義した環境変数はCGIなどの外部プログラムで利用可能| ***特定の範囲に設定を限定 [#udaf5302] 特定ディレクトリや、特定URLにマッチした場合に共通設定ではなく独自の設定を使うことが可能~ 一定の範囲で設定を有効にするものをコンテナ指示子と言う~ |BGCOLOR(#f0f8ff):CENTER:コンテナ指示子|BGCOLOR(#f0f8ff):CENTER:コンテキスト|BGCOLOR(#f0f8ff):CENTER:説明| |<Directory directory-path>|ディレクトリ|特定のディレクトリとその下のすべてのサブディレクトリに適用される指示子を設定する| |<Files filename>|~|指定したファイルやファイル群に適用される指示子を設定する| |<Location URL>|~|特定のURLとその下のすべてのサブディレクトリに適用される指示子を設定する&br;URLが /status 以下に設定を反映する場合は <Location /status>| |<DirectoryMatch 正規表現>|~|<Directory>と同じ動作だが正規表現が使用可能| |<FilesMatch 正規表現>|~|<Files>と同じ動作だが正規表現が使用可能| |<LocationMatch 正規表現>|~|<Location>と同じ動作だが正規表現が使用可能| |<Proxy URL>|~|Apacheをプロキシサーバーとして使用する場合に指定する| |<VirtualHost アドレス:[ポート]>|バーチャルホスト|仮想ホストの設定するのに指定する。指定したIPに一致した場合のみ設定がが適用される| |<Limit HTTPメソッド>|-|指定したHTTPメソッドに対してアクセス制御を行う| |<LimitExept HTTPメソッド>|~|指定したHTTPメソッド以外に対してアクセス制御を行う| ***ドキュメントの見方 [#n038e40c] ApacheのHPに使用可能なディレクティブが掲載されている。以下はApache2.2のディレクティブ~ http://httpd.apache.org/docs/2.2/ja/mod/directives.html~ ディレクティブの見方は以下の通り~ |BGCOLOR(#f0f8ff):CENTER:項目|BGCOLOR(#f0f8ff):CENTER:説明| |説明|ディレクティブの説明| |構文|引数に使用できる文字列や指定方法| |コンテキスト|指定可能な場所(サーバー設定ファイル、ディレクトリ、バーチャルホスト、.htaccess)| |上書き|ディレクティブを.htaccess内で使用する際に必要な権限| |ステータス|ディレクティブを利用するのに拡張モジュールの追加インストールか確認(Coreは常に使用可能)| |モジュール|ディレクティブを利用するのに必要なモジュール| |互換性|下位バージョンとの互換性| ~ #br **パフォーマンスに関する設定 [#wcc5d132] |BGCOLOR(#f0f8ff):CENTER:ディレクティブ|BGCOLOR(#f0f8ff):CENTER:説明| |KeepAlive|Onに設定することでKeepAliveを有効にする| |MaxKeepAliveRequests|1つのKeepAliveで受け付けるリクエスト数を指定する| |KeepAliveTimeout|リクエストしてない状態が何秒続いたらコネクションを切断するか指定| |TimeOut|GETリクエストを受け取るのにかかる総時間、POST/PUTリクエストにて次のTCPパケットが届くまでの待ち時間&br;レスポンスを返す際、TCPのACKが帰ってくるまでの時間を設定する"| ***preforkのディレクティブ [#q15a8656] |BGCOLOR(#f0f8ff):CENTER:ディレクティブ|BGCOLOR(#f0f8ff):CENTER:説明| |StartServers|Apache起動時に生成される子プロセスの数を指定| |MinSpareServers|子プロセスの数を、Min〜Maxで指定した値の間で自動的に調整する| |MaxSpareServers|~| |ServerLimit|サーバープロセス数の上限| |MaxClients|作成可能な子プロセスの上限。ServerLimitを超える値は設定できない| |MaxRequestsPerChild|指定した数のリクエストを受け付けた後に子プロセスを終了させる(主にメモリリーク対策)| ***workerディレクティブ [#h7569329] |BGCOLOR(#f0f8ff):CENTER:ディレクティブ|BGCOLOR(#f0f8ff):CENTER:説明| |StartServers|Apache起動時に生成される子プロセスの数を指定| |ThredLimit|ThreadsPerChildで設定可能な上限| |ThreadsPerChild|子プロセス毎に生成されるスレッド数| |MinSpareThreads|待機スレッドをMin〜Mazで指定した値の間で自動的に調整する| |MaxSpareThreads|~| |MaxRequestsPerChild|指定した数のリクエストを受け付けた後に子プロセスを終了させる(主にメモリリーク対策)| ***preforkとwokerの違い [#q0d25b35] |BGCOLOR(#f0f8ff):CENTER:モジュール|BGCOLOR(#f0f8ff):CENTER:処理|BGCOLOR(#f0f8ff):CENTER:パフォーマンス|BGCOLOR(#f0f8ff):CENTER:メモリ消費| |prefork|マルチプロセス&br;シングルスレッド|リクエストをプロセスで処理&br;親プロセスが不調になっても、そのリクエストのみの影響に留まる&br;アクセス数の数分、プロセスが起動する|多い| |woker|マルチプロセス&br;マルチスレッド|リクエストをスレッドで処理&br;親プロセスが不調になったらリクエスト全てに影響する&br;アクセス数=スレッド数で、1プロセスが処理できるスレッド数はThreadsPerChildで設定する|少ない| どちらを使用しているかは、httpd -l コマンドで確認する~ MPM(マルチプロセッシングモジュール)を切り替えるには、Apache2.2以前は、ソースからの再インストールが必要~ Apache2.4以降は httpd.conf の LoadModuleディレクティブで指定可能~ ~ #br **CGIスクリプトを実行する [#j7a050e5] # 拡張子が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> ~ #br **拡張モジュール [#v1c9ae92] モジュールはApacheソースファイルのmodules/generatorsディレクトリやネットから取得する~ ***インストール [#v845d6c1] Apacheの開発キットである httpd-devel がインストールされている必要がある~ apxs -i -a -c <モジュールソースファイル> |BGCOLOR(#f0f8ff):CENTER:オプション|BGCOLOR(#f0f8ff):CENTER:説明| |-i|インストール| |-a|httpd.confにLoadModuleディレクティブを追加| |-c|コンパイル| ***インストールしたモジュールの組み込み [#v3e26236] httpd.confを以下のように編集する(インストールすると自動で追加される) LoadModule <モジュール識別子> <モジュールのパス> モジュールが存在する場合のみ設定を有効にする <IfModule モジュール名> 各種設定 </IfModule> ~ #br **環境変数による制御 [#i20e326c] 属性にマッチした場合、変数を定義する SetEnvIf <属性> <変数>[=値] ※値を省略すると1が設定される |BGCOLOR(#f0f8ff):CENTER:属性|BGCOLOR(#f0f8ff):CENTER:説明| |Remote_Host|リクエストを行なっているクライアントのホスト名| |Remote_Addr|リクエストを行なっているクライアントの IPアドレス| |Server_Addr|リクエストを受け取ったサーバのIP アドレス (2.0.43 以降のみ)| |Request_Method|使用されているメソッド名(GET, POST など) | |Request_Protocol|リクエストが行なわれたプロトコルの名前とバージョン("HTTP/0.9", "HTTP/1.1" など)| |Request_URI|URL のスキームとホストの後の部分| その他、Referer(参照元)などHTTPヘッダーの値を属性にすることも可能~ ***特定参照元のみGIFファイルへの直接参照を可能にする [#m0056723] 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> ~ #br **認証処理 [#ta90f64d] Apache2.2以降で、認証モジュールが分割された |BGCOLOR(#f0f8ff):CENTER:モジュール|BGCOLOR(#f0f8ff):CENTER:説明| |mod_auth_XX|認証(BASIC/DIGESTなど)を提供| |mod_authz_XX|承認(アクセス制御)を提供| |mod_authn_XX|認証プロバイダー(ユーザー情報の呼び出し)サポート| ***認証の設定 [#s675e5ce] .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> |BGCOLOR(#f0f8ff):CENTER:ディレクティブ|BGCOLOR(#f0f8ff):CENTER:説明| |AuthType|認証タイプ(BasicやDigest)を定義| |AuthName|認証する領域の名称(任意の名前が可能だが重複させないこと)| |AuthUserFile|認証ユーザーが定義されているファイル| |Require|認証可能なユーザーをスペース区切りで列挙。valid-userはユーザー情報ファイルのユーザー全て| ***ユーザー情報定義ファイル [#t5d53131] # htpasswd -c <AuthUserFile> <AuthName> <ユーザー名> ~ #br **Proxy機能 [#y50a3c02] ''フォワードProxy''は、クライアントに代わってWEBサーバーへアクセスする~ ''リバースProxy''はインターネット側からのリクエストを中継してバックエンドサーバーへ振り分ける~ |BGCOLOR(#f0f8ff):CENTER:拡張モジュール|BGCOLOR(#f0f8ff):CENTER:説明| |proxy_module|Apache Proxy機能を可能にする| |proxy_balancer_module|ロードバランス機能を可能にする| |proxy_ftp_module|FTPでロードバランスを可能にする| |proxy_http_module|HTTPでロードバランスを可能にする| |proxy_ajp_module|AJP(TomcatなどのServletコンテナ通信)でロードバランスを可能にする| |proxy_connect_module|トンネリングの為のCONNECTメソッドでロードバランスを可能にする| ***リクエストURLで負荷分散 [#v66beada] <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> ***リクエストやトラフィックによる負荷分散 [#t5c34143] 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> |BGCOLOR(#f0f8ff):CENTER:パラメータ|BGCOLOR(#f0f8ff):CENTER:説明| |bytraffic|処理したリクエストの数で重み付けする| |bytraffic|転送量のバイト数で重み付けする| |bybusyness|待機中のリクエスト数で振り分ける| ***Load Balancer Managerの使用 [#s79fdf50] 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> ~ #br **SSL/TSLの導入 [#d1f997fe] ***必要なパッケージとモジュール確認 [#ha98bd3a] # rpm -q openssl # rpm -q mod_ssl ***サーバー証明書の作成 [#p6ca25af] # cd /etc/pki/tls/certs # make <ファイル名> サーバー証明書(<ファイル名>.crt)とサーバー鍵(<ファイル名>.key)が作成される ***設定する [#o943270f] # vi /etc/httpd/conf.d/ssl.con 以下の箇所を作成したファイルに変更する SSLCertificateFile /etc/pki/tls/certs/<ファイル名>.crt SSLCertificateKeyFile /etc/pki/tls/private/<ファイル名>.key ~ #br **負荷ツール(Apache Bench) [#kb5f2114] ab [オプション] URL |BGCOLOR(#f0f8ff):''オプション''|BGCOLOR(#f0f8ff):''説明''| |-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 プロキシサーバ名:ポート番号|プロキシ経由でリクエストする| |-v|abのバージョン番号を表示| |-k|http/1.1のkeepaliveを有効にする| |-h|ヘルプ表示|