diff --git a/README.md b/README.md index 28a9ec7..bce4e1d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,208 @@ -# redirect +# Nginx Redirect Helm Chart -Nginx Helm Chart specialized for Redirection \ No newline at end of file +セキュアなAlpineベースのNginxリダイレクト専用サーバーのHelmチャートです。 + +## 特徴 + +- **セキュリティ重視**: 管理画面なし、読み取り専用ファイルシステム、非rootユーザー実行 +- **3つのリダイレクトモード**: パス維持、ルートのみ、カスタムパス +- **完全な設定管理**: すべての設定をvalues.yamlで管理 +- **高可用性**: Pod Disruption Budget、Anti-Affinity設定 +- **Kubernetes標準**: Ingress自動統合 + +## インストール + +```bash +helm install my-redirect ./nginx-redirect -f custom-values.yaml +``` + +## リダイレクトモード + +### 1. パス維持モード (path-preserve) + +元のパスを維持したまま新しいドメインにリダイレクトします。 + +**例**: `https://old-domain.com/products/item1` → `https://new-domain.com/products/item1` + +```yaml +redirect: + mode: "path-preserve" + statusCode: 301 + targetDomain: "https://new-domain.com" +``` + +### 2. ルートのみモード (root-only) + +すべてのパスを無視して、指定したURLにリダイレクトします。 + +**例**: `https://old-domain.com/any/path` → `https://new-domain.com` + +```yaml +redirect: + mode: "root-only" + statusCode: 301 + targetDomain: "https://new-domain.com" +``` + +### 3. カスタムモード (custom) + +個別のパスごとに異なる転送先を指定できます。 + +```yaml +redirect: + mode: "custom" + statusCode: 301 + customPaths: + - path: "/old-page" + target: "https://new-domain.com/new-page" + - path: "/products" + target: "https://shop.example.com/products" + - path: "/blog/*" + target: "https://blog.example.com" + fallbackTarget: "https://default-domain.com" +``` + +**パスの種類**: +- **固定パス**: `/old-page` → 完全一致 +- **ワイルドカード**: `/blog/*` → `/blog/`以下のすべてのパスにマッチし、サブパスを保持 + +## セキュリティ機能 + +- **非rootユーザー実行**: UID/GID 101 (nginx) +- **読み取り専用ルートファイルシステム** +- **権限昇格の防止** +- **すべてのケーパビリティをドロップ** +- **Seccompプロファイル適用** +- **セキュリティヘッダー自動付与** + - X-Frame-Options + - X-Content-Type-Options + - X-XSS-Protection + - Referrer-Policy + +## 設定例 + +### 例1: サイトリニューアルでドメイン変更 + +```yaml +redirect: + mode: "path-preserve" + statusCode: 301 + targetDomain: "https://new-company-site.com" + +ingress: + hosts: + - host: old-company-site.com + paths: + - path: / + pathType: Prefix + tls: + - secretName: old-site-tls + hosts: + - old-company-site.com +``` + +### 例2: ランディングページから特定URLへ + +```yaml +redirect: + mode: "root-only" + statusCode: 302 + targetDomain: "https://campaign.example.com/special-offer" + +ingress: + hosts: + - host: promo.example.com +``` + +### 例3: 複数サービスへの振り分け + +```yaml +redirect: + mode: "custom" + statusCode: 301 + customPaths: + - path: "/shop/*" + target: "https://shop.example.com" + - path: "/blog/*" + target: "https://blog.example.com" + - path: "/support" + target: "https://help.example.com" + - path: "/contact" + target: "https://main-site.com/contact-us" + fallbackTarget: "https://main-site.com" +``` + +## HTTPステータスコード + +- **301**: 恒久的なリダイレクト (推奨: SEO評価を引き継ぐ) +- **302**: 一時的なリダイレクト (推奨: テストやキャンペーン用) + +## リソース要件 + +デフォルト設定: +- **CPU**: 50m (リクエスト) / 100m (上限) +- **メモリ**: 64Mi (リクエスト) / 128Mi (上限) + +高トラフィック環境では調整してください: + +```yaml +resources: + limits: + cpu: 200m + memory: 256Mi + requests: + cpu: 100m + memory: 128Mi +``` + +## ヘルスチェック + +`/health` エンドポイントで稼働状態を確認できます: + +```bash +curl http://your-domain.com/health +# 出力: healthy +``` + +## アップグレード + +```bash +helm upgrade my-redirect ./nginx-redirect -f custom-values.yaml +``` + +## アンインストール + +```bash +helm uninstall my-redirect +``` + +## トラブルシューティング + +### リダイレクトが機能しない + +1. Podのログを確認: + ```bash + kubectl logs -l app.kubernetes.io/name=nginx-redirect + ``` + +2. ConfigMapの内容を確認: + ```bash + kubectl get configmap -nginx-redirect -o yaml + ``` + +3. Ingressの設定を確認: + ```bash + kubectl describe ingress -nginx-redirect + ``` + +### SSL/TLS証明書の問題 + +cert-managerが正しく動作しているか確認: +```bash +kubectl get certificate +kubectl describe certificate nginx-redirect-tls +``` + +## ライセンス + +MIT License \ No newline at end of file