ほとんどのセルフホストアプリは 127.0.0.1:3000 のようなローカルポートで待ち受け、素の HTTP を話します。リバースプロキシは前面のポート 80/443 に立ち、本物の証明書で HTTPS を終端し、トラフィックをそのローカルポートへ転送します — きれいな https://app.yourdomain.com を与え、一つの IP の背後で複数のアプリを動かせるようにします。ここでは一般的な二つの道を示します。
前提条件
- サーバーの IP を指す A レコードを持つドメイン(DNS 伝播を待ってください)。
- ポート 80 と 443 が開いていること — UFW ファイアウォールの設定方法を参照。
- アプリがローカルで動いていること、たとえば
127.0.0.1:3000で。
選択肢 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 を提供するよう設定を書き換え、自動更新を用意します。
正直な注意点
- DNS とポートがいつもの失敗要因です。 A レコードはここを指し伝播済みでなければならず、80/443 は到達可能でなければ、証明書の発行は失敗します。直せばどちらのツールも再試行します。
- 意図したものだけを公開してください。 アプリを
127.0.0.1にバインドしたままにし、直接ではなくプロキシ経由でのみ到達できるようにします。 - HTTPS にはドメインが必要で、生の IP では不可です — Let's Encrypt は名前に発行します。
次のステップ
リバースプロキシこそ、一台のサーバーに多くのものを提供させる仕組みです — 一つの IP の背後で複数サービスをセルフホストを参照。アプリをコンテナで動かしていますか? Docker のインストール方法から始めてください。アプリ自身を再起動やクラッシュから生き延びさせるには、systemd サービスの作り方を参照してください。
コメント
まだコメントはありません。最初になりましょう。