独自ドメインを取った

独自ドメインを取って、ブログ等を移転した。

3年半ほど使っていた d-poppo.nazo.cc は、自分で取ったものではなくてさくらインターネットのもの(さくらのサブドメイン)なので、さくらのレンタルサーバーの外に移せないほか、いろいろと制限があった(例えば、 SSL 証明書を設定できないので Web サイトを HTTPS 化できない)。

そこで、思い切って独自ドメインを取り、 Web サイトの URL を変更することにした。現時点では、サーバーはさくらのレンタルサーバーのままである。

取った独自ドメインは miz-ar.info であるが、特に深い意味はない。自分のハンドルネームではないし、どこぞの形式証明的なやつとも関係ない。

旧ドメインである d-poppo.nazo.cc は当面は維持(つまり、さくらのレンタルサーバーの契約を継続)しなければならないだろう。これまでに3年半使っていたわけなので、とりあえず今後3年半はこのまま維持し、その後にアクセス数を見て判断したい。

URL の変更とサブドメイン

URL を変更するにあたって、以前の d-poppo.nazo.cc 以下の内容をそのまま miz-ar.info に移すか(例: d-poppo.nazo.cc/blog/ → miz-ar.info/blog/)、あるいは適当にサブドメインに分ける(例: d-poppo.nazo.cc/blog/ → blog.miz-ar.info/)かだが、将来的に Web サイトの一部分を別のサーバーで動かせるようにすることを考えて、適宜サブドメインに分けることにした。

サブドメインに分けると、Webサイト内の相対リンクが動かなくなるので、移行措置として、 mod_rewrite による転送として d-poppo.nazo.cc/blog/ → blog.miz-ar.info/ の他に miz-ar.info/blog/ → blog.miz-ar.info/ を設定している。

HTTPS 化と Let’s Encrypt

HTTPS 化にあたって、証明書の発行に Let’s Encrypt を利用している。さくらのレンタルサーバーに証明書をインストールするには、さくらの Web コントロールパネルで手作業が必要になる。証明書の更新も同じなので、つまり、3ヶ月に一回手作業を行う必要になる(Web スクレイピング的なことをすれば自動化できるかもしれないが…)。

certbot スクリプトを使って証明書の発行のみを行うには、 webroot プラグインまたは manual プラグインを使う。manual プラグインを使うと、サーバーの公開ディレクトリの .well-known/ 以下に設置すべきテキストファイルが提示されるので、それを設置してやるとドメインの所有者として認められる。webroot プラグインの場合は、テキストファイルの設置を自動化してくれる。

ルート権限がなくても、サーバー上で certbot を動かすことができれば webroot プラグインが使用可能だが、ルート権限のない FreeBSD のサーバー上に certbot をインストールするのは大変そうなので、手元のマシンで manual プラグインを利用した。ただし、サーバー上にファイルを設置する段に関しては、

#!/bin/bash
case $CERTBOT_DOMAIN in
    ( miz-ar.info ) DIR=〈メインのディレクトリ〉/ ;;
    ( blog.miz-ar.info ) DIR=〈ブログのディレクトリ〉/ ;;
esac
ssh 〈レンタルサーバーの名前〉.sakura.ne.jp "mkdir -p 'www/${DIR}.well-known/acme-challenge/' && (echo '$CERTBOT_VALIDATION' > 'www/${DIR}.well-known/acme-challenge/$CERTBOT_TOKEN')"

というようなスクリプト(authenticator.sh とする)を書いて自動化した(certbot の実行時にオプションとして --manual-auth-hook ./authenticator.sh を指定する)。

certbot を manual プラグインで使う際は、鍵の書き出し先等のディレクトリを自分で用意すれば、マシンのルート権限は必要ない。

$ mkdir config
$ mkdir work
$ mkdir logs
$ certbot certonly --config-dir=config --work-dir=work --logs-dir=logs --manual --manual-auth-hook ./authenticator.sh --manual-cleanup-hook ./cleanup.sh -d miz-ar.info -d blog.miz-ar.info

自分の環境が悪いのか知らないが、 Mac の ターミナル.app で certbot を使うとなんかおかしくなる。

さくらのレンタルサーバーと HTTPS 化

大変なのは証明書のインストールが済んだ後で、さくらのレンタルサーバーでは HTTPS でのアクセスを内部で転送(?)しているため、サーバーで動いている CGI や PHP からは常に HTTP によるアクセスに見えてしまう。

http: のアクセスを https: に転送する設定に関しては、 RewriteCond が通常と違って、

RewriteEngine on
RewriteCond %{HTTP_HOST} miz-ar.info
RewriteCond %{ENV:HTTPS} !^on$
RewriteCond %{HTTP:X-SAKURA-FORWARDED-FOR} ^$
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R=permanent,L]

という風になる(d-poppo.nazo.cc のアクセスの場合を除外するために RewriteCond %{HTTP_HOST} を入れている)。

WordPress に関しては

if (isset($_SERVER['HTTP_X_SAKURA_FORWARDED_FOR'])) {
$_ENV['HTTPS'] = 'on';
$_SERVER['HTTPS'] = 'on';
}

というようなコードを wp-config.php に書いておけば良さそうである(多分…)。

その他の CGI に関しては、 HTTPS 環境変数はセットされるが、 SERVER_PORT 環境変数が 80 番になったりする。

その他 HTTPS 化について

https:// によるアクセスでは http:// で参照されているスクリプト等が読み込まれなくなる。自サイト内のスクリプトならば相対参照するので問題ないが、ブログパーツの類では問題になる可能性がある。oEmbed の参照(WordPress で言うと、 URL だけ貼るといい感じになるやつ)も、これの対象になるようで、例えば記事中にはてなブログの URL を貼っていた場合に見た目が変わる。

HSTS (HTTP Strict Transport Security) に関しては(まだ適用していないが)普通にできるはずである。

MathJax の設置

MathJax CDN が4月いっぱいで終了するらしいので、 MathJax のファイルを自前で持つようにした。

MathJax は、2010年ごろに登場した当初は CDN の類は用意されておらず、2011年に公式の CDN が登場した時は「これは便利だ〜〜!!」と思ったものだが、結局公式の CDN が終了してしまうという…。6年間お疲れ様でしたと言うべきか。

一応公式サイトの方で代替となる CDN が紹介されているが、また CDN がサービス終了して URL を変更する羽目になったら面倒なので、自分で持つことにした。