WebサイトのHTTPS対応 ついでにHTTP2も対応
WebサイトをHTTPSに対応させる。ついでにHTTP2も対応する。
環境:CentOS 8 / nginx 1.17.10
1. certbotの使い方を調べる
HTTPSに対応させるためには証明書が必要。
証明書の発行はcertbotを使うと簡単らしいので使う。
certbotの公式ページを見ると環境ごとの手順がわかる。
「Software」と「System」に自分の環境を入れる。今回は、
My HTTP website is running 「Nginx」 on 「CentOS/RHEL 8」
必要な条件がいくつかある。
- ①コマンドラインを使用できる
- ②ポート80を開けて ③ネットにつながっている ④HTTPのWebサイトがある
- ↑が ⑤サーバに置いてあり ⑥SSHでアクセスでき ⑦sudo権限を持っている
全部そろってるのでやる。
2. 以下、SSHでサーバに入って作業
2.1 certbot をインストール
certbotの公式ページによると最初に「EPELの有効化」という作業が必要。
いらないのでは?と思い無視して次の手順「certbotインストール」のコマンドを実行。
1 | sudo -s |
成功。
途中で「EPEL」という単語が出てきたのでCentOSさんが良い感じにやってくれたのだと思う。
2.2 certbot で証明書を作成
はじめにcertbotが働くためのフォルダを作る。
証明書を作るときに一時ファイルを作るらしい。
名前はcertbot
とした。
1 | mkdir /www/certbot |
vi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
元々あったlocation /{}
の上にlocation /.well-known{}
を追加。
中身のroot /www/certbot;
はさっき作ったフォルダ。
1 | location /.well-known{ |
変更後、nginx
の設定を再読み込み。
1 | systemctl reload nginx |
次に下記のコマンドで証明書を作成してもらう。/www/certbot
はさっき作ったフォルダ。circleken.net
はドメイン名。
1 | certbot certonly --webroot -w /www/certbot -d circleken.net |
メールアドレスなど聞かれるので答える。
証明書の期限が切れそうになるなどしたらメールで教えてくれるらしい。
その後、自動的に証明書の取得まで行われる。
2.3 nginxの設定ファイルに証明書を設定
さっき作った証明書を使うためにnginx
の設定ファイルを編集する。
vi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
元々あったserver{}
の下にserver{}
を追加。
中身のroot
, index
は既存のserver{}
に書いてあるものをコピー。
他は下記の通り。
1 | server{ |
変更後、nginx
の設定を再読み込み。
1 | systemctl reload nginx |
2.4 ファイアウォールにHTTPSアクセスを許可してもらう
ファイアウォールがHTTPSによるアクセスを許可していないと入れない。
許可されているかどうかは下記コマンドで調べられる。
1 | firewall-cmd --list-all |
表示されるメッセージのservices:
の欄にhttps
があればOK。
無ければ下記コマンドで許可してもらう。
1 | firewall-cmd --permanent --add-service=https |
3. WebサイトにHTTPSでアクセス
https://<ドメイン名>にアクセス。
鍵がついてる。
成功。
4. HTTPSリダイレクト
今のままだとHTTPでもアクセス可能なので、HTTPでアクセスされた際にHTTPSにリダイレクトするようにする。
vi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
元々あったlocation /{}
の中身を変更。
1 | location /{ |
変更後、nginx
の設定を再読み込み。
1 | systemctl reload nginx |
http://<ドメイン名>にアクセスして、
https://<ドメイン名>に飛べばOK。
5. 証明書の自動更新
certbot
によって取得した証明書は90日で期限が切れる。
1 | certbot renew |
のコマンドで更新できるが、90日ごとに作業をしたくない。
そこで、crontab
によりコマンドを定期実行してもらう。
下記のコマンドでcrontab
のエディタが開く。
1 | crontab -e |
設定ファイルをvi
と同じように編集できる。
定期実行するコマンドと日時を書き込む。
1 | 3 2 1 * * /usr/bin/certbot renew && /bin/systemctl reload nginx |
毎月1
日2
時3
分に/usr/bin/certbot renew
と/bin/systemctl reload nginx
のコマンドが実行されるようにした。
1 | crontab -l |
で設定した内容が確認できる。
6. HTTP2に対応
HTTP2に対応させる。
vi
でnginx
の設定ファイルを編集。
1 | vi /etc/nginx/conf.d/default.conf |
さっきの
1 | server{ |
の、listen 443 ssl;
をlisten 443 ssl http2;
にするだけ。簡単。
変更後、nginx
の設定を再読み込み。
1 | systemctl reload nginx |
参考