<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>chibiegg日誌</title>
	<atom:link href="http://blog.chibiegg.net/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.chibiegg.net</link>
	<description>chibiegg’s Diary</description>
	<lastBuildDate>Sat, 14 Apr 2012 14:43:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Seagete ST32000542ASのファームウエアアップデート</title>
		<link>http://blog.chibiegg.net/2012/01/06_10_651.htm</link>
		<comments>http://blog.chibiegg.net/2012/01/06_10_651.htm#comments</comments>
		<pubDate>Fri, 06 Jan 2012 01:45:19 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[HDD]]></category>
		<category><![CDATA[Seagate]]></category>
		<category><![CDATA[アップデート]]></category>
		<category><![CDATA[ファームウエア]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=651</guid>
		<description><![CDATA[自宅のファイルサーバーのHDDのチェックをしていて、たまたま気づいたのですが。 うちで8台利用しているSeagateのST32000542ASのファームウエアが、「突然電源が切れる」「電源が入らなくなる」など、不具合のあ [...]]]></description>
			<content:encoded><![CDATA[<p>自宅のファイルサーバーのHDDのチェックをしていて、たまたま気づいたのですが。</p>
<p>うちで8台利用しているSeagateのST32000542ASのファームウエアが、「突然電源が切れる」「電源が入らなくなる」など、不具合のあるバージョンCC34でした。</p>
<p>恐ろしいので、アップデートすることに。</p>
<h2>アップデータのダウンロード</h2>
<p><a title="http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=213915&amp;NewLang=en" href="http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=213915&amp;NewLang=en" target="_blank">http://seagate.custkb.com/seagate/crm/selfservice/search.jsp?DocId=213915&amp;NewLang=en</a></p>
<p>このサイトからアップデータCDのISOイメージをダウンロードします。これをCDに焼いて使います。</p>
<h2>アップデート</h2>
<p>アップデートに利用するPCにアップデート対象のHDDだけを接続し、CDを入れた状態で起動します。この時、USB変換とか使ってはいけません。SATAで直接接続してください。</p>
<p>無事CDから起動すると、READMEが表示されるのでESCを押すと、次のようなメニューが表示されます。</p>
<div id="attachment_652" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chibiegg.net/files/2012/01/IMG_0666.jpg"><img class="size-thumbnail wp-image-652" src="http://blog.chibiegg.net/files/2012/01/IMG_0666-300x225.jpg" alt="メニュー" width="300" height="225" /></a><p class="wp-caption-text">メニュー</p></div>
<p>Lを押すとこのCDが対象としているHDDの型番とバージョンのリストが閲覧できます。</p>
<p>まず、HDDが正しく認識されているか、Sでチェックします。</p>
<div id="attachment_654" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chibiegg.net/files/2012/01/IMG_0668.jpg"><img class="size-thumbnail wp-image-654" src="http://blog.chibiegg.net/files/2012/01/IMG_0668-300x198.jpg" alt="HDD Scan" width="300" height="198" /></a><p class="wp-caption-text">HDD Scan</p></div>
<p>Sを入力してしばらくすると、写真の様に認識されたHDDの一覧が表示されるので型番とバージョンが対象のものである事を確認します。確認できたらESCでメニューに戻ります。</p>
<p>で、メニューからアップデートできれば良いのですが、できないらしいので、「Ctl+C」「y」と入力して、メニューを終了するとプロンプトが表示されます。</p>
<div id="attachment_655" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chibiegg.net/files/2012/01/IMG_0675.jpg"><img class="size-thumbnail wp-image-655" src="http://blog.chibiegg.net/files/2012/01/IMG_0675-300x189.jpg" alt="コマンド入力" width="300" height="189" /></a><p class="wp-caption-text">コマンド入力</p></div>
<p>ここに、写真のように、</p>
<blockquote><p>FDL486A.EXE -m Hepburn -f HECC358H.LOD -s -x -b -v -a 20</p></blockquote>
<p>と入力しEnterを入力すると、ファームウエアのアップデートが始まります。ここから完了するまで、電源を切ったり、キーの入力はしないでください。</p>
<p>下のように、プロンプトが表示されれば完了です。</p>
<div id="attachment_657" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.chibiegg.net/files/2012/01/IMG_0673.jpg"><img class="size-thumbnail wp-image-657" src="http://blog.chibiegg.net/files/2012/01/IMG_0673-300x191.jpg" alt="アップデート完了" width="300" height="191" /></a><p class="wp-caption-text">アップデート完了</p></div>
<p>「FLASH-M.BAT」と入力すると、メニューに戻れるのでZでシャットダウンしました。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2012/01/06_10_651.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Can you crack it?</title>
		<link>http://blog.chibiegg.net/2011/12/11_22_644.htm</link>
		<comments>http://blog.chibiegg.net/2011/12/11_22_644.htm#comments</comments>
		<pubDate>Sun, 11 Dec 2011 13:42:08 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[雑記]]></category>
		<category><![CDATA[GCHQ]]></category>
		<category><![CDATA[クラック]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=644</guid>
		<description><![CDATA[イギリスの政府通信本部(GCHQ)が現在採用活動の一環として、「Can you crack it?」と題して暗号解読クイズページを公開しています。 イギリス人であればこれをクリアするとエントリーフォームからエントリーでき [...]]]></description>
			<content:encoded><![CDATA[<p>イギリスの政府通信本部(GCHQ)が現在採用活動の一環として、「<a title="Can you crack it?" href="http://www.canyoucrackit.co.uk/" target="_blank">Can you crack it?</a>」と題して暗号解読クイズページを公開しています。</p>
<p>イギリス人であればこれをクリアするとエントリーフォームからエントリーできるみたいです。</p>
<div id="attachment_645" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/12/canyoucrackit.png"><img class="size-medium wp-image-645" src="http://blog.chibiegg.net/files/2011/12/canyoucrackit-500x292.png" alt="Can you crack it?" width="500" height="292" /></a><p class="wp-caption-text">Can you crack it?</p></div>
<p>で、先日大学の友達と相談しながらクリアしました。</p>
<div id="attachment_646" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/12/I-can-crack-it.png"><img class="size-medium wp-image-646" src="http://blog.chibiegg.net/files/2011/12/I-can-crack-it-500x322.png" alt="Can you crack it? クリア" width="500" height="322" /></a><p class="wp-caption-text">Can you crack it? クリア</p></div>
<p>実はこれ、表示されてる問題をクリアしたと思ったらstage 2 of 3が出て来ます(笑)。</p>
<p>面白かったので、解答までの流れをブログに書きたいのですが、期日まであと1日ちょっとあるので、その後にします。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/12/11_22_644.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>stm32f10x_can.c のバグについて</title>
		<link>http://blog.chibiegg.net/2011/11/27_14_637.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/27_14_637.htm#comments</comments>
		<pubDate>Sun, 27 Nov 2011 05:25:44 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[日記]]></category>
		<category><![CDATA[電子工作]]></category>
		<category><![CDATA[CAN]]></category>
		<category><![CDATA[STM32]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=637</guid>
		<description><![CDATA[前回の投稿と打って変わって組込系の話題を。 最近STM32でCANとか使っているのですが、時々送信に失敗してしまうという問題がありました。 たまになので問題ないのですが、気になったので調べてみるとSTMicroが用意して [...]]]></description>
			<content:encoded><![CDATA[<p>前回の投稿と打って変わって組込系の話題を。</p>
<p>最近STM32でCANとか使っているのですが、時々送信に失敗してしまうという問題がありました。</p>
<p>たまになので問題ないのですが、気になったので調べてみるとSTMicroが用意しているSTM32F10x standard peripheral libraryのバグでした。バージョンは04/16/2010 のV3.3.0と古いやつですが。</p>
<p>具体的に言うと、現在送信しようとしているメッセージの状態を確認する関数</p>
<p>CAN_TransmitStatus にあります。</p>
<p>ここでは CANxのTSRレジスタのTSS_RQCP0、TSR_TXOK0、およびTSR_TME0ビットの値を見て、</p>
<p>CANTXPENDING(送信中)、CANTXFAILED(失敗)、CANTXOK(成功)を返しています。</p>
<p>が、こんな風にレジスタにアクセスするようなコードになってます。</p>
<pre class="brush: c;">switch (TransmitMailbox)<br />
  {<br />
    case (0): state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_RQCP0) &lt;&lt; 2);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TXOK0) &gt;&gt; 0);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TME0) &gt;&gt; 26);<br />
      break;<br />
    case (1): state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_RQCP1) &gt;&gt; 6);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TXOK1) &gt;&gt; 8);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TME1) &gt;&gt; 27);<br />
      break;<br />
    case (2): state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_RQCP2) &gt;&gt; 14);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TXOK2) &gt;&gt; 16);<br />
      state |= (uint8_t)((CANx-&gt;TSR &amp; TSR_TME2) &gt;&gt; 28);<br />
      break;<br />
    default:<br />
      state = CANTXFAILED;<br />
      break;<br />
  }[/sourcecode]<br />
