nginxでSSL/TLSを使う

今回はSSL(https)を使えるようにするような設定をnginxにしてみようと思います。

証明書の取得

本来はSECOMやVeriSign等に有料で証明してもらうのですが、今回は以前にも紹介したCACertを載せときます。

ということで、証明書の取得は省略します。とりあえず、サーバーの秘密鍵 server.key と サーバーの証明書 server.cer が手に入った事にします。

nginxに設定

nginxでの設定は簡単で、既存の設定をコピーして、80番ではなく443番に変更し、SSLを有効にしてサーバーの鍵・証明書のファイルを指定してあげるだけです。

ちょっとその部分だけ書いてみます。

server {
	listen   443 default_server ssl;
	server_name	_;
	ssl_certificate /keys/server.cer;
	ssl_certificate_key /keys/server.key;

	location / {
		この辺は適当に
	}
}

リバースプロキシとしてnginxとして使っている場合も同様です。

名前ベースのバーチャルホストを使っている場合

ドメイン名を複数つかってバーチャルホストを使っている場合もあると思います。SSLではアクセスされたサーバー名がわかる前に証明書を渡さなければならないので、名前ベースのバーチャルホストでSSLは利用できませんでした。

が、SNI(Server Name Indication)というプロトコル拡張ができたので、名前ベースのバーチャルホストでも可能になりました。(ブラウザによっては対応してません)

設定は簡単で、httpと同じくserver_nameを設定するだけです。

リバースプロキシとして使っている場合は、証明書を変えるために、バーチャルホストの数だけServerディレクティブを作ってあげてください。

 

 

nginxでプロキシ&キャッシュサーバー

(多分)一般的なWebサーバーであるApacheは複雑な設定も可能で便利なのですが、その分重いのです。

どう重いのかというと、Apacheは一つのプロセスが一つのHTTPリクエストを同期処理で裁いてるのでその間は他の処理をしません。なので、同時アクセス数が増えるとApacheはプロセスをどんどん生成します。(あるいは後からきたリクエストを待たせる)

なので、アクセス数が増えると急激にパフォーマンスが落ちるという問題を抱えてます。(ほかにもプロセスIDが足りなくなってどんなにリソースがあっても最大プロセスIDで制限されてしまう)

で、最近話題のハイパフォーマンスWebサーバーがnginx(えんじんえっくす)です。

nginxは一つのプロセスで複数のリクエストを非同期で同時に処理します。なので、アクセス数が増えてもパフォーマンスが落ちにくいという特性があります。特に静的ファイルの場合は処理のほとんどがI/O待ちなので効果が大きいです。

そこで、PHPとかSVNとか設定がめんどくさいものはApacheに任せておいて、静的なファイルだけをnginxに処理させてみると、Apacheへのリクエスト数は激減するはずです。

例えば、このブログのトップページの場合PHPで生成されるHTMLが一個にたいして、CSSや画像等の静的ファイルが20個近くあります。単純計算で21個のリクエストのうち1個だけがApacheで処理されるのでApacheへのリクエストは約95%削減されます。

では設定してみましょう。OSはUbuntu Server 10.04(64bit)です。Apacheは既にインストール済みで運用されているとします。設定後はnginxがポート80で待ち受けて、Apacheはポート8080で待ち受けるということにします。

(記事の最後でキャッシュファイルをRAMに置くというのもやってみます)

Read more …

WordPressを速くするにはキャッシュしかない!

漸くわかりました。PHPを速くするのは限界があるみたいで、生成したHTMLをキャッシュしとくしかないみたいです。

で、Quick Cacheプラグインをインストールして有効にすると改善しました。

WordPress with Quick Cache

WordPress with Quick Cache

レイテンシ12ms、転送4msです。

ハードウエアのスペックでごり押しはだめですね。ちゃんとキャッシュできるところはしましょうってことです。

WordPressはどうすれば速くなるのか、検証実験

さっきの投稿でWordPressが遅い事を書きました。で、先輩のさくらのVPS(nginx+fastcgi)では速いってことも書きました。

ということで、僕も借りてるさくらのVPSで一からセットアップして実験してみました。OSはデフォルトではなくUbuntu 10.04が入ってます。

今回検証したのは、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通りですね。

Apacheではmod_phpで、nginxでは後ろでspawn-fcgiが動いてます。

で、試してみた結果です。今回検証したいのは静的ファイルではなくPHPの出力なので、画像とかCSSがブラウザでキャッシュされてたりするのは気にしないでください。

Apache + MySQL + WordPress

Apache + MySQL + WordPress

Apache + PostgreSQL + WordPress

Apache + PostgreSQL + WordPress

nginx + MySQL + WordPress

nginx + MySQL + WordPress

nginx + PostgreSQL + WordPress

