アーカイブ

投稿者のアーカイブ

Apacheでリバースプロキシ(mod_proxy)を活用する(1) – インストール編

2009 年 1 月 29 日 コメント 1 件

Apacheはとてもとても有名なWeb Serverですが、今日はそのチューニング方法の一つであるリバースプロキシについて書きたいと思います。

Webサーバの種類

一口にWebサーバと言っても、ダイナミックなWebコンテンツを生成するサイトにおいてWebサーバがserveするものは2種類あります。一つはプログラムで動的に生成されるHTMLファイル。もう一つがGIFやJPEG, PNGなどの画像、および Flash, JavaScript, CSSなどの静的なファイルです。

プログラムで動的にHTMLを生成するためには、そのプログラムを動かす実行環境がWebサーバ(Apache)と連携する必要があります。いわゆるCGIとか最近だとFastCGI, mod_php, mod_perl, mod_rails, mod_pythonなどのスクリプト環境がよく使われています。これらの環境は昨今では「事前に実行環境(インタープリター)の起動をしてプログラムをコンパイルしておきそれを再利用する」というような使われ方をするため、Apacheがクライアントからの要求を処理するために生成する子プロセスのメモリ使用量が肥大化し、プロセスを起動する処理が重くなる傾向にあります。

一方で、単純にファイルの中身をそのままクライアントに渡せばいいようなスタティックなファイルが、このような肥大化したプロセスで処理されることには非常に無駄があります。そこでリバースプロキシの出番です。リバースプロキシの動作は凄くシンプルで、リクエストを受けたら、ダイナミックなページのリクエストのみバックエンドのアプリケーションサーバに渡し、それ以外のスタティックなファイルは自分自身で直接処理します(*1)。図にするとこんな感じでしょうか。

リバースプロキシのイメージ

このような単純な動作なので、リバースプロキシ自体にはmod_perlやmod_phpなどを組み込む必要がなくなり、プロセスのサイズは非常にスリムになります。実際このブログを動かしているマシンでも

  • リバースプロキシのプロセスサイズは3.5MB程度
  • mod_phpのプロセスサイズは25MB程度

となっており、一プロセスあたりで20MBも違います。

さらに、リバースプロキシは動作がシンプルなので、ApacheのMPM(Multi-Proccessing Module)にworkerというものを選択することができます。worker mpmはクライアントからのリクエストを処理するのにプロセスより軽量なスレッドを使用するため(*2)、prefork mpmと比べて動作が軽いという特徴があります。

*1)これは設定自体でどうにでも変更できます
*2)厳密に言うとプロセス+スレッドのハイブリッド方式です

また、フロントエンドのリバースプロキシ+バックエンドのアプリケーションサーバという構成にしておくことで、リバースプロキシは止めずにバックエンドのサーバを増やしたり交換したりすることが可能です。このため負荷分散のためのメンテナンスが非常にやりやすくなります。このあたりはmod_proxy_balancerというモジュールの話になるので今回は割愛しますが、また機会があればということで。

Apache 2.2.11のインストール

前置きが長くなりましたが、リバースプロキシを導入するメリットがわかったところで実際にApacheをインストールしてみたいと思います。環境は Ubuntu 8.10 Interpid です。
まずは最新版である2.2.11のソースを Apache本家 からダウンロードしておきます。

$ tar xvzf httpd-2.2.11.tar.gz
# ちょっとでも最適化する
$ export CFLAGS="-O3"
$ cd httpd-2.2.11
$ ./configure --prefix=/usr/local/httpd_proxy_2.2.11 \
 --with-mpm=worker \
 --enable-shared \
 --enable-so \
 --disable-asis \
 --disable-cgid \
 --disable-proxy-connect \
 --disable-proxy-ftp \
 --disable-proxy-ajp \
 --disable-userdir \
 --disable-actions \
 --enable-modules='rewrite proxy proxy_balancer proxy_http cgi deflate headers expires' \
 --enable-mods-shared='ssl cache disk_cache mem_cache' \
 && make && sudo make install

でインストールが完了です。configureにいろいろとオプションを渡していますが、これらは

  • 確実に使用するモジュールを静的にリンクさせる
  • 不要なモジュールは無効にする
  • 必要になるかもしれないモジュールはDSOとして組み込めるようにしておく

という指定です。/usr/local/httpd_proxy_2.2.11 にApacheのファイル一式がインストールされているので、起動確認を行いましょう。

