自宅サーバーで5つも6つもサービスを動かしてると、ポート番号でアクセスするのが面倒になる。Jellyfinは:8096、Giteaは:3000、Grafanaは:3001…。全部覚えられない。
リバースプロキシで全部の入り口を一つにまとめるのがスマートな解決策だ。Nginxを玄関に置いて、ドメイン名でアクセス先を振り分ける。`jellyfin.mame-mame.org`はJellyfinへ、`git.mame-mame.org`はGiteaへ——全部443番ポートでOK。
Nginxリバースプロキシの基本設定:
server {
listen 443 ssl http2;
server_name jellyfin.mame-mame.org;
ssl_certificate /etc/letsencrypt/live/mame-mame.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mame-mame.org/privkey.pem;
location / {
proxy_pass http://192.168.20.10:8096;
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;
}
}
重要な設定項目:
- `proxy_set_header` — バックエンドに元のリクエスト情報を伝える。これを忘れるとバックエンド側で「全部Nginxからのリクエストに見える」状態になり、IP制限やログが機能しなくなる。
- バッファリング設定 — `proxy_buffering off;` が必要なケース(WebSocket、SSE、ストリーミング)。Jellyfinやチャットアプリでは必須。
- タイムアウト — 長い処理が必要なバックエンド用に`proxy_read_timeout`を延ばす。
さらにワイルドカードSSL証明書(Let’s Encryptで`*.mame-mame.org`を取得)を使えば、新しいサービスを追加するたびに証明書を発行し直さなくていい。Nginx Proxy Managerを使えば、これらを全部GUIで管理できてさらにラク。
リバースプロキシを導入してから、「このサービスは何番ポートだっけ?」がなくなった。全部のサービスが`https://サービス名.mame-mame.org`でアクセスできる幸せ。