Files
redirect/README.md
2026-02-15 08:09:19 +00:00

208 lines
4.7 KiB
Markdown

# 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 <release-name>-nginx-redirect -o yaml
```
3. Ingressの設定を確認:
```bash
kubectl describe ingress <release-name>-nginx-redirect
```
### SSL/TLS証明書の問題
cert-managerが正しく動作しているか確認:
```bash
kubectl get certificate
kubectl describe certificate nginx-redirect-tls
```
## ライセンス
MIT License