# Nginx Redirect Helm Chart セキュアな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