$ sudo /usr/local/httpd_proxy_2.2.11/bin/apachectl start

でサーバが起動するので、http://localhost/ にアクセスしてみてください。”It works!”と表示されればインストール成功です。次回は具体的なリバースプロキシの設定方法を説明します。

Apacheポケットリファレンス (POCKET REFERENCE)

著者/訳者:WINGS プロジェクト 高江 賢

出版社:技術評論社( 2010-04-10 )

単行本(ソフトカバー) ( 496 ページ )


カテゴリー: Apache タグ:

ブログのファイルをSubversionリポジトリで管理するように

2009 年 1 月 25 日 コメントはありません

色々気になるところがあってiNoveのテーマのファイルをいじりまくっているのですが、テーマをバージョンアップするとせっかく施した修正が吹っ飛んでしまうので、どこをどう修正したのかを管理するためにSubversionでバージョン管理するようにしました。

世間の流れ的に、最初は張り切ってgitを使っていたのですが

  • git statusとかgit commitとか、フルスペルでタイプしないといけない(svnはsvn st、svn ciとか略式がある)
  • git push origin master とかコマンド群がわかりづらい
  • git status の表示が見にくい

という点がどうしても気になったので、慣れ親しんだsvnで管理することにしました。まぁ上の3点ははっきりいって慣れの問題ですし、gitのブランチの作成→マージのお手軽さは素晴らしいのですが、svnが許されるのは小学生までと言われるまではsvnで頑張ろうと思います。ヒマがあったらbazaarも試してみたいです。

カテゴリー: 日記 タグ:

WordPressをモバイル対応させるプラグインKtai StyleとGoogle Analyticsでのアクセス解析

2009 年 1 月 25 日 コメントはありません

先週ぐらいにWordPressをモバイルに対応させるプラグインKtai Styleを導入したのですが、Google Analyticsだとモバイルサイトのアクセス解析ができなくってどうしようかと思っていたら、ケータイサイトでGoogle Analyticsを利用するためのライブラリという記事があったので早速試してみました。

  1. まずはファイルをGA4Kからダウンロードして解凍し、”GoogleAnalytics”というディレクトリをKtai Styleプラグインで利用しているテーマ(自分の場合は”default”)のディレクトリである wp-content/plugins/ktai_style/themes/default/ 配下にコピーします。
  2. そしてコピーしたGoogleAnalyticsディレクトリ配下にある Config/analytics_config.php にトラッキングしたいサイトのIDとドメインを設定します。該当箇所がコメントアウトされているのでこれを解除します。
  3. 最後にトラッキングするため、以下のようにコードを wp-content/plugins/ktai_style/themes/default/header.php あたりに追加します。
--- header.php.orig     2009-01-25 19:46:39.000000000 +0900
+++ header.php  2009-02-01 23:01:34.000000000 +0900
@@ -6,6 +6,15 @@
        <style>p {margin:0.75em 0;}</style>
 <?php }
 /* ks_wp_head(); */ ?>
+<?php
+/* customize: Google Analytics */
+require_once (dirname(__FILE__) . '/GoogleAnalytics/Service/analytics.php');
+require_once (dirname(__FILE__) . '/GoogleAnalytics/Config/analytics_config.php');
+sendGoogleAnalytics(ANALYTICS_ID, WEBSITE_DOMAIN);
+/* /customize: Google Analytics */
+?>
 </head>
 <body>
 <?php /* <body bgcolor="" text="" link="" vlink=""> */ ?>
@@ -28,4 +37,4 @@
        <h1><?php bloginfo('name'); ?></h1>
 <?php } ?>
 <div align="right"><img localsrc="325" alt="0." /><img localsrc="30" alt="<?php _e('v', 'ktai_style'); ?>" /><a href="#tail" accesskey="0"><?php _e('Menu', 'ktai_style'); ?></a></div>

これで実際に携帯でアクセスしてみてから1,2時間後にGoogle Analyticsをチェックしてみると、以下のように携帯端末のアクセスが記録されているはずです。

google-analytics-mobile

それにしてもKtai Styleプラグインの携帯対応ぶりがすごい。プラグインの自由度が高いからここまでできるのですかね…なお、Google Analyticsのモバイル対応にあたってはこちらを参考にさせてもらいました。

WordPressレッスンブック 2.8対応―ステップバイステップ形式でマスターできる

著者/訳者:エビスコム

出版社:ソシム( 2009-09 )

単行本 ( 319 ページ )


