Windows 10/8/7/Vista で自宅サーバー

Windows PC + IIS のクライアント版で自宅サーバーを構築してみるという話です。Windows XP から windows Vista になって、IIS のクライアント版の制限(IIS の機能制限)が少なくなり、小規模な Web サーバーであれば問題なく動作させることができるようになりました。また、目立たない部分ですが、ファイアウォール、タスクスケジューラという Web サーバーで利用する機能も大きく進歩して運用もしやすくなっています。ハードウェア面でも、Intel Atom や省電力版 Core i の出現で低消費電力にかかわらず小規模な Web サーバーに必要十分な性能を持ったマシンを入手することも容易になりました(私が運用している自宅サーバーについてのメモ)。日本は、電力や通信回線のインフラは安定しているので、windows PC + IIS で自宅(自社)サーバーを構築してしまうのも一つの方法だと思うので、検討した内容や具体的な操作の手順をメモしておきました。

最近は、Microsoft Azure や Amazon Web Service 等のクラウドサービスやホスティングサーバーが整ってきたので、自宅サーバーのメリットも減少してきました。また、Visual Studio や WebMatrix を使えば IIS をインストールしなくても Web サイトの開発が可能ですが、windows PC の IIS は、基本的には Windows Server に付属している IIS と同じなので、その経験は、Windows Server を使う場合に活かすことができます。

自宅(自社)サーバーの設定手順は、以下のようになりますが、イントラネットサーバーと比較して、ネットワークとセキュリティ設定の知識が少し必要なだけだというのがわかりました。Windows PC + IIS を使用して、自宅(自社)サーバーにすれば、日頃から使い慣れているOSを利用するので、新たに覚えなければいけないことが少なくなるというのは大きなメリットです。

  1. ルータ、サーバ、回線、ドメイン等の用意
  2. IIS をインストール
  3. SQL Server Express のインストール
  4. PHP のインストール
  5. MySQL のインストール
  6. FTP サーバーのインストール
  7. Umbracoのインストール
  8. ルータの設定
  9. Dynamic DNSの設定

以下に、Windows PC で自宅(自社)サーバーが可能かどうか調べた内容を書いておきます。

1. Windows 10/8/7/Vista のIISで自宅サーバを構築しても大丈夫?

Windows PC で自宅(自社)サーバを構築する場合には、マイクロソフトのライセンスに違反しないかどうかということと、セキュリティ面で問題がないかということの2点が問題になると思います。

まず、ライセンスの問題ですが、Windows ライセンスを読むと、インターネットの情報サービスに該当すると考えられ、接続台数がWindows 8 / 7 の場合は20台、Vista は10台(Vista Home Basic は5台)までであれば問題はありません。なお、商用のホスティングサービスをすることは、禁止されています。アクセスの多いサイトでなければ、同時接続台数が20台を超えるようになることはないので安心して自宅サーバーを構築できます。Windows/日本語/無料で始める自宅サーバーのWindowsサーバーとライセンスに明確な説明があるので参考にしてください。

Home Server 2011 を使うという選択肢もあるのですが、Windows 8 / 7 の場合と違って、10個の指定されたアカウントにアクセスの許可が与えられているので、不特定多数からのアクセスをさせてもいいという解釈は難しいので公開用サーバーとして利用するのは難しいと思います。1万円以下で購入でき、ビデオや音楽の共有が簡単にできるというメリットがあるので、家族や少数の友人と情報を共有したい場合には勧められると思います。

次にセキュリティ面ですが、Vista SP2 以降であれば、Windows Server 2008 と基本的に同じモジュールを使用しており、サーバー機能が最適化されていないため、性能は劣るものの、基本機能は同じになので、セキュリティ的にレベルが低いということは考えられません( Windows 7 で利用できる Webサーバの役割サービス IIS 7.0 Features and Vista Editions 柔軟性と機能性を大幅に高めたIIS 7.0 クライアント版Windowsに付属するIISの制限を参照)。ということで、現時点では、もはや Windows PC のIISがセキュリティ面で劣っているということはありません。ただし、注意したいのは、Windows PC の IIS 自体がもともと開発者向けの機能であり、セキュリティを確保するためにはそれ相応の技術力が必要になるということです。

※Windows 7 使用許諾契約書の抜粋

ユーザーの数 本ライセンス条項に別途規定されている場合を除き、本ソフトウェアは一度に 1 人のユーザーに限り使用することができます。

デバイスの接続 お客様は、ファイルサービス、プリントサービス、インターネットの情報サービス、インターネット接続共有サービスおよびテレフォニーサービスのみを利用するために、ライセンスを取得したコンピューターにインストールされた本ソフトウェアに対し 、最大 20 台の他のデバイスからの接続を許可することができます。

