nginxでLet’s Encryptを用いてhttps(SSL/TLS)を有効にする方法をこちらに書いていきます。

当方のLet’s Encryptの記事は備忘録と書きます。他社のサイトさんの方がわかりやすいと思うので、わからない点などがあれば調べていただければ幸いです。

今回はリバースプロキシを使用します。

リバースプロキシの設定

1.configを作成する

/etc/nginx 上にnginxのいろんな設定ファイルがあります。

特に、nginxのメインとなる主の設定ファイルとなるのが/etc/nginx/nginx.confです。

ですが、このファイルを直接弄ってしまうとわかりにくいという問題が起きるので今回は/etc/nginx/conf.d/以下のファイルを新たに作成します。

/etc/nginx/conf.d/[好きな名前].conf

server{
    server_name    example.net;
    listen 80;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location /test1/ {
        proxy_pass    http://localhost:8080/;
    }

    location /test2/ {
        proxy_pass    http://localhost:3000/;
    }
}

2.動いているか確認する

systemctl restart nginx

nginxを再起動させて、リバースプロキシが働いてくれているか確認します。

Let’s Encryptの設定

0.Let’s Encryptで必要なものを入れる

yum -y install epel-release
yum -y install certbot

certbotというものが必要となるので、インストールします。

1.証明書を取得する

certbotを使って取得します。

certbot certonly --standalone

2.設定に追加する

certbotを実行することで、

  • cert.pem
  • privkey.pem

が作られました。

これらをnginxに反映させるために設定ファイルを追加させます。

/etc/nginx/conf.d/log.conf

server{
    server_name    example.net;
    listen 443 ssl;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/example.net/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.net/privkey.pem;

    proxy_set_header    Host    $host;
    proxy_set_header    X-Real-IP    $remote_addr;
    proxy_set_header    X-Forwarded-Host       $host;
    proxy_set_header    X-Forwarded-Server    $host;
    proxy_set_header    X-Forwarded-For    $proxy_add_x_forwarded_for;

    location /test1/ {
        proxy_pass    http://localhost:81/;
    }

    location /test2/ {
        proxy_pass    http://localhost:3000/;
    }
}

3.証明書を自動更新する

Let’s Encryptの証明書の場合では、3ヶ月毎に更新しないと失効してしまうのでcronに自動更新できるようにしておきます。

sudo crontab -e

cronの設定ファイルが出てくるので、以下のものを入力します。

0 0 * * * certbot renew && systemctl restart nginx

今回の設定では毎日深夜0時に certbot renew && systemctl restart nginx を実行するようになっています。

まとめ

これでリバースプロキシを使ったhttps化ができるようになりました。