Hirooooo’s Labo

開発メモ、ガジェット、日記、趣味など、思った事を思ったまんま書くブログ

Let's Encryptを使用してNginxにSSL接続を可能にしてからリバースプロキシ設定をする方法

f:id:hirooooo-lab:20190612174345p:plain

Let's Encryptを使用してNginxにSSL接続を可能にしてからリバースプロキシ設定をする方法

タイトルが長い!
前回CentOS7にNginxをインストールする方法を書きましたが、今回はそのNginxのWebサーバーにSSL接続を可能にする方法です。
仕様するのは無料のSSL証明書Let's Encryptです。
Let's Encryptの設定方法から、Nginxでの簡単なリバースプロキシ設定までを書きたいと思います。

Let's Encrypt証明書の取得

前提条件

いろいろありますが、以下の条件をクリアしているのを前提として書きます。

  • 証明書を取得するドメインでサーバーアクセスが可能(DNSで名称解決が可能)
  • 80番ポートでサクセスが可能
  • gitがインストールされていてgitコマンドが使える

certbotのインストール

まずはLet's Encryptのクライアントツールのcertbotをインストールします。
インストール方法は任意の場所にgit cloneするだけです。

$ cd /usr/local 
$ git clone https://github.com/certbot/certbot

証明書の取得

証明書の取得方法にはstandalone方式とwebroot方式があるんですが、今回はwebroot方式で。 webrootではNginxが起動していた、80番ポートでアクセスできる必要があります。
以下のコマンドを打つとメールアドレスの入力やらライセンスAgreeやら取得ドメインやら聞いてくるので逐一入力しましょう。

certbot certonly --webroot -w /usr/share/nginx/html/ -d hirooooo-lab.com

※ここでは取得ドメインは[hirooooo-lab.com]としておきます。
/usr/share/nginx/htmlはNginxのデフォルトのwebRootになります。

最終的なやり取りはこんな感じになりました。

certbot certonly --webroot -w /usr/share/nginx/html/ -d hirooooo-lab.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to            ←ここでメアド入力
cancel): your-mailaddress@gmail.com
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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                                                                                                                                 ←ここで規約確認

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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                                                                                 ←あんたのメールにいろいろ送っていいってことだと思う
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for api.o-kami.info
Using the webroot path /usr/share/nginx/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Resetting dropped connection: acme-v02.api.letsencrypt.org

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/hirooooo-lab.com/privkey.pem
   Your cert will expire on 2019-09-01. 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"
 - 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

Your cert will expire on 2019-09-01. 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"

なので、2019-09-01で期限着れるからそしたらcertbot renewしてねって言ってますね。

とりあえずこれでSSL証明書の取得は完了です。

Nginxの設定をしてSSL接続

取得した証明書をNginxに設定してSSL接続を有効にします。

Nginxの設定ファイルを作成

/etc/nginx/conf.dにserver.confファイルを作成します。

$ vi /etc/nginx/conf.d/server.conf

server.conf

server {
  listen 443 ssl;
  ssl_certificate     /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/hirooooo-lab.com/privkey.pem;
}

これで最低限のSSL接続をする設定はできたので、Nginxをrestartすれば完了です。

$ sudo systemctl restart nginx

Nginxのリバースプロキシの設定

今回はapiとしてサーバーを立てたので、SSLで受けた接続をサーバー内の8000番ポートにリバースプロキシする設定を追加したいと思います。
/etc/nginx/conf.d/server.confに以下の追記をします。

server {
  listen 443 ssl;
  ssl_certificate     /etc/letsencrypt/live/api.o-kami.info/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/api.o-kami.info/privkey.pem;
 # アクセス可能なIPアドレス、もしくはドメイン
  server_name hirooooo-lab.com;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $host;
  proxy_redirect off;
  proxy_max_temp_file_size 0;
  location / {
     proxy_pass http://localhost:8000;
  }
}

これでnginxをrestartすればSSLでhirooooo-lab.comにアクセスした場合に、localhost:8000にリバプロすることができました。

Let's EncryptでNginxにSSL接続してリバースプロキシする方法のまとめ

今回Let's Encryptを使ってSSL接続する方法をまとめてみました。
8000ポートにリバプロすることもできたので、これで作成したapサービスなんかをSSLで受けてリバースプロキシすることができます。
今回も完全に備忘録記事ですが、誰かの参考になれば幸いです。

証明書の更新方法についてはまた後日書きたいと思います。

関連記事

www.hirooooo-lab.com

2019-08-09追記
www.hirooooo-lab.com

参考リンク

qiita.com qiita.com