※Windows Home Server 2011 使用許諾契約書の抜粋

サーバー ソフトウェアの使用。お客様は、最大 10 個のアカウントを使用することができます。各アカウントでは、指定されたユーザーによる当該サーバー上のサーバー ソフトウェアへのアクセスおよびその使用を許可します。

サーバーの役割。お客様は、サーバー セットアップ プロセス時に既に有効にされている役割を除き、サーバーの役割を使用できません。

2. ホスティングサーバーと自宅サーバーのどちらを選択すべき

WordPress でホームページを作りたいというような通常の利用では、廉価な共用ホスティングサーバー(レンタルサーバー)を利用することをお勧めします。

また、Microsoft Azure では、Web アプリを 10 個まで無料で利用することができます。独自ドメインは利用できませんが、始めて Web サイトを立ち上げた時のテストに利用するのであれば十分だと思います。また、起業したときには Microsoft BizSpark を利用すれば 3年間無料で Windows Azure を毎月 15,000円分利用することができます。

一方、安価な共用サーバーでは、自分の好きな実行ファイルを走らせるというようなことはできないので、そういう場合でクラウドや仮想(VPS)サーバーのコストを負担するだけの余裕がない場合には、Windows PC による自宅(自社)サーバーを選択するメリットがあります。

セキュリティ面でホスティングサーバーが優れているという意見がありますが、ASP.NET や PHP を使用するのであれば、ホスティングサーバーの場合でもアプリケーションのセキュリティには十分に注意が必要です。自宅サーバーの場合、ホスティングサーバーと比較して余計に注意する必要があるのは、以下のような点だと思うので、HTMLの静的ファイルのみのでサーバーを構築する場合は別にして、ホスティングサーバーの方が相当優れているというわけではありません。

  • ルータのポートフォワーディング機能を利用して、外部からの接続はHTTP(必要であればHTTPS)のポートだけを公開する。
  • サーバーのファイアーウォール機能も有効にしておき、必要なポートのみを開くようにする。
  • 動作しているサービスを確認し、不要なものは動かさないようにする。
  • OS、アプリケーションのアップデートをこまめにおこなう。
  • ログを見る習慣をつける。
  • ウィルス対策ソフトをインストールしておく。
  • サーバーには、公開用以外の余分なファイルを置かない。
  • サーバーが故障した場合に直ぐに対応できるように事前に準備しておく。

共用のホスティングサーバーと比較して自宅サーバーのメリットとして、以下のような点があります。自宅サーバーの管理は大変ですが、その分楽しみも多くあります。

  • ファイルのアップロードやバックアップのスピードが速い。
  • ホスティングサーバーでは業者の設定したコントロールパネルを使用して設定をする必要があるが、自宅サーバーではローカルで作業ができるので、レスポンスがよいし、多様なツールが利用可能である。
  • 自分で環境を設定できるので、最新の環境を利用したり、共用サーバーではあまり対応していない JAVA、GIS サーバー等自分の使いたいアプリケーションが自由に使える。
  • タスク スケジューラやローカルのプログラムを自由に利用することができる。

3. Linux サーバを使うのがいいのではないですか

日本のホスティング・サービスの主流はLinuxです。コスト的にいえば、Windows の場合はライセンス料が必要なので、Linux の方が有利です。例えば、Amazon EC2 では、サーバー利用料は、Windows の方が Linux よりも、25% ~ 100% 高くなっています。コストを重視する場合は、Linux を選択する方がいいでしょう。また、Microsoft の方針の変更に振りまわされなくなるというのも、Linux のメリットです。しかし、すでにWindows のシステムに慣れているという場合には、時は金なりです。人件費と比較するとサーバーのランニングコストの比重は小さいと思います。

以下に、Windows PC を Linux と比較してメリットとデメリットを比較してみました。自宅サーバーの場合は、日頃から使用しているOSなので、Linux を使用するよりはるかにハードルが低いと思うので、Windows PC を使ったサーバーを検討してみる価値はあると思います。

メリット

  • 使い慣れている OS を使用するので新たに覚えることが少ない。
  • 多くのの設定を、画面から GUI で行うことができる。
  • Microsoft Web Platform Installer を利用すれば、ウエブアプリケーションを容易にインストールできる。

デメリット

  • 利用許諾契約書から同時利用台数は、20台(Vista は10台)という制限がある。また、インターネットインフォーメーションサービス(IIS)に機能制限がなされており、同時処理数が10(8 では無印、7及びVista では Home Premium の場合は3)に制限されている。本格的な運用になると、Windows Web Server を購入する必要がありコストが必要になる。
  • PC の要求スペックが高い。
  • 標準では、メールサーバー、DNS サーバー、DHCP サーバー、LDAP(アクティブディレクトリ)サーバー等の機能がない。

