GCPでWordPressを始めてみる(その4:https対応編)

TL;DR

WordPressをhttps化し、かつサイトの読み込みを少しでも早くするためHTTP/2対応した。

まずはhttps化

https化でSSL証明書は有料のものも無料のものもあります。企業で使うのであれば有料のものの方がベターですが、個人で使うのであれば無料のものでも問題無いかなと思います。今回は無料でSSL証明書を提供している「Let’s Encrypt」というサービスを利用します。

では、設定してみます。

その前に今回の作業の前提としては以下2点です。

  • WordPressのサーバにsshでログインできること。
  • サイトにグローバルにアクセスできること。

サーバにsshでログインした上で、まずはLet’s Encryptのツールをインストールします。

$ sudo apt-get install -y python-certbot-apache
(インストールが行われます)

SSL証明書のインストールを開始します。(ここだけ出力結果もつけておきます)

$ sudo certbot --apache 
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): xxxx@xxx.com ←任意のメールアドレス

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A ←無条件でA

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N ←お好みで
No names were found in your configuration files. Please enter in your domain
name(s) (comma and/or space separated)  (Enter 'c' to cancel): blog.bassbone.tokyo ←今回https化したいサイトのドメイン
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.bassbone.tokyo
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/000-default-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/000-default-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/000-default-le-ssl.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 ←お好みで
Redirecting vhost in /etc/apache2/sites-enabled/000-default.conf to ssl vhost in /etc/apache2/sites-available/000-default-le-ssl.conf

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://blog.bassbone.tokyo

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=blog.bassbone.tokyo
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.bassbone.tokyo/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.bassbone.tokyo/privkey.pem
   Your cert will expire on 2021-02-10. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

この作業が正常終了すれば、WordPressはhttps化されています。便利ですね!

続けてHTTP/2対応を

次に紹介する作業をしないと、ブラウザとサーバとの間がHTTP/1.1での通信となってしまい、コンテンツの読み込みが若干遅くなる可能性があります。

では、HTTP/2対応しましょう。今回作成したサーバではWEBサーバがApacheですが、ApacheでHTTP/2対応するにはpreforkモジュールからeventモジュールに切り替えないといけないのがちょっと厄介でした。。。(nginxだともっと簡単だった気がします。)

ちなみにですが、HTTP/2対応についてはこちらの記事を参考にさせていただきました。ありがとうございました!

# php-fpmのインストール
$ sudo apt install php7.4-fpm
$ sudo a2enmod proxy_fcgi setenvif
$ sudo a2enconf php7.4-fpm
$ sudo a2dismod php7.4
$ sudo service apache2 restart

# preforkモジュールからeventモジュールに切り替え
$ sudo a2dismod mpm_prefork
$ sudo a2enmod mpm_event
$ sudo service apache2 restart
$ sudo service php7.4-fpm restart

# HTTP/2有効化
$ vim /etc/apache2/sites-available/000-default-le-ssl.conf
(Protocols h2 h2c http/1.1 を追記)
$ sudo a2enmod http2
$ sudo service apache2 restart

これでHTTP/2対応、完了です!

次回

今回の作業でhttps化(+HTTP/2対応)が完了しました。ここまでの作業で最近の一般的なサイトの水準になったと思われるので、ここからは記事をガシガシ書きつつ、流入を増やすための施策を打っていきたいですね。

ただ、1点だけインフラ観点でやっておかないといけない作業があります。それは「バックアップ」です。バックアップとは、システムに何かあった場合復元させるためのデータとなります。意外とバックアップの観点は漏れがちですが、うっかり漏れてしまうといざという時に何もできなくなってしまうので、ぜひ忘れずにやりましょう。

というわけで、次回はバックアップについて紹介したいと思います。