20120228230702
Virtualhost的な
Apacheを使いながら複数のドメイン名のSSL証明書を用意する場合、もう一つIPアドレスが必要とよく言われる。しかしネットワーク資源的にも、やはりSSLは何とか使いまわせるととても嬉しい。さて、この件について何が駄目で問題になっているか。HTTPのサービスをVirtualhostにて提供する場合には
NameVirtualhost hogehoge:80 <Virtualhost hogehoge.com:80> ... </Virtualhost> ... NameVirtualhost foofoo.com:80 <Virtualhost foofoo.com:80> ... </Virtualhost>
と書く。通常のHTTP (ポート80番指定) の場合にはこのように。HTTPS (ポート443番指定) 指定の場合には一応Virtualhostの機能は機能しそうに思う。が、できない。理由は名前ベースにてVirtualhostディレクティブを記述した場合には、振り分けに使うHTTPのHOSTヘッダが取得できずに振り分けをすることができない。そのため、Virtualhostディレクティブ内の情報は無視されてしまう。HTTPSのVirtualhostを提供する場合にはIPアドレス指定にて記述する事となり、新規のIPアドレスが必要になる。
NameVirtualhost 192.168.0.1:443 <Virtualhost 192.168.0.1:443> ... </Virtualhost> ... NameVirtualhost 192.168.0.2:443 <Virtualhost 192.168.0.2:443> ... </Virtualhost>
このように書く事となる。因みに、
NameVirtualHost *:443 <Virtualhost *:443> ServerName hogehoge.com ... </Virtualhost> ... <Virtualhost *:443> ServerName foofoo.com ... </Virtualhost>
で、いけなくはない。ただし、Virtualhostのディレクティブ内に設定した証明書はApacheにて最初に指定された証明書を使う。恐らくは後者のホスト名についてはこの例のfoofoo.comにて正常なアクセスが出来なくなる(証明書エラー)。これが正常なSSLアクセスを提供出来なくなるもう一つの理由。その為、複数のSSLを一つのIPで提供するのであれば、
<Virtualhost 192.168.0.1:443> ... <Virtualhost> ... <Virtualhost 192.168.0.1:444> ... <Virtualhost>
のような、もはや当たり前の苦肉の策になる。そして、これは証明書のエラーこそ発生しないが、通常のブラウザでのアクセスの場合はポート指定が必要となりサービスを受けるユーザにはあまりよろしくない。今更このような話を書いて何が言いたいか。HTTPSを使用する際の一つのIPに対して証明書が一つの問題は、HTTPSの仕様によるホスト名からのApacheの証明書の切り替えが出来ない事と、同時に設定した場合には片方の証明書しか有効にならないことである。SSL証明書発行の際には名前だけしか見てはいない。しかし、Apacheの処理上、IP一つとどうしても絡んでしまうのだ。同僚とそのような話をして、結論はポート分けてしか提供ができないって事で収まりはしたが、HTTP同等の名前ベースでのVirtualhost分けを前提に会話するという超テキトウな説明をして猛省中。
20120201005602
MediaWiki
折角、先日phpを入れたのでぼちぼちMediaWikiを入れてみる。備忘録にもなるし。
# USE="imagemagick postgres" emerge mediawiki
超簡単。しかしGentooが推すwebapp-configを使う事になる。
# webapp-config -I -d mediawiki mediawiki [mediawiki Version]
ある程度パッケージとそれらを上手く管理するツールであるとはいえ、Apacheをある程度カスタマイズしている身からすると、この方法はちょっと気持ち悪い。ただ、Stowと同じような扱いのツールなので、多数のPortageからのWebアプリを管理するときはApacheの設定も元に戻してして身を委ねてしまって良いのかもしれない。一応/usr/share/webapp/mediawikiに大元がインストールされていて、ここから/var/www/辺りに展開する模様。ここから自分で入れたほうが都合の良い人もいるかと思う。
さて、webapp-configを使うかはともかくとして、public上に見えるところに置けばWeb上からセットアップができる。超簡単。セットアップから出力されたLocalSettings.phpを/Mediawiki/に置いて完了。わー、まんまWikipediaだこれ。
ちなみにこれは個人の備忘録に使うことになるのだが、一人だと多機能すぎて辛い。そして、ブランチのWikipediaのシステムもそうだけれど、「新規項目(白紙)を追加する」ってアクションが全く無いのが辛い。標準では一回ごとに検索から調べて新規追加するか、記事にシステム内リンクを追加して新規追加をする方法をとっていて非常に分かりづらいし、まだるっこしい・・・最初の一歩踏み出すと使いやすいのですが。