MovableTypeとWordPressとDDNS

もう10年近くはCMSにMovableType(以下MT)を使っているんじゃないかな。

自力でタグ書いてた時期もあったけど、写真の管理、記事の管理は圧倒的に楽になった。正直MT以外にも色々使ってみたいけど、結局記事を書く人の慣れもあるのでホイホイ変えるわけにもいかないのが正直なところ。

最近CMSにWordPress(以下WP)を使ってみたいといわれたのでとりあえずサーバーに入れてみているのだが、圧倒的に使い勝手が良くなっていることに驚いた。圧倒的なシェアを持っているのも分かる気がする出来栄えだ。エンジニア的な観点でWPはコンテンツが動的生成だから遅いのでアウトオブ眼中なんて決め付けていたけど、そんな欠点を補えるだけの勢いがある気がする。インストールは簡単だしプラグインは選び放題。テーマも腐るほどある。次に入れ替える機会があれば第一候補に決定。

で、最近更新が滞ってたりするのは3Dプリンタの件と、ここしばらく悩んでるドメイン管理の件。自宅にサーバーを置いているのだが(VPSとかでもいいのだが、容量が多いので意外と高くつく)、動的IPなうえ、ドメイン取得以外にコストはかけたくないってことでDDNSを使っている。先日、愛用していたDynDNSが強制有料化してしまったのをきっかけにサーバー構成を大きく変更したのだが、いくつか問題点ががが。まぁネットワーク管理者なら回線分けろとかドメイン買えば済むって言いそうだけど何とか自力でやりたかったんですよ。

サーバーにはmicroserverを使用。これはサーバーの試験用も兼ねているのだが、HDDを4本、2本ずつペアでRAIDを組ませていて、vmware esxiを使って仮想化、OSにはCentOSとUbuntuの2本立て環境にしている。以下、仮想環境下のサーバー2台をそれぞれA,Bとする。CentOSではApacheとOwncloudなどをメインに使っているのだが、今回はUbuntu側にもapache環境を入れてしまおうという魂胆だ。

ここでまず2つ問題がある。1つがDDNS。ボーイスカウトのほうのドメインは大手国内レジストラの管理下にあるので、DiCEを使うなどしてIP変化時に更新をかけているだけ。いたって普通の構成で、サーバーAにapache,MT,DiCEが入ってて外からの80ポートへのアクセスをすべて受け取っている感じ。nagoya88.net = サーバーAの関係が成り立ってる。今回はこの環境に有料契約は一切せずに hogehogeってドメインからサーバーBへの道を追加してあげるのが目標。問題なのは2つの入り口、2つの出口があるにもかかわらず、通過するIPアドレスと回線が1つしかないこと。何らかのドメインを確保して、今までのドメインへのアクセスと区別してあげる必要がある。2つめは俗に言うヘアピンNAT問題。家の外からwifi、3G経由では正常にアクセスできても自宅のローカルネットワークからアクセスするとうまく処理できなくなる。またはその逆の状態。これもルーターを変えたりすることで解決できなくもないのだが、ソフト的に何とかできればちょっと気持ちいい。今回はこの2つの問題を向き合ってみた。

1つ目、ドメインだが、お試しということで安直にmyDNSにした。DiCEで更新できるので今までの設定に追加して完了。とりあえずどっちのドメインからアクセスしてもサーバーAにつながるようになる。逆引きしたらどうなるかは知らん。この状態だと、アクセスしたページから他のページに遷移するとアドレスがメインのドメインに戻ってしまうので、入り口だけあればいいという人にはいいが、新規ドメインで検索、ブックマークして欲しいって人には向かない。ってことで、ドメインが変わらないようにする方法。いくつかパターンがあるが、今回はあるドメインの場合だけサーバーBに飛ばすという方法にした。流れとしては、

ドメイン1 → xxx.xxx.xxx.xxx → サーバーA → サーバーAコンテンツ

ドメイン2 → xxx.xxx.xxx.xxx → サーバーA → サーバーBコンテンツ

のようにサーバーAでアクセスに使ったドメインを判断し、ドメインによってサーバーA,Bに振り分けるという方法を使った。

apache単独の機能でもいけそうな気配はあったが、問題の切り分け、将来的な見通しも含めて、ロードバランサに使うPoundを利用することに。

ロードバランサとして専用サーバーを置く訳にもいかないので、PoundはサーバーAに設置する。このとき、外からアクセスされる80ポートをPoundで使用し、サーバーAのapacheは異なるポート(今回は8080)で待ち受けるように設定する。Pound.cfgはこんな感じ。

ListenHTTP
  Address 192.168.0.88
  Port 80

xHTTP 1
Service
HeadRequire “Host: .*hoge.hoge.net.*”
BackEnd
Address 127.0.0.1
Port 8080
End
End
Service
HeadRequire “Host: .*huga.huga.jp.*”
BackEnd
Address 192.168.XXX.XXX
Port 80
End
End
End

これで、Poundがアクセスする側の指定したドメインによって接続先をそれぞれのapacheに振り分けることが可能になる。同様のことがapacheのProxyPassでも出来るようだが、1つのサーバー内で異なるドメインのアクセスを捌くってのも気持ち悪いしうまくいかなかったので今回はパス。この環境まで持ってこれればサーバーBのドメインを新規のものにするだけなのでかなり単純化できる。で、ここまで出来てても、MT,WPをセットアップ後にサイトがちゃんと表示されなかったり、そもそも開かなかったりする理由はどうもセットアップ画面へのローカルからのアクセスにあるらしい。自宅で設定しているとどうしてもローカルからアドレスを直接打ちたくなるが、そこは我慢して外から接続する体でいくといとも簡単に成功した。しかもCMSのDBをちゃんと初期化しないとだめなようで、ローカルから設定、外部から接続ー表示されない、外部から設定し直しという流れだけでは状況に変化がなかった。いままでここで躓いていたのかと思うとなんか悲しくなるな。もうちょっと頑張れよ俺。

ということで、意外と簡単にドメイン振り分けには成功したのだが、課題は2つ目のヘアピンNAT.ドメイン名だけでは自宅内のローカルサーバーがどれかが分からないという問題である。家の外からは普通に見えるアドレスが家の中では使えないので結構不便。アプリの設定が場所で異なるってことになる。これは単純にマシンのHostsファイルにドメイン、IPを記載することで防げるはずだが、iPhone,Androidのhostsファイルを書き換えるわけにもいかないので悩ましい。今回はDNSをサーバーAに立てて解決したが、iPhoneのSafariだけはなぜか見られない。Chromeだと普通にアクセスできるのでDNSの扱い方が違うのかもしれないが、WPアプリの機能が半分くらい死ぬのが悩ましいところ。解決策が知りたい。

コメント

タイトルとURLをコピーしました