Apacheチューニング
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
649
On Slideshare
642
From Embeds
7
Number of Embeds
1

Actions

Shares
Downloads
3
Comments
0
Likes
2

Embeds 7

http://s.deeeki.com 7

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Apache チューニング
  • 2. チューニング • KeepAliveの設定 • コンテンツの圧縮転送 • 不要モジュールの削除 • シンボリックリンク先の参照許可 • TimeOutの設定 • DNS問い合わせの無効 • .htaccessの無効化 • Prefork MPMのチューニング • Worker MPMのチューニング
  • 3. KeepAliveの設定 ディレクティブ 値 説明 KeepAlive On 同一クライアントに対し コネクションを使い回す MaxKeepAliveRequests 1ページあたりの平均 的なコンテンツ数 + α 1つのKeepAliveで受け付け るリクエスト数 KeepAliveTimeout 1ページ当たりの平均 的な転送時間+α クライアントからのリクエ ストがなくてもKeepAliveを 維持する秒数
  • 4. コンテンツの圧縮転送 「mod_deflate」モジュールを利用することで、Webク ライアントへコンテンツを送信する際、データを圧縮する ことができる。 データ圧縮時にCPUリソースを消費するが、転送速度向上 が可能。
  • 5. 不要モジュールの削除 デフォルトでは多くの拡張モジュー ルが組み込まれているため、無駄に 消費する。 必要最低限の拡張モジュールのみ組 み込むことで、無駄な消費を抑え、 パフォーマンスを向上する。 Listen 80 ServerRoot "/etc/httpd" DocumentRoot "/var/www/html/" User nobody Group nobody <IfModule prefork.c> ***** </IfModule> <IfModule worker.c> ***** </IfModule> MaxRequestsPerChild 0 ErrorLog logs/error_log <Directory /> Options FollowSymLinks AllowOverride None </Directory> 必要 最小限
  • 6. シンボリックリンク先の参照許可 • 一般的には安全面のため、シンボリック先の参 照は許可しない。 • 許可しない場合、リクエストのたび対象コンテ ンツがシンボリックリンクかチェックされ、性 能低下。 • 性能優先の場合、全コンテンツ許可。 <Directory /> Options FollowSymLinks ※全コンテンツ許可 </Directory> # 許可しないディレクトリのみ個別指定 <Directory /home/user/html> Options -FollowSymLinks +SymLinksIfOwnerMatch </Directory>
  • 7. Timeoutの設定 次の3つの待ち時間を同時に変更する。 • GETリクエストを受け取るのにかかる総時間 • POSTやPUTリクエストにおいて、次のTCPパケットが届 くまでの待ち時間 • レスポンスを返す際TCPのACKが返ってくるまでの時間 ※デフォルトは300(5分)。 多くのリクエストを処理するには待ち時間を短くする。
  • 8. DNS問い合わせの無効 クライアントのアドレスをログに記憶する際、DNS問い合 わせすることでホスト名で記憶できるが、パフォーマンス が低下するため、ホスト名への変換はせず、IPアドレスで 記録する。 ※後でコマンドによりホスト名に変換可能 HostnameLookups Off ※デフォルトのまま
  • 9. .htaccessの無効化 • 一般ユーザがサーバの設定を行う場合にhttpd.confの代 わりに使用する設定ファイル。 • 使用する場合は、リクエストのたびに、 .htaccessの有無を確認するため性能低下。 • 一般ユーザが設定を行わない場合は、パフォーマンス優 先およびセキュリティ面から、 無効化する。
  • 10. prefork MPMのチューニング ディレクティブ 値 説明 StartServers デフォルトの5~10 起動時の子プロセス数 MinSpareServers MaxSpareServers まずはデフォルトの5,10で様 子を見て、待機プロセスの消 費が激しく、新たな子プロセ スの起動が間に合わない場合 は徐々に引き上げる。 子プロセスをMinから Maxの間で自動的に調 整する。 過度に待機プロセスが 発生しないように Min<Maxとなるよう待 機プロセスを生成する。 ServerLimit MaxClientsと同様 プロセス数の上限 MaxClients Apacheで割り当て可能なサー バのメモリ容量 / 1プロセスあ たりの平均メモリ消費量 *1 同時接続可能なクライ アント数の上限 MaxRequestsPerChild 子プロセスの起動はサーバに 負担がかかるため、大きな値。 ※静的ドキュメントの場合は0 ※CPU負荷、プロセスのメモ リサイズの時間経過から判断 新たな子プロセスを起 動するまでのリクエス ト回数の上限 ※メモリ完全共有状態 に戻る *1 コピーオンライトを考慮すると更に大きな値を設定可能
  • 11. MaxClient 1プロセスあたりのメモリ消費量は厳密にはコピーオンライ トにより親と共有している容量分を除いた値。 • 搭載メモリ容量(4GB) • 1プロセスあたりのメモリ消費量(100MB) ※親との共有分(70%)は除き、30MB • OS利用分のメモリとして512MB 計算式:4GB – 512MB = 3500/30=116.66 ⇒余裕を持たせて「100」とする! ※ある程度リクエストを流して定常状態時の共有率を使用
  • 12. コピーオンライト • Linuxは物理メモリを節約するため親プロセスと子プロ セスで一部のメモリを共有する。 • 共有メモリ領域は/proc/<プロセスPID>/smpasで調査 可能だが、データ量が多く、大変。 • Perlスクリプトで調査可能。 # <ファイル名>.pl `pgrep httpd` http://gihyo.jp/book/support/24svr
  • 13. worker MPMのチューニング ディレクティブ 値 説明 MaxClients デフォルト(ServerLimitの 25倍) スレッド数の最大値 処理可能な同時リクエスト 数 MinSpareThreads MaxSpareThreads デフォルト(75、250) 待機スレッドをMinから Maxの間で自動的に調整す る。 ServerLimit MaxClients/ThreadsPerChild 以上 大きな値を設定し、余計な未 使用メモリを割り当てないよ うにする。 ThreadLimitと組み合わせ てMaxClientsに設定可能な 上限値。 ThreadsPerChild ThreadPerChildに設定可能 な子プロセス毎のスレッド数 の上限 1プロセスで生成されるス レッド数 StartServer 起動時の子プロセス数を指定 スレッドを割り当てるため大 きくする必要はない。
  • 14. セキュリティ • サーバ情報の隠蔽 • URLエンコードで「/ スラッシュ」を許可 • デフォルトコンテンツの置換 • .htaccessの無効化 • ユーザホームの公開を特定ユーザに限定 • ドキュメントルートの変更 • 画像の直リンクの禁止
  • 15. サーバ情報の隠ぺい ディレクティブ 値 説明 ServerTokens ProductOnly クライアントに返信するサーバ応答 ヘッダに表示する情報を最小限にする ServerSignature Off エラーメッセージ出力時にフッタを表 示しない
  • 16. URLエンコードで「/ スラッシュ」を許可 • 明示的に表示されるサーバ情報の他に、特定の動作パ ターンからApacheを使用していることを知られてしま う。 • URLに「%2f」が含まれている場合、Apache以外の Webサーバは「/」に変換されるが、Apacheはデフォ ルトでは「/」を許可しないため「Not Found」 AllowEncodeSlashes On
  • 17. デフォルトコンテンツの置換 オリジナルのエラーページやルートドキュメントから使用 しているOSやパッケージが推測できないように、コンテン ツを置き換えが必要。 ■ソースからインストール /usr/local/apache2/{cgi-bin,error,htdocs,icons} ■パッケージからインストール /var/www/{cgi-bin,error,html,icons}
  • 18. ドキュメントルートの変更 サイト上のコンテンツの書き換えを防ぐため、デフォルト のドキュメントルートから変更が必要。
  • 19. 画像の直リンクの禁止 画像コンテンツなどを第三者のサイトでURLを参照され、 インラインで表示されるような「直リンク」によって、 サーバに大きな負担がかかる場合がある。 # 参照元URLとして許可されるドメイン SetEnvIf Referer example.com authoritative_site # 正規表現で複数ファイル指定 <FilesMatch “.(gif|jpe?.g|png)$”> Order deny,allow Deny from all Allow from env=autoritative_site # 環境変数 </FilesMatch>
  • 20. iptables インターネット DNSサーバ メンテナンスホスト iptables設定サーバ 6 1 2 3 7 5 4 1. 受信パケット破棄 (送信に対する受信パケットは許可) 2. 送信パケットは全て許可 3. ループバックアドレスは全て許可 4. Pingは相互許可 5. メンテナンスからssh(TCP 22)を許可 6. 全クライアントからHTTPを許可 (TCP 80) 7. サーバからのDNS問い合わせを許可 (UDP 53)