SymbolノードをHTTPS化する方法はいくつかありますが、今回はNginxのリバースプロキシを使って実現していきたいと思います。
元はhttp-portalでやっていたのですが、権限周りとかでメンテが大変なので完全にノードと分離する方法をとりました。
環境
- Ubuntu 20.04LTS
- Symbol-bootstrap v1.0.7で構築したノード
前提条件
- Symbolノード構築済みであること
- ドメインを取得し、ノードのHOSTとして設定していること(VPS等で提供されている逆引きDNSでも可)
証明書の取得
Let's Encryptを利用して無償で証明書を取得します。
Let's Encrypt導入
sudo apt update -y && sudo apt upgrade -y
sudo apt install letsencrypt -y
証明書取得
- ファイアウォールの設定で80番ポートを開けておく
- すでにNginxなど80番ポートを使用しているプロセスがあれば一旦停止する。
- 下記コマンドで証明書を取得する
bash
sudo letsencrypt certonly --standalone -d {ドメイン}
# Enter email address (used for... と聞かれるのでメールアドレスを入力してEnter
# Please read the Terms of Service at... と聞かれるので、規約に同意する場合は"A"と入力してEnter
# その後、メルマガ配信の可否を聞かれるので "Y"または"N"を入力してEnter
正常に取得できると、以下の場所にファイルが格納されている。
/etc/letsencrypt/live/{ドメイン}/fullchain.pem
/etc/letsencrypt/live/{ドメイン}/privkey.pem
※手順2.でプロせスを停止していた場合は再開しておk
Nginxの設定
Nginx導入
bash
sudo apt install nginx -y
設定ファイルを作成
※エディタはもちろんお好みで
bash
vim /etc/nginx/conf.d/symbol.conf
設定内容を入力
symbol.conf
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server{
listen 3001 ssl;
server_name {ドメイン};
proxy_http_version 1.1;
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;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
ssl_certificate /etc/letsencrypt/live/{ドメイン}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{ドメイン}/privkey.pem;
location / {
proxy_pass http://localhost:3000/;
}
}
設定内容のテスト
bash
sudo nginx -t
# エラーがなければ正しく設定がなされている
Nginx起動
bash
sudo systemctl start nginx
ノードを再起動
この手順を実施してる際にノードが止まってしまう事があるのでその場合は再起動する
targetディレクトリがある場所で
symbol-bootstrap stop
symbol-bootstrap run -d
# ノードを再起動した場合、nginxも再起動する
sudo systemctl restart nginx
証明書の自動更新設定
Let's Encryptで取得した証明書は90日間で有効期限が切れてしまうため、自動または手動で適宜更新する必要がある。
自動化する場合は下記ページなどを参照
https://it-jog.com/khow/serv/renewletsencrypt
接続確認
自身のノードにhttpsでアクセスし、有効になっていることを確認する。
https://{ドメイン}:3001/node/info
https対応ノードはノードリストにhttpsと表記されるが、表記されるまで数時間ほどかかる。