EQVPS

HTTPS 対応の nginx リバースプロキシを設定する方法

ローカルポートで待ち受けるどんなアプリの前にも、きれいなドメインと自動 HTTPS を置きます。二つの道: Certbot と組み合わせた nginx、または一行で自動 TLS を実現する Caddy。手順を追って、コピーして使える設定つきで。

ほとんどのセルフホストアプリは 127.0.0.1:3000 のようなローカルポートで待ち受け、素の HTTP を話します。リバースプロキシは前面のポート 80/443 に立ち、本物の証明書で HTTPS を終端し、トラフィックをそのローカルポートへ転送します — きれいな https://app.yourdomain.com を与え、一つの IP の背後で複数のアプリを動かせるようにします。ここでは一般的な二つの道を示します。

前提条件

選択肢 A — Caddy(自動 HTTPS、一行)

sudo apt install -y caddy
echo 'app.yourdomain.com { reverse_proxy 127.0.0.1:3000 }' | sudo tee /etc/caddy/Caddyfile
sudo systemctl restart caddy

これだけです — Caddy はドメインの Let's Encrypt 証明書を取得し、自動で更新します。

選択肢 B — nginx + Certbot

sudo apt install -y nginx certbot python3-certbot-nginx

/etc/nginx/sites-available/app を作成します:

server {
    listen 80;
    server_name app.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

有効化して HTTPS を追加します:

sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d app.yourdomain.com

Certbot は HTTPS を提供するよう設定を書き換え、自動更新を用意します。

正直な注意点

次のステップ

リバースプロキシこそ、一台のサーバーに多くのものを提供させる仕組みです — 一つの IP の背後で複数サービスをセルフホストを参照。アプリをコンテナで動かしていますか? Docker のインストール方法から始めてください。アプリ自身を再起動やクラッシュから生き延びさせるには、systemd サービスの作り方を参照してください。

よくある質問

リバースプロキシとは何で、なぜ必要なのですか?

アプリは普通、127.0.0.1:3000 のようなローカルポートで待ち受けます。リバースプロキシは前面のポート 80/443 に立ち、HTTPS を終端し、リクエストをそのローカルポートへ転送します。きれいなドメイン、有効な TLS 証明書、そして一つの IP の背後で複数のアプリを動かす能力を与えてくれます — アプリ自身はそのどれも担う必要がありません。

nginx と Caddy — どちらを選ぶべき?

Caddy が最速の道です。Let's Encrypt 証明書を自動で取得・更新し、動く HTTPS プロキシは設定一行です。nginx はより広く知られ柔軟ですが、TLS には Certbot を足します。手間を最小に HTTPS が欲しいなら Caddy を、すでに nginx を知っているか機能が要るなら nginx を使ってください。

ドメインは必要ですか?

信頼される HTTPS 証明書には必要です — Let's Encrypt は生の IP ではなくドメイン名に証明書を発行します。A レコードをサーバーの IP に向け、DNS 伝播を待てば、プロキシはその名前の証明書を取得できます。

どのポートを開けておくべきですか?

受信の 80 と 443 です。ポート 80 は最初の証明書チャレンジと HTTPS へのリダイレクトに使われ、443 は暗号化トラフィックを提供します。両方をファイアウォールで開き(UFW ガイド参照)、ほかの何かがすでに占有していないことを確かめてください。

証明書の発行はなぜ失敗するのですか?

ほぼ常に DNS かポートです。ドメインの A レコードはこのサーバーを指し伝播済みでなければならず、ポート 80/443 は到達可能(ファイアウォールで開いており、上流で遮断されていない)でなければなりません。この二つを直せば発行は成功します。Caddy も Certbot もどちらも再試行します。

コメント

まだコメントはありません。最初になりましょう。

コメントを残す

コメントは表示される前にモデレートされます。