nginx + PostgreSQL + WordPress

平均もとってない1回こっきりのアクセスの結果なので互いの比較はそんなに意味がないです。

が、どれもレイテンシが数百ミリ秒あります。これは何回試しても同じでした。

あれ?…

先輩のVPSと同じ環境のはずなのになんでこんなに違うの?

WordPressが遅い…なぜ?

最近サーバーの設定を変えたり、リバースプロキシをしてる、HTTPのフロントをApacheからnginxに変えたり高速化を試みています。

が、どうしてもこのブログ(にかぎらず、稼働しているWordPress全部)が重い、というより遅いのです。
Memcachedでオブジェクトをキャッシュしてみたりしても改善されず…

で、Safariで開発ツールの「ネットワーク」をつかって取得の時間を見てみました。

Apache(mod_php) + WordPress 処理時間

Apache(mod_php) + WordPress ネットワーク時間

ここでPHPのファイルへのアクセスのレイテンシが334msもあることに気づきました。稼働しているどのWordPressもです。

で、WordPressはそうなのかと、さくらのVPSで運用してる先輩のWordPressを見てみると…

 

さくらのVPS nginx + WordPress(fast-cgi)

さくらのVPS nginx + WordPress(fast-cgi)

速い….レイテンシ45msです。静的ファイルはうちのサーバーのほうがレイテンシ含め速いので(どちらも304なので比較していいかな)、ネットワーク等の問題ではないみたい。

(あと、向こうはnginx+fastcgi(swanかな?)+WordPressですが、うちでもnginx+fastcgiにしてみたけど改善せず…)

なんで?

とりあえず、僕も借りてるさくらのVPSでDBをMySQLからPostgreSQLにしてみたり、いろいろ実験してみます。

 

 

Ubuntuでレンタルサーバ その2

前回に引き続き、今回はProFTPdをセットアップし、MySQLのテーブルに記録されたユーザー情報で認証できるようにします。

まずはProFTPdのセットアップから。proftpdをapt-getでinstallするとproftpdの設定画面が出ます。

ProFTPd セットアップ

ProFTPd セットアップ

固定IPではないのでIPマスカレードを利用しないといけませんが、そのためにもスタンダードアローンではなくinetd経由にします。

それでは /etc/proftpd/proftpd.conf を書き換えていきます。

  • ServerName を好きな文字列に
  • ListOptions を “-l” に “-la” に
  • PassivePorts をコメントアウトして ポート範囲を決定(デフォルトは49152 65534)
  • MasqueradeAddress を コメントアウトして hogehoge.net(ドメイン名)に
  • ServerIdent を off で追加
  • RootLogin を off に
  • DefaultRoot を ~ に
  • RequireValidShell を off に

ここまではMySQLによる認証は関係ありません。これからMySQLで認証するための設定を追記します。この部分は「にわか鯖管のメモ – ProFTPD ~ MySQL + quota 編 ~」をもとにというかそのまま。

注意点はmodule.confをいじったときは sudo /etc/init.d/proftpd reload をしないとだめってとこです。

Ubuntuでレンタルサーバ その1

今日からUbuntuでレンタルサーバを構築するまでの記録を載せようと思います。まぁ気力が続けばですけど。

それと、メモみたいなもので解説はたぶんしないとおもいます。LinuxをCUIで使えるぐらいの知識がないともしかすると読めないかもしれないです。解説でなく日記ですね。

レンタルサーバといっても身内、友人、後輩などに貸してるだけですのであまりセキュリティ、特にユーザー間のセキュリティはよろしくない設定をしていくかもしれませんのでそういう意味でもあまり当てにはしないでくださいね。

で、なぜいまさらサーバー構築なのかということなのです。普段はMac OSX Serverの上でこのページ含め個人のサーバと上記のレンタル部分とを稼動させているのですが、いわゆる公私混同の部分の管理がめんどくさくなってきた(なんとなくしんどくなってきた)ので他人の分は仮想環境のUbuntuに移動させてしまおうと思い立ったわけです。

で現状は、Ubuntu 10.04 ServerをLAMP + SSHのみでインストールしたまでです。

このあとユーザー情報をMySQLで管理してユーザーごとにApacheのバーチャルホストを設定し、proftpdはMySQL上の情報で認証できるようにしていくことが目標です。

マイコン徹底入門

だいぶ紹介が遅くなってしまいましたが、大変便利な本なので紹介します。

いまAVRとともにメインで使おうとしているSTM32ですが、とっつきにくい原因としてはその莫大な周辺機能のせいで分かりにくいレジスタ。これはライブラリが用意されていているのですが、今度は資料が少ないためどうやって使えばいいのかわからない、ということにあると思います。

