nginxとLet's Encryptで常時SSL化対応する

まずホストするディレクトリを用意する

# cd /wwwroot
# mkdir example.co.jp
# chmod 755 /wwwroot/example.co.jp

作成したディレクトリに動作確認用のコンテンツをコピーしておく

動作確認用のコンテンツではなく本番用のコンテンツでも構わない

環境確認用の設定ファイルを書く

# nano /etc/nginx/sites-available/example.co.jp
server {
    listen 80;
    server_name example.co.jp;

    root   /wwwroot/example.co.jp;
    index  index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
# ln -s /etc/nginx/sites-available/example.co.jp /etc/nginx/sites-enabled
# /etc/init.d/nginx configtest
[ ok ] Testing nginx configuration:.
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# /etc/init.d/nginx reload
# nginx -s reload

正しくコンテンツを返しているかテストする(ローカル)

# curl http://localhost/ -H "Host: example.co.jp"

DNSレコードを書き換える

無意味にnslookupdigをポチポチしながらDNSの反映をひたすら待つ

正しくコンテンツを返しているかテストする(インターネット)

# curl http://example.co.jp/

Let’s EncryptのSSL証明書を取得する

# certbot certonly --standalone -d example.co.jp --pre-hook "service nginx stop" --post-hook "service nginx start"

常時SSL対応の設定ファイルに書き換える

# nano /etc/nginx/sites-available/example.co.jp
server {
    listen 80;
    server_name example.co.jp;

    return 301 https://example.co.jp$request_uri;
}
server {
    listen 443 ssl;

    server_name example.co.jp;

    root   /wwwroot/example.co.jp;
    index  index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.co.jp/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.co.jp/privkey.pem;
}

作成したディレクトリに本番用のコンテンツをコピーする

既に本番用のコンテンツがはいっているならなにもしなくてもよい

正しくコンテンツを返しているかブラウザでテストする

ブラウザでhttp://example.co.jpにアクセスしたときに、ちゃんとhttps://example.co.jpへのリダイレクトされているか確認する