4. 自宅サーバーに IIS を使うべきでないとあるのですが

日本のホームページでは、IIS を使っている例はあまりみられないし、ライセンス違反であるというような記述があるページがかなりあります。
例えば、村上俊一 著 「安全自宅サーバー活用ガイドブック for Windows XP」では、IIS を避けた理由について、以下の3点を挙げています。

  1. サーバー版ではないWindowsでIISをインターネットのような不特定多数のアクセスがあるサーバーとして運用することは、ライセンス違反になる。
  2. 標準インストールの状態ではセキュリティホールが多く、セキュリティバッチを多数当てる必要がある。
  3. IISのセキュリティホールを狙う攻撃が多いため、ハッキングされやすい。

また、日経ネットワークのWindows XPをサーバーに使う際の制限は?では、「例えば,データベースと組み合わせた独自のファイル・サーバーやアプリケーションを搭載したサーバーは,Windows XPでは利用できません。」という記述があります。

確かにIISは攻撃対象になりやすいという面はあるようですが、ライセンスの問題とセキュリティホールの記述には納得がいきません。使用許諾契約書を見れば、Apache も IIS も同じく最大20台(Vistaの場合は10台)までの接続が条件のはずです。使用許諾契約書を見ても、MSDN の Windows Vista 用 Web サーバーの新機能 を読んでも、IIS をインターネットで公開したらいけないという記載はありません。

また、セキュリティホールついても過去の話であって、IIS 6 以降では、Apache と差はありません。

4. どの程度のウェブサイトであれば使用できますか

使用許諾契約で、同時接続台数が20台(Vista Home Premium 以上 10台)となっています。この制約は、Webアプリケーションにとって非常に厳しい制限というわけではなく、平均サイト滞在時間を2分(1回につき2.5ページビュー)とすれば、1時間で最大600セッション(2.4秒に1回のページビュー)の処理ができます。特定の時間だけにアクセスが集中するのでなければ、 1日に2千セッション、5千ページビューであれば対応できるでしょう。接続が増加して同時接続台数で問題になるようであれば、keep alive の時間を短縮したり解除したりして調整することができます。サーバーも平均で2.4秒に1回のアクセスであれば、最終的にはアプリケーション次第になるのですが、通常であれば十分処理できると思われます。

一方で、Webブラウザは、css、javascript、画像などの複数の要素からなるWebページを表示する時には、並行してダウンロードするようになっているため、複数のTCP接続が開始します。このため、Webサーバに接続しているユーザー数がわずかでも、多数のTCP接続が開始されることになります。そういう点からいえば、IISの同時処理数の制限の方が厳しいと考えられます。Windows Vista の場合、IISの最大同時処理数は、Business 以上が10、Home Premium が3となっています。Windows 7 の最大同時処理数については、公式サイトでは記載されていませんが、実際にIISを立ち上げて調べたところでは、Vista と同じく、Pro以上が10、Home Premium が3、であると思われます。

なお、Windows XP Pro では、機能制限が多く、最大同時接続数は10ですが、それ以上の接続があると接続が拒否されていました。自宅サーバーに IIS を使うべきではないという評価が広がった一つの要因になっていると思われます。

Windows Server と Windows 7 の両方の OS を使っていて、Windows 7 は、多数のファイルの読み書きがある場合の処理は、Windows Server よりかなり処理が遅いように感じています。清水 理史氏の イニシャルBでも、「複数ユーザーから同時にアクセスした場合の処理などは低くなりがちだ。」といっています。処理速度の面からも、1日に5千ページビュー程度になれば、Server 版の Windows を使った方がいいと思います。

※個人のサイトで、1日5千ページビューのアクセスがあるサイトにまで成長させるのは相当骨がおれると思います。そういうことで、サイトの立ち上げ当初は、Windows PC で十分対応できます。そして、Windows PC で対応できなくなれば、クラウドサービスに移行すればいいし、その際には、特に変更することなくWindows PC で築いた資産を使用することができます。そして1日に5千ページビューのアクセスがあるようになれば、クラウドサービスへの投資も十分に元が取れるようになっていると思います。

5.ベンチマークの結果