事実コンパイルして動作させるまでにかなりの時間を要しました。(ストロベリーリナックスで用意されているサンプルをmakeするだけならできたが動作原理が捉えにくかった)

それを解決する本が徹底マイコン入門(http://miqn.net/)です。実はかなり前に作者の方から相互リンクのお誘いを頂きリンクしておりました。

1ヶ月ほど前からホームページで90日間原稿全てをPDFで閲覧できる企画をなさっているので早速申し込みさせていただき、一ヶ月ほどこの本を頼りにSTM32をいじってきました。

プロジェクトの関係でなかなか時間が取れずレビューを書く事が遅れてしまいました。

で、この本の良いところはマイコン初心者に対しても細かな説明がされており、基礎から学習する(C言語はあるていど理解できているレベルから)のにも対応でき、さらに使いこなすようになってからもリファレンスとして使いやすい構成になっている点です。なかなか両方に対応するのは難しいところですがどちらから見ても便利だと思います。(特に後者については体感しました)

しかも、CANなどのマイナーどころはないにしてもSTM32のほとんどの周辺機能をカバーしており、さらによく使われるモジュール等(i2c液晶、フルカラー液晶やEEPROMなど)、の解説もありすごく便利です。

(かなりニッチな要望ですがCANの解説も欲しいです!)

是非とも発売されたときには部室と自宅に一冊ずつ欲しいなぁと。

近々STM32で作ったライントレーサーの動画をアップします。初めてPID制御にチャレンジしたのでかなりなめらかな動きとなっております。

東北旅行3日目

東北旅行3日目です。
この日は道の駅「とうわ」にて停泊しました。

道の駅「とうわ」

道の駅「とうわ」

まず最初の目的地はかつてカッパが多く住み、人々を驚かしたという伝説がのこる遠野のカッパ淵でしたが、途中で土木学会推薦のめがね橋を見学。(昭和18年改修)

めがね橋

めがね橋

その後カッパ淵へ、

カッパ淵

カッパ淵

カッパ淵のすぐそばでKIRINのホップ農場を発見。こんなところでつくってたとは。

KIRINのホップ農園

KIRINのホップ農園


ホップ

ホップ

この後遠野の道の駅「風の丘」に寄るとハネの形が変わった風車が建っていた。

道の駅「風の丘」

道の駅「風の丘」

こいつの風車は本体だけでなくハネ?の一本一本も回転する。(帰宅したら動画をアップする予定)

で、次は小岩井農場まきば園へ。ずっと小岩井牧場だと思ってたけれど小岩井農場だったらしい。

小岩井農場まきば園

小岩井農場まきば園


例によって例の如く小岩井農場の牛乳とのむヨーグルト。
小岩井農場の牛乳と飲むヨーグルト

小岩井農場の牛乳と飲むヨーグルト

ここで、おみやげを購入。

で、次に訪れたのは日本で最初の地熱発電所である松川地熱発電所へ。

松川地熱発電所

松川地熱発電所

大きな牛乳のビンみたいな建物は使った蒸気を冷却し水に戻す施設。
温泉が湧き出ているので川は沈殿成分でいっぱい。

で、そこで見たビデオに写っていた八幡平に行きたくなったので八幡平の樹海ラインへ。

八幡平 その1

八幡平 その1


八幡平 その2

八幡平 その2

か細い回線で書くのがしんどいのでほとんどコメントが無いけれど、これにて3日目の日記は終了。

東北旅行2日目

東北旅行2日目です。
台風上陸もあるので今日は予定を変更してあまり移動しないことにしました。ので、宮城は明日になります。

昨日から今日にかけて停泊していたのは道の駅「上品の郷」です。温泉もついていていい場所です。

道の駅「上品の郷」

道の駅「上品の郷」

で、今日はまず気仙沼漁港に行きました。

気仙沼漁港 その1

気仙沼漁港 その1

二階から見学できるスペースがあるのでたくさんマグロやサメが並んでいるのや、積み下ろし作業も見ることができました。

気仙沼漁港 その2

気仙沼漁港 その2

ここの販売所にある食堂の丼が大変美味しかったです。(後日写真掲載予定)

で、その次に向かったのが厳美渓。

厳美渓 その1

厳美渓 その1

厳美渓 その2

厳美渓 その2

あんまり画像を上げるのでしんどいのでコメントが少なくてすいません。

その後中尊寺に行ったのですが金色堂は撮影禁止でしたので本堂の写真です。

中尊寺本堂

中尊寺本堂

ここで大雨になってきたため次の停泊地へ。

現在小雨ですが、台風は半分過ぎ去ったようでこれ以上ひどくならないようです。

そうそう、今日銭湯で京都日報ならぬ岩手日報を発見。(ただそれだけです)

ではまた明日。