nginx で SSL 対応サイトを作る

Let’s EncryptSSL証明書取得

SSL証明書は有料で数千のものから数十万のものまであるみたいです。「Let's Encrypt」ですと無料で取得できる そうなのでこれを使っていきます。

  • certbotをインストールする
$ sudo apt-get install certbot

オプションの意味について

参考 sig9.hatenablog.com

sudo certbot certonly --webroot -w demo/public_html/www.mackxxx.site/public/ -d www.mackxxx.site

...

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/www.mackxxx.site/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/www.mackxxx.site/privkey.pem

...

/etc/letsencrypt/live/www.mackxxx.site/に以下のファイルが作成されたのを確認します。

$ sudo ls /etc/letsencrypt/live/www.mackxxx.site

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

2つ目のserver{ 以下を追加します

$ sudo cat www.mackxxx.site
server {
        listen 80;
        server_name www.mackxxx.site;
        access_log /home/mackxxx/demo/public_html/www.mackxxx.site/log/access.log;
        error_log /home/mackxxx/demo/public_html/www.mackxxx.site/log/error.log;
        location / {
                root /home/mackxxx/demo/public_html/www.mackxxx.site/public/;
                index index.html index.php;
                }
        }

server {
    listen 443 ssl;
    server_name www.mackxxx.site;
    ssl on;
    ssl_certificate /etc/letsencrypt/live/www.mackxxx.site/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.mackxxx.site/privkey.pem;
    location / {
        root /home/mackxxx/demo/public_html/www.mackxxx.site/public/;
        index ssl-index.html index.php;
        }
    }  
  • 今回はhttpとhttpsで別のページを表示するので /home/mackxxx/demo/public_html/www.mackxxx.site/public/;以下に表示させるssl-index.htmlを追加します。

  • 最後に再起動して正しくページが表示するか確認します

$ sudo /etc/init.d/nginx stop  
$ sudo /etc/init.d/nginx start