LoginSignup
7
4

More than 1 year has passed since last update.

【WebSocket対応】Nginxのリバースプロキシを使ったSymbolノードのSSL/TLS接続

Last updated at Posted at 2021-06-25

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

証明書取得

  1. ファイアウォールの設定で80番ポートを開けておく
  2. すでにNginxなど80番ポートを使用しているプロセスがあれば一旦停止する。
  3. 下記コマンドで証明書を取得する
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と表記されるが、表記されるまで数時間ほどかかる。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4