nginx(WordPress用)をLet's EncryptでSSL化する方法

スポンサーリンク

 

WordPress用に立てたnginxベースのWebサーバーを、Let's Encryptを利用してSSL化する方法をメモしました。

 

参考にさせて頂いた記事

[サーバー] Let's EncryptとNginxで、https対応を行う

Let's Encryptを利用してApache 2.4サーバをHTTPS化する | Qiita

Let's Encrypt で Nginx にSSLを設定する

 

 

スポンサーリンク

環境

 

下記の環境を前提とします。

 

サーバー側

・さくらのVPS(物理サーバー)

・Docker CE(物理サーバー)

・CentOS7(Dockerコンテナ)

・nginx(Dockerコンテナ)

・MariaDB(Dockerコンテナ)

・WordPress(Dockerコンテナ)

 

クライアント側

・iMac 27 inch 5K

 

前提条件

 

WordPressのインストールが完了していることを前提としています。

 

SSL化したいドメインを決めます

 

はじめに、SSL化したいドメインを決めます。

ドメイン未取得であれば、ドメインを取得しておきます。

たとえば お名前.com

 

HTTPでドメインにアクセスできることを確認します

 

SSL化したいドメインに、80番ポートでアクセスできることを確認しておきましょう。

クライアント側のブラウザで、

Example Domain

でアクセスできることを確認します。

アクセスできない場合は、WordPressのインストールに失敗しているか、DNSの設定がうまくいっていないなどの可能性があります。原因を調べて修正しておきましょう。

 

gitをインストールします

 

certbotをgit cloneしたいので、あらかじめgitをインストールします。

 

Dockerコンテナ側(CentOS7*nginx)

# yum install git

 

Complete!が表示されればOKです。

 

certbotをインストールします

 

Let's Encryptを使うために、certbotで証明書を取得します。

certbotは、EFF(Electronic Frontier Foundation)によって提供されている、Let's Encryptのための証明書取得用クライアントツールです。

詳細はcertbotの公式ページを参照してください。

 

certbotを以下のコマンドでローカルにコピーします。

 

Dockerコンテナ側(CentOS7*nginx)

#cd /usr/local

git clone https://github.com/certbot/certbot

cdcertbot

./certbot-auto --help

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

certbot-auto [SUBCOMMAND] [options] [-d DOMAIN] [-d DOMAIN] ...
Certbot can obtain and install HTTPS/TLS/SSL certificates. By default,
it will attempt to use a webserver both for obtaining and installing the
certificate. The most common SUBCOMMANDS and flags are:

・・・

 

certbot-autoのヘルプを表示できれば、git cloneは完了です。

 

webrootで証明書を取得する

 

Let's Encryptの証明書の取得方法には二通りあります。

 

表. Let's Encrypt証明書の取得方法

取得方法前提条件httpd停止の必要性
スタンドアローンnginxがインストールされていなくてもOK停止の必要あり
webrootnginxがインストールされていなければならない停止の必要なし

 

本記事の場合、最初にhttpでアクセスできることを試してから進めています。

そのため、nginxのサービスが稼働中です。

今回はnginxのサービスを止めずに作業したいので、webrootで証明書を取得します。

 

Dockerコンテナ側(CentOS7*nginx) /usr/local/certbot/

#./certbot-auto certonly--webroot -w /usr/share/nginx/wordpress -d example.com

Saving debug log to /var/log/letsencrypt/letsencrypt.log

・・・

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2019-xx-xx. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot
  again. To non-interactively renew *all* of your certificates, run
  "certbot renew"

・・・

  Donating to EFF:                   https://eff.org/donate-le

#

 

--webrootオプションを指定して、webrootの取得方法を指定します。

-wオプションを指定して、ルートフォルダを指定します。

一般的なnginxのルートフォルダは/usr/share/nginx/htmlですが、WordPress用のドキュメントルートに変更しました。

-dオプションを指定して、SSL化対象のドメインを指定します。

 

証明書の確認

 

certbot-autoの実行結果に、Congratulations!が表示されれば証明書の取得が完了です!

証明書の有効期限は3ヶ月です。

証明書を更新したい場合は、もう一度certbotを実行します。

 

では、取得できた証明書を確認しておきましょう。

 

Dockerコンテナ側(CentOS7*nginx)

# cd /etc/letsencrypt/live/example.com

# ls

README cert.pem chain.pem fullchain.pem privkey.pem

 

4つのpemファイル(証明書のファイル)が存在しています。

今回のwebrootで取得された証明書です。

 

nginxのconfigファイルを編集します

 

証明書の取得ができたら、nginxのconfigファイルを編集し、443ポートのアクセスを可能にします。

wordpress用のconfigファイル、wordpress.confを編集します。

 

Dockerコンテナ側(CentOS7*nginx) /etc/nginx/conf.d/

# vi wordpress.conf

server {

 listen 80;
  server_name example.com;
  rewrite ^ https://$server_name$request_uri? permanent;

省略

}

server {

 listen 443 ssl;
  server_name example.com;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  root /usr/share/nginx/wordpress;
  index index.php;
  charset utf-8;

 # wordpress parmalink setting
  try_files $uri $uri/ /index.php?q=$uri&$args;

 # to deny accessing to wp-config.php
  location ~* /wp-config.php {
    deny all;
  }

 # php-fpm settings

 location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_script_name;
    include fastcgi_params;
  }
}

 

80番ポートへのアクセスは、

rewrite ^ https://$server_name$request_uri? permanent;

を書いて、httpsへリダイレクトさせます。

 

証明書ファイルは以下の2行で指定しています。

ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

 

nginxのサービスを再起動します

 

nginxのconfigファイルを変更したので、文法チェックしたのち、サービスを再起動します。

 

Dockerコンテナ側(CentOS7*nginx) 

nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# systemctl restart nginx

 

以上で、Let’s Encryptの設定は完了です!

 

HTTPSのアクセスをチェックします

 

httpsでアクセスできることを確認しましょう。

https;//example.com

WordPressのトップページが無事に表示されれば完了です!

 

コメント

タイトルとURLをコピーしました