hunamizawa’s blog

無い物は作りたい人のメモ帳

はじめての Apache on Ubuntu その1

大体のことはここ↓を見れば分かる。

akabeko.me

CentOS ではなく Ubuntu を選択したのは、そこに Ubuntu machine があったから。特に深い意味はない。

ドメインの取得

サーバーはすでに所有しているものとする。筆者はさくらの VPS をサーバーとして使う。

まず、どこかからドメインを買ってくる。筆者は お名前.com で hunamizawa.com を購入。

DNSの設定

正引き

FQDN (hunamizawa.com) から IPアドレスを得る、基本的な設定。お名前.com の管理画面から、サーバーのIPアドレスをAレコード・AAAAレコードに設定する。メールは使う予定がないのでMXレコードは設定しない。

DNS がある程度浸透するまで数時間待つ。

逆引き

IPアドレスから FQDN (hunamizawa.com) を得るための設定。

nslookup hunamizawa.com が通るようになったので、さくらのVPSの管理画面から、ホスト名逆引き登録で hunamizawa.com を設定する。

この後、DNS が完全に浸透するまで3日ぐらい必要なので、その間にローンチの準備をするのが吉。

Apache のセットアップ

とりあえずここ↓を見て、http://hunamizawa.com/ にアクセスすると "It works!" と言ってくれる状態にする。

akabeko.me

で、冒頭に申し上げた通り Ubuntu を使っているので、よく使われる CentOS とは細かい違いがある。

  • Apache のユーザー名は www-dataapache ではない)
  • 設定ファイルの置き場は /etc/apache2
    • *-available*-enabled というディレクトリがあって、シンボリックリンクを張ることで必要なモジュールだけを読み込む仕掛けになっている。systemctl の enable/disable みたいなノリ。

SSL 証明書を取得

HTTP over SSL に必要な証明書を、Let's Encrypt から貰ってくる。ちょっと前なら SSL 証明書を貰うのにウン万円必要だったのに、すごい時代になったなぁ。

まず、certbot を入れる。apt-get で入るやつは古いから使わないほうが良いとのこと。

apt-get install python3 pip3
pip3 install certbot

依存関係で足りないモジュールがあれば都度 pip3 install する。自分の場合は「cryptography が古いよ」と言われたので install --upgrade cryptography した。

次に、80番ポートを一瞬開けておいて、次を実行する。

certbot certonly --webroot -w /var/www/html -d hunamizawa.com

連絡先のメアドを入れたり、利用規約への同意にチェックしたら、ACME によるドメイン名所有の認証が行われて、証明書が発行される。

free-ssl.jp

Apache のセットアップ(続き)

以降は HTTPS で serve すればよいが、ACME の仕様上 HTTP も開けておかないと証明書の更新ができない。サイト利用者の利便性も考えて、HTTP (80) 宛のリクエストを全部 HTTPS (443) にリダイレクトするように設定しておく。

RewriteEngine on
RewriteCond %{HTTP_HOST} ^hunamizawa\.com
RewriteRule ^/(.*)$ https://hunamizawa.com/$1 [R=301,L]

qiita.com

SSL 証明書のパスを適切に設定する。

SSLCertificateFile      /etc/letsencrypt/live/hunamizawa.com/fullchain.pem
SSLCertificateKeyFile   /etc/letsencrypt/live/hunamizawa.com/privkey.pem

設定ファイルの構文チェック。

apachectl configtest

必要なモジュールをロードし、サイトの設定ファイルを読み込ませる。a2en**/a2dis***-enabledシンボリックリンクを張ったり剥がしたりするコマンド。

a2enmod ssl
a2enmod rewrite
a2dissite 000-default
a2ensite hunamizawa.com
systemctl restart apache2

80番と443番を開けて、SSL 関係のエラーが出ないこと、HTTP 宛リクエストが正常に 301 リダイレクトされることを確認する。

certbot を cron で回す

crontab に1行書き加えれば良い。

certbot renew

ここまで来れば、static なコンテンツを HTTPS で配信できる状態になった。後は PHP なり何なりのセットアップをすればよい。