これでは、レジスタに3回アクセスしてしまっており、アクセスとアクセスの間でレジスタの値が変わってしまうと変なstatusになってしまいます。その結果 default で CANTXFAILED がセットされてしまうというのが送信失敗の原因です(実際にはこの瞬間に成功しているが、失敗したと判断してしまう)。</p>
<p>最も修正量の少ない解決策は簡単で、CANx-&gt;TSRの値を一旦変数に入れてやればいいのです。</p>
<pre class="brush: c;">uint32_t _tsr =  CANx-&gt;TSR;<br />
switch (TransmitMailbox)<br />
  {<br />
    case (0): state |= (uint8_t)((_tsr &amp; TSR_RQCP0) &lt;&lt; 2);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TXOK0) &gt;&gt; 0);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TME0) &gt;&gt; 26);<br />
      break;<br />
    case (1): state |= (uint8_t)((_tsr &amp; TSR_RQCP1) &gt;&gt; 6);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TXOK1) &gt;&gt; 8);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TME1) &gt;&gt; 27);<br />
      break;<br />
    case (2): state |= (uint8_t)((_tsr &amp; TSR_RQCP2) &gt;&gt; 14);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TXOK2) &gt;&gt; 16);<br />
      state |= (uint8_t)((_tsr &amp; TSR_TME2) &gt;&gt; 28);<br />
      break;<br />
    default:<br />
      state = CANTXFAILED;<br />
      break;<br />
  }[/sourcecode]<br />