カテゴリー: Google Analytics タグ: , ,

このブログにLDRizeを設定

2009 年 1 月 23 日 コメントはありません

昨日のAutoPagerizeに引き続き、LDRizeも設定しました。LDRizeはscript/LDRize/siteinfoのWikiに追記すると設定できますが、例によって一旦ローカルでうまく動くか試すのがよいでしょう。

  • Greasemonkeyのアイコンを右クリック
  • ユーザスクリプトの管理
  • LDRizeを選択
  • ”編集”ボタンをクリック

してスクリプトを開き、var SITEINFO に以下を追加します。

{
name:      'おいぬま日報',
domain:    '^http://tech¥.lampetty¥.net/tech/',
paragraph: '//div[@class="post"]',
link:      'h2/a',
view:      'h2/a/text()',
}

これで動作確認したらローカルのスクリプトは元に戻しておいて、script/LDRize/siteinfoのWikiに追記します。で、Greasemonkeyのアイコンを右クリック->ユーザスクリプトコマンド->LDRize – update siteinfoをクリックするとSITEINFOのデータが最新の状態になります。

これで”j”, “k”, “p”, “o”キーで一気に読めるようになりました。めでたしめでたし。

カテゴリー: LDRize タグ:

このブログにAutoPagerizeを設定

2009 年 1 月 22 日 コメントはありません

タイトル通り、このブログにAutoPagerizeを設定しました。これでGreasemonkeyでAutoPagerizeを入れている人はちょっと幸せになれるはず。今回もwedataを使っているのですが、ここに書き込む前にローカルで動作確認をしました。具体的には

  • Greasemonkeyのアイコンを右クリック
  • ユーザスクリプトの管理
  • AutoPagerizeを選択
  • “編集”ボタンをクリック

してスクリプトを開き、var SITEINFO に以下を追加して下書きをします。

  {
    url: '^http://tech\.lampetty\.net/tech/',
    nextLink: '//span[contains(@class,"older") or contains(@class,"next")]/a',
    pageElement: '//div[contains(@class,"post")]',
    insertBefore: '//div[@id="postnavi"]',
    exampleUrl: 'http://tech.lampetty.net/tech/',
  },

これでコメント欄の直後に次のページの内容が挿入されるので、あとはブラウザをリロードして正しく動くかどうかを確認。問題なかったらこっちはコメントあうとして、wedataに反映させます。

コンテンツを作っているのは自分なので、本来であればHTMLにmicroformatsで入れても良いのですが、あんまりテーマのファイルをいじりたくないのでwedataに書き込みました。さて、次はLDRizeをやらないと…

カテゴリー: AutoPagerize タグ:

デザインが崩れてました…

2009 年 1 月 18 日 コメントはありません

投稿を表示するページをIEまたはSafariで表示するとデザインが崩れてました。あらためてクロスブラウザチェックの必要性を感じた今日この頃orz…

カテゴリー: 日記 タグ:

WordPressでフォントサイズを変更できるようにするプラグイン

2009 年 1 月 17 日 コメントはありません

どうもこのiNoveというテーマのフォントサイズが小さい(bodyタグで12px指定)のが無性に気になったので、WordPressでフォントサイズを変更できるプラグインがないかを探してみたら、WP-chgFontSizeというそのままずばりのものを発見しました。

インストールはいつものようにファイルをダウンロード→解凍→wp-content/plugins に移動→管理画面から有効化するだけです。で、管理画面から設定をするんですが、フォントサイズの単位が px, em, %が選べるので、自分はfont-sizeのパーセント表記一覧 – Webtech Walkerを参考にさせてもらい、パーセンテージ指定にしました。具体的には

  • Min: 100 (12px相当)
  • Max: 150 (18px相当)
  • Default Font Size: 108 (13px相当)

という感じです。これで12pxという小さいフォントサイズは解消できたのでめでたしめでたし。本当は14px相当にしてもよかったのですが、投稿タイトルのh2タグのフォントサイズがなぜか大きくできないので、本文のフォントサイズは控えめにしてあります。

WordPress 2.7対応「導入&カスタマイズ」実践ガイド―個人ブログも企業サイトも簡単&無料で構築できる!

著者/訳者:吉村 正春

出版社:秀和システム( 2009-02 )

単行本 ( 415 ページ )


カテゴリー: WordPress タグ:
Pages: << 1 2 3 ...17 18 19 20 21 22 23 24 25 >>