Apache に付属するベンチマークソフト ab を使って、実際に IIS の処理速度を計測してみました。ab は、一つのファイルのみにアクセスするので、精度には限界があるかもしれませんが、簡単に使えるのでどの程度動作するかを調べるのには便利です。(操作についての参考、 ApacheBenchによる単純ベンチマーク測定
以下で使用したパソコンのCPUは、Core 2 Duo E6300(1.86GHz)です。

まず、発行リクエスト数1000、同時リクエスト数 10 で通常のhtmlファイルでテストしました。1秒間に794リクエストの処理ができています。いずれにしても、小規模なサイトでは十分な処理能力です。

Server Software:        Microsoft-IIS/7.5
Server Hostname:        192.168.0.3
Server Port:            80

Document Path:          /ap/list
Document Length:        1610 bytes

Concurrency Level:      10
Time taken for tests:   1.258633 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      1857000 bytes
HTML transferred:       1610000 bytes
Requests per second:    794.51 [#/sec] (mean)
Time per request:       12.586 [ms] (mean)
Time per request:       1.259 [ms] (mean, across all concurrent requests)
Transfer rate:          1440.45 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.9      0       9
Processing:     2   11   6.2     11      66
Waiting:        2   11   6.1     10      66
Total:          2   11   6.2     11      66

Percentage of the requests served within a certain time (ms)
50%     11
66%     13
75%     14
80%     15
90%     18
95%     22
98%     28
99%     39
100%     66 (longest request)

次に、Home Premium の処理能力がどの程度になるか確認のため、同時接続数を3に設定しました。同時接続数が10の場合と比較して、処理速度は若干落ちる程度です。Home Premium でも小規模なサイトであれば、十分に自宅サーバーにできると思います。

Server Software:        Microsoft-IIS/7.5
Server Hostname:        192.168.0.3
Server Port:            80

Document Path:          /ap/list
Document Length:        1610 bytes

Concurrency Level:      3
Time taken for tests:   1.337874 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Non-2xx responses:      1000
Total transferred:      1857000 bytes
HTML transferred:       1610000 bytes
Requests per second:    747.45 [#/sec] (mean)
Time per request:       4.014 [ms] (mean)
Time per request:       1.338 [ms] (mean, across all concurrent requests)
Transfer rate:          1355.14 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.9      0       9
Processing:     2    3   2.4      3      58
Waiting:        1    2   2.4      2      57
Total:          2    3   2.7      3      62

Percentage of the requests served within a certain time (ms)
50%      3
66%      3
75%      4
80%      4
90%      5
95%      7
98%     10
99%     12
100%     62 (longest request)

最後に、WordPress の画面でベンチマークをしてみました。かなり処理速度が落ちて、1秒間に2リクエストしか処理ができなくなりましたが、4で説明した程度のアクセス数であれば十分対応できます。このベンチマークでは、CPUの使用率が100%になっていることから、IIS が原因ではなく、アプリケーションの処理が原因だと思われます。

Server Software:        Microsoft-IIS/7.5
Server Hostname:        192.168.0.3
Server Port:            80

Document Path:          /wp/
Document Length:        31338 bytes

Concurrency Level:      2
Time taken for tests:   489.124540 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      31595000 bytes
HTML transferred:       31338000 bytes
Requests per second:    2.04 [#/sec] (mean)
Time per request:       978.249 [ms] (mean)
Time per request:       489.125 [ms] (mean, across all concurrent requests)
Transfer rate:          63.08 [Kbytes/sec] received

Connection Times (ms)
min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:   324  977 235.6   1042    1836
Waiting:      320  973 235.5   1039    1832
Total:        325  977 235.6   1042    1836

Percentage of the requests served within a certain time (ms)
50%   1042
66%   1073
75%   1093
80%   1114
90%   1195
95%   1259
98%   1387
99%   1466
100%   1836 (longest request)

6. 結論

こうみてくると、Microsoftにとってデスクトップ用のWindowsのIISの扱いはデリケートな問題だということがよくわかりました。デスクトップ用のWindowsのIISの性能を上げると、Windows Server の競争相手になってしまいます。しかし、デスクトップ用 Windows の IIS は、開発者にとってはテスト用として必要なものなので、外すわけにはいかないものなのです。

利用者としては、デスクトップ用のWindowsのIISであっても、個人サイトや小規模な会社のサイトであれば問題なく利用できること、デスクトップ用のOSにインストールされているIISは、簡易版ではなくサーバー用OSを利用するのと基本的な機能は同じであるが、性能面で制限があるため本格的なサイトになるとServer版のWindowsに移行する必要があることを理解したうえで利用すればいいと思います。

Webサイトを作ってみたいと思ったときには、普段使っている Windows 8/7/Vista を使ってみてはどうですか。一番手軽に初められると思います。それに、サーバー用 Windows のIISと基本的には全く同一のものなので、Windows 8/7/Vista での自宅サーバーでの運用経験は、Windows Server による Web サイトの運用にそのまま活かせるものなのです。