こんな風に。</p>
<p>で、最新のV3.5.0ではちゃんと修正されてました。</p>
<pre class="brush: c;">  switch (TransmitMailbox)<br />
  {<br />
    case (CAN_TXMAILBOX_0):<br />
      state =   CANx-&gt;TSR &amp;  (CAN_TSR_RQCP0 | CAN_TSR_TXOK0 | CAN_TSR_TME0);<br />
      break;<br />
    case (CAN_TXMAILBOX_1):<br />
      state =   CANx-&gt;TSR &amp;  (CAN_TSR_RQCP1 | CAN_TSR_TXOK1 | CAN_TSR_TME1);<br />
      break;<br />
    case (CAN_TXMAILBOX_2):<br />
      state =   CANx-&gt;TSR &amp;  (CAN_TSR_RQCP2 | CAN_TSR_TXOK2 | CAN_TSR_TME2);<br />
      break;<br />
    default:<br />
      state = CAN_TxStatus_Failed;<br />
      break;<br />
  }[/sourcecode]<br />
一度でアクセスするようになってます。でも返値変わってて、最新版に置き換えるのは大変そう...</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/27_14_637.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginxでSSL/TLSを使う</title>
		<link>http://blog.chibiegg.net/2011/11/22_09_630.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/22_09_630.htm#comments</comments>
		<pubDate>Tue, 22 Nov 2011 00:51:40 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[Webサーバー]]></category>
		<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[日記]]></category>
		<category><![CDATA[CAcert]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[SNI]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[TLS]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[証明書]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=630</guid>
		<description><![CDATA[今回はSSL(https)を使えるようにするような設定をnginxにしてみようと思います。 証明書の取得 本来はSECOMやVeriSign等に有料で証明してもらうのですが、今回は以前にも紹介したCACertを載せときま [...]]]></description>
			<content:encoded><![CDATA[<p>今回はSSL(https)を使えるようにするような設定をnginxにしてみようと思います。</p>
<h3>証明書の取得</h3>
<p>本来はSECOMやVeriSign等に有料で証明してもらうのですが、今回は以前にも紹介したCACertを載せときます。</p>
<ul>
<li><a title="CAcertから証明書をもらおう！(その0:紹介)" href="http://blog.chibiegg.net/2008/06/29_15_154.htm" target="_blank">CAcertから証明書をもらおう！(その0:紹介)</a></li>
<li><a title="CAcertから証明書をもらおう！(その1:アカウントの登録)" href="http://blog.chibiegg.net/2008/06/29_19_156.htm" target="_blank">CAcertから証明書をもらおう！(その1:アカウントの登録)</a></li>
<li><a title="CAcertから証明書をもらおう！(その2:鍵と申請書の作成)" href="http://blog.chibiegg.net/2008/06/29_20_163.htm" target="_blank">CAcertから証明書をもらおう！(その2:鍵と申請書の作成)</a></li>
<li><a title="CAcertから証明書をもらおう！(その3:CAcertから証明書をもらう)" href="http://blog.chibiegg.net/2008/06/29_20_164.htm" target="_blank">CAcertから証明書をもらおう！(その3:CAcertから証明書をもらう)</a></li>
</ul>
<p>ということで、証明書の取得は省略します。とりあえず、サーバーの秘密鍵 server.key と サーバーの証明書 server.cer が手に入った事にします。</p>
<h3>nginxに設定</h3>
<p>nginxでの設定は簡単で、既存の設定をコピーして、80番ではなく443番に変更し、SSLを有効にしてサーバーの鍵・証明書のファイルを指定してあげるだけです。</p>
<p>ちょっとその部分だけ書いてみます。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">server {
	listen   443 default_server ssl;
	server_name	_;
	ssl_certificate /keys/server.cer;
	ssl_certificate_key /keys/server.key;

	location / {
		この辺は適当に
	}
}</pre>
<p>リバースプロキシとしてnginxとして使っている場合も同様です。</p>
<h3>名前ベースのバーチャルホストを使っている場合</h3>
<p>ドメイン名を複数つかってバーチャルホストを使っている場合もあると思います。SSLではアクセスされたサーバー名がわかる前に証明書を渡さなければならないので、名前ベースのバーチャルホストでSSLは利用できませんでした。</p>
<p>が、SNI(Server Name Indication)というプロトコル拡張ができたので、名前ベースのバーチャルホストでも可能になりました。(ブラウザによっては対応してません)</p>
<p>設定は簡単で、httpと同じくserver_nameを設定するだけです。</p>
<p>リバースプロキシとして使っている場合は、証明書を変えるために、バーチャルホストの数だけServerディレクティブを作ってあげてください。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/22_09_630.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>nginxでプロキシ&amp;キャッシュサーバー</title>
		<link>http://blog.chibiegg.net/2011/11/17_10_616.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/17_10_616.htm#comments</comments>
		<pubDate>Thu, 17 Nov 2011 01:17:21 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[Webサーバー]]></category>
		<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[日記]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[tmpfs]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[リバースプロキシ]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=616</guid>
		<description><![CDATA[(多分)一般的なWebサーバーであるApacheは複雑な設定も可能で便利なのですが、その分重いのです。 どう重いのかというと、Apacheは一つのプロセスが一つのHTTPリクエストを同期処理で裁いてるのでその間は他の処理 [...]]]></description>
			<content:encoded><![CDATA[<p>(多分)一般的なWebサーバーであるApacheは複雑な設定も可能で便利なのですが、その分重いのです。</p>
<p>どう重いのかというと、Apacheは一つのプロセスが一つのHTTPリクエストを同期処理で裁いてるのでその間は他の処理をしません。なので、同時アクセス数が増えるとApacheはプロセスをどんどん生成します。(あるいは後からきたリクエストを待たせる)</p>
<p>なので、アクセス数が増えると急激にパフォーマンスが落ちるという問題を抱えてます。(ほかにもプロセスIDが足りなくなってどんなにリソースがあっても最大プロセスIDで制限されてしまう)</p>
<p>で、最近話題のハイパフォーマンスWebサーバーが<a title="nginx" href="http://wiki.nginx.org/Main" target="_blank">nginx</a>(えんじんえっくす)です。</p>
<p>nginxは一つのプロセスで複数のリクエストを非同期で同時に処理します。なので、アクセス数が増えてもパフォーマンスが落ちにくいという特性があります。特に静的ファイルの場合は処理のほとんどがI/O待ちなので効果が大きいです。</p>
<p>そこで、PHPとかSVNとか設定がめんどくさいものはApacheに任せておいて、静的なファイルだけをnginxに処理させてみると、Apacheへのリクエスト数は激減するはずです。</p>
<p>例えば、このブログのトップページの場合PHPで生成されるHTMLが一個にたいして、CSSや画像等の静的ファイルが20個近くあります。単純計算で21個のリクエストのうち1個だけがApacheで処理されるのでApacheへのリクエストは約95%削減されます。</p>
<p>では設定してみましょう。OSはUbuntu Server 10.04(64bit)です。Apacheは既にインストール済みで運用されているとします。設定後はnginxがポート80で待ち受けて、Apacheはポート8080で待ち受けるということにします。</p>
<p>(記事の最後でキャッシュファイルをRAMに置くというのもやってみます)</p>
<p><span id="more-616"></span></p>
<h3>nginxのインストール</h3>
<p>そのままaptitudeでインストールすると0.7.65がインストールされてしまうので、nginxのPPAを追加してからインストールします。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$ sudo add-apt-repository ppa:nginx/stable
$ sudo apt-get update
$ sudo install nginx</pre>
<p>設定ファイルは /etc/nginx/ にあります。sites-enableとかApacheに似た構造になっています。</p>
<h3>リバースプロキシの設定</h3>
<p>ではこの sites-enabled/default をこのように設定しましょう。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">upstream backend {
    server 127.0.0.1:8080;
}

server {
    listen   80;
    server_name _;
    location / {
        proxy_redirect                         off;
        proxy_set_header Host                $host;
        proxy_set_header X-Real-IP            $remote_addr;
        proxy_set_header X-Forwarded-Host    $host;
        proxy_set_header X-Forwarded-Server    $host;
        proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
        proxy_pass http://backend;

    }
}</pre>
<p>これはリバースプロキシに必要な設定だけです。すべてのアクセスをローカルのApacheに引き渡してます。</p>
<p>Apacheの方はports.confでリッスンポートを80から8080に変更し、各サイトの設定も80から8080に変更してください。そして、Apacheとnginxを再起動させます。(Apacheを先に8080にしてからnginxを起動させる)</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$ sudo /etc/init.d/apache restart
$ sudo /etc/init.d/nginx restart</pre>
<p>これでブラウザからアクセスすると、nginxを経由してApacheが処理します。ので、今までとかわらないはずです。</p>
<p>ところが、問題があって、Apacheのアクセスログを見るとアクセス元が127.0.0.1になっちゃってるはずです。これを解消するためにmod_rpafをインストールします。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$ sudo apt-get install libapache2-mod-rpaf</pre>
<p>これでApacheを再起動すると正しくアクセス元が扱われているはずです。実はこのためにnginxの設定に X-Real-IP をHTTPヘッダに追加する設定やらを書いているのです。mod_rpafはプロキシサーバーが追加した X-Real-IP ヘッダをアクセス元として扱うモジュールです。</p>
<p>mod_rpafは127.0.0.1からのアクセスだけに対して処理をするのでもし、リバースプロキシが他のホストにあるのであれば /etc/apache2/mods-enabled/rpaf.conf の RPAFproxy_ips をリバースプロキシサーバーのIPアドレスに変更してください。(すべてのX-Real-IPを信用するとアクセス元の偽装ができてしまうためです)</p>
<h3>プロキシキャッシュ</h3>
<p>では、元々の目標であった静的ファイルをnginxでホストする設定をしましょう。本来はnginxが静的ファイルを直接ディスクから取ってくるのがいいのですが、nginxがApacheと違うホストにある場合も考えられますのでその場合でも対応できるように、静的ファイルへのアクセスをキャッシュしておき、2回目以降の同じファイルへのアクセスはApacheに引き渡さないように設定してみます。</p>
<p>defaultをこのように編集してみます。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">
proxy_cache_path /var/cache/nginx/static_file_cache levels=1:2 keys_zone=cache_static_file:128m inactive=7d max_size=512m;
proxy_temp_path /var/cache/nginx/temp;

upstream backend {
    server 127.0.0.1:8080;
}

server {
    listen   80;
    server_name _;
    location / {
        proxy_redirect                         off;

        set $do_not_cache 0;
        if ($request_method != GET) {
            set $do_not_cache 1;
        }
        if ($uri !~* ".(jpg|png|gif|jpeg|css|js|swf|pdf|html|htm)$") {
            set $do_not_cache 1;
        }
        proxy_no_cache     $do_not_cache;
        proxy_cache_bypass $do_not_cache;
        proxy_cache cache_static_file;
        proxy_cache_key $scheme$host$uri$is_args$args;
        proxy_cache_valid  200 2h;
        proxy_cache_valid  any 1m;

        proxy_set_header Host                $host;
        proxy_set_header X-Real-IP            $remote_addr;
        proxy_set_header X-Forwarded-Host    $host;
        proxy_set_header X-Forwarded-Server    $host;
        proxy_set_header X-Forwarded-For        $proxy_add_x_forwarded_for;
        proxy_pass http://backend;
    }
}</pre>
<p>この設定ではメモリ128M,ファイル最大512Mで、7日間キャッシュするファイルを /var/cache/nginx/static_file_cache に作成してます。</p>
<p>そして、do_not_cache 変数を用意して、0にしておき、GETでのアクセスでない場合と、静的ファイルでは無い場合にキャッシュしないようにその場合は do_not_cache を1にして、proxy_no_cacheを有効にしてます。静的ファイルの判断は正規表現でURLの拡張子を見ています。(注意しなければいけないのが、WordPressのページをパーマネントリンクで.htmlにしている場合です。その場合はキャッシュされないように外しておく必要があります。)</p>
<p>つまり、静的ファイルにGETでアクセスしたものだけキャッシュされます。</p>
<p>proxy_cache_valid はどのステータスのレスポンスをどの期間キャッシュするかを設定する項目で、この場合200なら2<br />
時間、それ以外なら1分キャッシュすることになります。</p>
<p>あとは /var/cache/nginx/ ディレクトリを作成し nginx を再起動するだけです。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">$ sudo mkdir /var/cache/nginx
$ sudo /etc/init.d/nginx restart</pre>
<p>それでしばらくブラウザからアクセスしてみると、キャッシュディレクトリの容量が増えているはずです。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">
$ sudo du -ch /var/cache/nginx/static_file_cache
(中略)
91M	/var/cache/nginx/static_file_cache
91M	合計
</pre>
<p>本当にApacheへのアクセスが減っているのかは、Apacheのアクセスログをみてみてください。</p>
<h3>さらに一歩</h3>
<p>もう一歩高速化してみましょう。いまキャッシュファイルは/var/cache/nginxに置かれているので、結局キャッシュからの呼び出しのためにHDDアクセスすることになります。こいつを全部メモリ上においてしまいましょう。</p>
<p><strong><span style="color: #ff0000">間違えたり、問題が発生するとシステムに問題が起きるかもしれないのでわからないor不安ならやらないほうがいいです。</span></strong></p>
<p>tmpfsを使えば、メモリ上の領域をファイルシステムにマウントすることができます。</p>
<p>/etc/fstab に次の一行を追加してOSを再起動します。</p>
<pre class="brush: c; auto-links: true; collapse: false; gutter: true; first-line: 1; highlight: []; html-script: false; light: false; pad-line-numbers: false; toolbar: true'">
tmpfs	/var/cache/nginx	tmpfs	defaults,noatime,mode=1777	0	0
</pre>
<p>そうすると、/var/cache/nginx ディレクトリはRAM上に配置されます。</p>
<p>が、うちのサーバーはSSDにしてあったので効果はわかりませんでした。が、SSDの寿命を延ばす効果はあると思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/17_10_616.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPressを速くするにはキャッシュしかない！</title>
		<link>http://blog.chibiegg.net/2011/11/16_23_612.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/16_23_612.htm#comments</comments>
		<pubDate>Wed, 16 Nov 2011 14:44:48 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=612</guid>
		<description><![CDATA[漸くわかりました。PHPを速くするのは限界があるみたいで、生成したHTMLをキャッシュしとくしかないみたいです。 で、Quick Cacheプラグインをインストールして有効にすると改善しました。 レイテンシ12ms、転送 [...]]]></description>
			<content:encoded><![CDATA[<p>漸くわかりました。PHPを速くするのは限界があるみたいで、生成したHTMLをキャッシュしとくしかないみたいです。</p>
<p>で、Quick Cacheプラグインをインストールして有効にすると改善しました。</p>
<div id="attachment_613" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/quick_cache.png"><img class="size-medium wp-image-613" src="http://blog.chibiegg.net/files/2011/11/quick_cache-500x264.png" alt="WordPress with Quick Cache" width="500" height="264" /></a><p class="wp-caption-text">WordPress with Quick Cache</p></div>
<p>レイテンシ12ms、転送4msです。</p>
<p>ハードウエアのスペックでごり押しはだめですね。ちゃんとキャッシュできるところはしましょうってことです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/16_23_612.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressはどうすれば速くなるのか、検証実験</title>
		<link>http://blog.chibiegg.net/2011/11/16_22_603.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/16_22_603.htm#comments</comments>
		<pubDate>Wed, 16 Nov 2011 13:52:36 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[日記]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VPS]]></category>
		<category><![CDATA[さくら]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=603</guid>
		<description><![CDATA[さっきの投稿でWordPressが遅い事を書きました。で、先輩のさくらのVPS(nginx+fastcgi)では速いってことも書きました。 ということで、僕も借りてるさくらのVPSで一からセットアップして実験してみました [...]]]></description>
			<content:encoded><![CDATA[<p>さっきの投稿でWordPressが遅い事を書きました。で、先輩のさくらのVPS(nginx+fastcgi)では速いってことも書きました。</p>
<p>ということで、僕も借りてるさくらのVPSで一からセットアップして実験してみました。OSはデフォルトではなくUbuntu 10.04が入ってます。</p>
<p>今回検証したのは、WebサーバーはApache/2.2.14とnginx/1.0.9、RDBMはMySQL(Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (x86_64) using readline 6.1)とPostgreSQL/8.4.9です。なので、合計4通りですね。</p>
<p>Apacheではmod_phpで、nginxでは後ろでspawn-fcgiが動いてます。</p>
<p>で、試してみた結果です。今回検証したいのは静的ファイルではなくPHPの出力なので、画像とかCSSがブラウザでキャッシュされてたりするのは気にしないでください。</p>
<div id="attachment_604" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/apache_mysql.png"><img class="size-medium wp-image-604" src="http://blog.chibiegg.net/files/2011/11/apache_mysql-500x290.png" alt="Apache + MySQL + WordPress" width="500" height="290" /></a><p class="wp-caption-text">Apache + MySQL + WordPress</p></div>
<div id="attachment_605" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/apache_psql.png"><img class="size-medium wp-image-605" src="http://blog.chibiegg.net/files/2011/11/apache_psql-500x290.png" alt="Apache + PostgreSQL + WordPress" width="500" height="290" /></a><p class="wp-caption-text">Apache + PostgreSQL + WordPress</p></div>
<div id="attachment_606" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/nginx_mysql.png"><img class="size-medium wp-image-606" src="http://blog.chibiegg.net/files/2011/11/nginx_mysql-500x290.png" alt="nginx + MySQL + WordPress" width="500" height="290" /></a><p class="wp-caption-text">nginx + MySQL + WordPress</p></div>
<div id="attachment_607" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/nginx_psql.png"><img class="size-medium wp-image-607" src="http://blog.chibiegg.net/files/2011/11/nginx_psql-500x290.png" alt="nginx + PostgreSQL + WordPress" width="500" height="290" /></a><p class="wp-caption-text">nginx + PostgreSQL + WordPress</p></div>
<p>平均もとってない1回こっきりのアクセスの結果なので互いの比較はそんなに意味がないです。</p>
<p>が、どれもレイテンシが数百ミリ秒あります。これは何回試しても同じでした。</p>
<p>あれ？&#8230;</p>
<p>先輩のVPSと同じ環境のはずなのになんでこんなに違うの？</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/16_22_603.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPressが遅い&#8230;なぜ？</title>
		<link>http://blog.chibiegg.net/2011/11/16_20_596.htm</link>
		<comments>http://blog.chibiegg.net/2011/11/16_20_596.htm#comments</comments>
		<pubDate>Wed, 16 Nov 2011 11:10:42 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[日記]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[FastCGI]]></category>
		<category><![CDATA[Memcached]]></category>
		<category><![CDATA[mod_php]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=596</guid>
		<description><![CDATA[最近サーバーの設定を変えたり、リバースプロキシをしてる、HTTPのフロントをApacheからnginxに変えたり高速化を試みています。 が、どうしてもこのブログ(にかぎらず、稼働しているWordPress全部)が重い、と [...]]]></description>
			<content:encoded><![CDATA[<p>最近サーバーの設定を変えたり、リバースプロキシをしてる、HTTPのフロントをApacheからnginxに変えたり高速化を試みています。</p>
<p>が、どうしてもこのブログ(にかぎらず、稼働しているWordPress全部)が重い、というより遅いのです。<br />
Memcachedでオブジェクトをキャッシュしてみたりしても改善されず&#8230;</p>
<p>で、Safariで開発ツールの「ネットワーク」をつかって取得の時間を見てみました。</p>
<div id="attachment_597" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/network_before.png"><img class="size-medium wp-image-597" src="http://blog.chibiegg.net/files/2011/11/network_before-500x289.png" alt="Apache(mod_php) + WordPress 処理時間" width="500" height="289" /></a><p class="wp-caption-text">Apache(mod_php) + WordPress ネットワーク時間</p></div>
<p>ここでPHPのファイルへのアクセスのレイテンシが334msもあることに気づきました。稼働しているどのWordPressもです。</p>
<p>で、WordPressはそうなのかと、さくらのVPSで運用してる先輩のWordPressを見てみると&#8230;</p>
<p>&nbsp;</p>
<div id="attachment_600" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2011/11/wordpress_fast.png"><img class="size-medium wp-image-600" src="http://blog.chibiegg.net/files/2011/11/wordpress_fast-500x318.png" alt="さくらのVPS nginx + WordPress(fast-cgi)" width="500" height="318" /></a><p class="wp-caption-text">さくらのVPS nginx + WordPress(fast-cgi)</p></div>
<p>速い&#8230;.レイテンシ45msです。静的ファイルはうちのサーバーのほうがレイテンシ含め速いので(どちらも304なので比較していいかな)、ネットワーク等の問題ではないみたい。</p>
<p>(あと、向こうはnginx+fastcgi(swanかな？)+WordPressですが、うちでもnginx+fastcgiにしてみたけど改善せず&#8230;)</p>
<p>なんで？</p>
<p>とりあえず、僕も借りてるさくらのVPSでDBをMySQLからPostgreSQLにしてみたり、いろいろ実験してみます。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2011/11/16_20_596.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntuでレンタルサーバ その2</title>
		<link>http://blog.chibiegg.net/2010/12/31_14_586.htm</link>
		<comments>http://blog.chibiegg.net/2010/12/31_14_586.htm#comments</comments>
		<pubDate>Fri, 31 Dec 2010 05:01:04 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[ProFTPD]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=586</guid>
		<description><![CDATA[前回に引き続き、今回はProFTPdをセットアップし、MySQLのテーブルに記録されたユーザー情報で認証できるようにします。 まずはProFTPdのセットアップから。proftpdをapt-getでinstallするとp [...]]]></description>
			<content:encoded><![CDATA[<p>前回に引き続き、今回はProFTPdをセットアップし、MySQLのテーブルに記録されたユーザー情報で認証できるようにします。</p>
<p>まずはProFTPdのセットアップから。proftpdをapt-getでinstallするとproftpdの設定画面が出ます。</p>
<div id="attachment_589" class="wp-caption aligncenter" style="width: 510px"><a href="http://blog.chibiegg.net/files/2010/12/proftpd.png"><img class="size-medium wp-image-589" src="http://blog.chibiegg.net/files/2010/12/proftpd-500x312.png" alt="ProFTPd セットアップ" width="500" height="312" /></a><p class="wp-caption-text">ProFTPd セットアップ</p></div>
<p>固定IPではないのでIPマスカレードを利用しないといけませんが、そのためにもスタンダードアローンではなくinetd経由にします。</p>
<p>それでは /etc/proftpd/proftpd.conf を書き換えていきます。</p>
<ul>
<li>ServerName を好きな文字列に</li>
<li>ListOptions を &#8220;-l&#8221; に &#8220;-la&#8221; に</li>
<li>PassivePorts をコメントアウトして ポート範囲を決定(デフォルトは49152 65534)</li>
<li>MasqueradeAddress を コメントアウトして hogehoge.net(ドメイン名)に</li>
<li>ServerIdent を off で追加</li>
<li>RootLogin を off に</li>
<li>DefaultRoot を ~ に</li>
<li>RequireValidShell を off に</li>
</ul>
<p>ここまではMySQLによる認証は関係ありません。これからMySQLで認証するための設定を追記します。この部分は「<a title="ProFTPD　～ MySQL + quota 編 ～" href="http://kikuz0u.x0.com/memo/hiki.cgi?ProFTPD%A1%A1%A1%C1+MySQL+%2B+quota+%CA%D4+%A1%C1" target="_blank">にわか鯖管のメモ &#8211; ProFTPD　～ MySQL + quota 編 ～</a>」をもとにというかそのまま。</p>
<p>注意点はmodule.confをいじったときは sudo /etc/init.d/proftpd reload をしないとだめってとこです。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2010/12/31_14_586.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntuでレンタルサーバ その1</title>
		<link>http://blog.chibiegg.net/2010/12/30_23_583.htm</link>
		<comments>http://blog.chibiegg.net/2010/12/30_23_583.htm#comments</comments>
		<pubDate>Thu, 30 Dec 2010 14:12:39 +0000</pubDate>
		<dc:creator>chibiegg</dc:creator>
				<category><![CDATA[サーバー管理]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[サーバー]]></category>

		<guid isPermaLink="false">http://blog.chibiegg.net/?p=583</guid>
		<description><![CDATA[今日からUbuntuでレンタルサーバを構築するまでの記録を載せようと思います。まぁ気力が続けばですけど。 それと、メモみたいなもので解説はたぶんしないとおもいます。LinuxをCUIで使えるぐらいの知識がないともしかする [...]]]></description>
			<content:encoded><![CDATA[<p>今日からUbuntuでレンタルサーバを構築するまでの記録を載せようと思います。まぁ気力が続けばですけど。</p>
<p>それと、メモみたいなもので解説はたぶんしないとおもいます。LinuxをCUIで使えるぐらいの知識がないともしかすると読めないかもしれないです。解説でなく日記ですね。</p>
<p>レンタルサーバといっても身内、友人、後輩などに貸してるだけですのであまりセキュリティ、特にユーザー間のセキュリティはよろしくない設定をしていくかもしれませんのでそういう意味でもあまり当てにはしないでくださいね。</p>
<p>で、なぜいまさらサーバー構築なのかということなのです。普段はMac OSX Serverの上でこのページ含め個人のサーバと上記のレンタル部分とを稼動させているのですが、いわゆる公私混同の部分の管理がめんどくさくなってきた(なんとなくしんどくなってきた)ので他人の分は仮想環境のUbuntuに移動させてしまおうと思い立ったわけです。</p>
<p>で現状は、Ubuntu 10.04 ServerをLAMP + SSHのみでインストールしたまでです。</p>
<p>このあとユーザー情報をMySQLで管理してユーザーごとにApacheのバーチャルホストを設定し、proftpdはMySQL上の情報で認証できるようにしていくことが目標です。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.chibiegg.net/2010/12/30_23_583.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

