nginxでhttp/2(SPDY)を有効にする

サーバーが欧州にある事もあってnginxのキャッシュが機能していても結構遅い。そこでhttp/2に対応することにしました。nginxでhttp/2を有効にするのはとっても簡単。

server {
  listen 443;
  ...
}

上のlistenを、下のように書き換えるだけ。

server {
  listen 443 ssl http2;
  ...
}

その後「sudo service nginx restart」でnginxを再起動すればhttp/2が有効になります。たったこれだけなのに、今までhttp/2を有効にしていなかったとか・・・orz

http/2が有効になったことで、ページの表示完了までにかかる時間が半分以下になりました。

letsencrypt renewでunexpected error: ‘server’が発生する

常時SSLを実現するためにLetsEncryptを使用しています。サーバーの移行に伴い、旧サーバーから/etc/letsencrypt以下のファイルをシンボリックリンクも含めてすべて複製していました。問題なく動作していそうなので安心していたのですが、証明書を更新しようとすると以下のようなエラーが発生してしまいます。

~$ sudo letsencrypt renew
Processing /etc/letsencrypt/renewal/www.example.net.conf
2017-10-25 03:17:34,835:WARNING:letsencrypt.cli:Attempting to renew cert from /etc/letsencrypt/renewal/www.example.net.conf produced an unexpected error: 'server'. Skipping.

設定ファイル(www.example.net.conf)の記述内容が古いバージョンのものであることが原因のようです。/etc/letsencrypt/renewal/www.example.net.confを編集し、serverパラメータを追加します。

# Options and defaults used in the renewal process
[renewalparams]
#・・・
server = https://acme-v01.api.letsencrypt.org/directory
#・・・

[[webroot_map]]
www.example.net = /var/www

その後、あらためて「–force-renew」オプションを付けて証明書の更新をおこないます。

~$ sudo letsencrypt renew --force-renew
Processing /etc/letsencrypt/renewal/www.code-lab.net.conf
new certificate deployed without reload, fullchain is /etc/letsencrypt/live/www.code-lab.net/fullchain.pem

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.code-lab.net/fullchain.pem (success)

となり証明書の更新に成功しました。www.example.net.confの内容も、先ほど追記した1行以外にも大幅に書き換えられて、新しいバージョンに適合する物に更新されたようです。

参考:Fix Lets Encrypt renewal error on Ubuntu 16.04

Ubuntu 16.xでUFWを有効にする

ufw(Uncomplicated FireWall)はFiewwallソフトです。ScaleWayのSecurity Groupではデフォルトの設定を接続不可にすることができないので、安全に使用するためには別途irewallを設定することが必須です。Linuxで標準的に使われるiptablesでもよいのですが、iptablesは設定が煩雑なので、シンプルで分かりやすいufwを使うことにします。

sudo apt-get install ufw
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw default DENY
sudo ufw enable

sudo ufw enableを実行するとFirewallが有効になります。sshなどを許可しないままFirewallを有効にすると、完全にハマるので気を付けましょう。

sudo iptables -L

上記コマンドを実行すると、ufwによってiptablesがどのように設定されているか確認できます。

参考:Ubuntuのソフトウェアファイアウォール:UFWの利用

安価な専用サーバー・ScaleWay

参加賞で頂いたBizSparkアカウントも10月末で停止するので、そろそろ移行作業を行わないとなりません。移行先は昨年から目を付けていたScaleWayにします。

ScaleWayはちょっと変わったレンタルサーバー事業者です。ARMまたはATOMをベースとしたシンプルなワンボードコンピューターを独自開発し、この上でKVMによる仮想OSを提供しています。提供するのは仮想OSだけに限定し、様々な機能は仮想OS上でユーザーが実装すればよいと言うコンセプトです。低消費電力のCPUであるため、1Core辺りの処理能力は貧弱ですが、高速処理が必要ならスケールアウトすれば良いと言う発想です。

ScaleWayは提供する機能もCPUも貧弱ですが、その代わりめちゃくちゃ安い。ARM 4Core CPU(またはx64 2Core CPU) + RAM2GB + SSD50GBを占有して、月額2.99ユーロ(400円弱)にすぎません。この価格帯だと、他の格安サービスを探しても共有WEBサーバぐらいしか見つかりません。エンジニアにとって、サーバーまるごと占有出来るのは大きな魅力だと思います。どうしても高速処理が必要なら、ARM 64Core RAM 128GBまでスケールアップも出来ます、料金も時間単位なので必要なときだけスケールアップすると言う使い方もできます。

欠点を一つあげるなら、欧州にしかデータセンターがない事でしょうか。日本からサーバーにpingを打つと、パリもアムステルダムも280ms程度かかります。

このブログは2017年10月15日からScaleWayで動いています。ダウンロード開始までちょっともたつきますが、オールSSDな事もあって割と快適に使えているように思います。

使う上で注意点をいくつか上げておこうと思います。

アカウントを作ったら最初にSSH鍵を登録する

アカウントを作成してログインした後、WEB上からSSH公開鍵を登録します。そのために必要な公開鍵は別途作成しておかなくてはなりません。ここで登録した公開鍵が、仮想サーバを構築後、rootアカウントでログインする時のSSH鍵として設定されます。

仮想サーバーを作ったら最初にSecurity設定を

Security設定でFirewallで許可する通信ポート等を設定することが出来ます。初期状態だと何でも通すようになっています。データベース等もインターネットから接続可能な状態になってしまうので、最初に適切にポートを閉じてください。ワイルドカードで全てのポートをブロックするような設定を作れないので地味に面倒です。
デフォルトでメール送信に係わるポートが全て閉じられていることにも注意してください。メールの送信を行うには、サポートに問い合わせて、メール送信を許可して貰う必要があります。