操作
機能 #177
未完了task2.call2arm.com CORS エラー修正 - Access-Control-Allow-Origin重複問題
ステータス:
解決
優先度:
急いで
担当者:
-
開始日:
2025-06-04
期日:
進捗率:
0%
予定工数:
説明
問題概要¶
task2.call2arm.com から task.call2arm.com へのAPIアクセスでCORSエラーが発生
現象¶
- ブラウザコンソールエラー: "The 'Access-Control-Allow-Origin' header contains multiple values 'https://task2.call2arm.com, https://task2.call2arm.com', but only one is allowed."
- 全てのRedmine API呼び出しが失敗(projects.json, issues.json, users/current.json等)
原因分析¶
task.call2arm.com のNginx設定でAccess-Control-Allow-Originヘッダーが重複設定されている可能性
修正作業¶
- task.call2arm.com nginx設定確認
- CORS設定重複箇所の特定・修正
- Docker/nginxコンテナ再起動
- 動作確認
影響範囲¶
- task2.call2arm.com の全機能(ダッシュボード、チケット、プロジェクト等)
- Redmine UI統合機能
Redmine Admin さんが10日前に更新
調査進捗報告¶
発見事項¶
- task.call2arm.com APIサーバーが停止中: HTTP 502エラー発生
- 現在動作中のサービス: facty-web, facty-api のみ
- CORSヘッダー: 単体では正常(重複なし)
CORS設定確認結果¶
curl -H "Origin: https://task2.call2arm.com" -I https://task.call2arm.com/api/projects.json
# 結果: access-control-allow-origin: https://task2.call2arm.com(重複なし)
問題の根本原因¶
- CORSエラーの原因: task.call2arm.com のAPIサーバー(ポート3005)が停止している
- 502 Bad Gateway でも nginx が CORS ヘッダーを重複設定している
次のアクション¶
- task.call2arm.com のサービス設定ディレクトリを特定
- Docker Compose でサービス起動
- nginx設定からCORS重複設定を削除
Redmine Admin さんが4日前に更新
🔍 現象確認完了 - 問題特定¶
現状分析結果¶
実際の問題: CORS重複ではなく、API routing設定の不備
確認された現象¶
- 404エラー多発: task2.call2arm.com/api/* → 404 Not Found
- 不正なAPI呼び出し: task2.call2arm.com が自身の /api/ を呼び出し中
- Redmine API未接続: dev.call2arm.com への適切なプロキシ設定なし
技術的詳細¶
- nginxプロキシ: task2-api:3002/api/ → 正常動作
- task2-api Routes: RAG専用エンドポイントのみ(/api/embeddings, /api/documents など)
- 欠落機能: Redmine API プロキシ(issues.json, projects.json など)
🎯 必要な修正作業¶
-
task2-api: Redmine APIプロキシ機能追加
-
/api/issues.json
→dev.call2arm.com/issues.json
-
/api/projects.json
→dev.call2arm.com/projects.json
-
/api/users/current.json
→dev.call2arm.com/users/current.json
-
-
環境変数設定:
REDMINE_URL=https://dev.call2arm.com
- API Key設定確認
-
CORS設定: dev.call2arm.com 側の設定確認
影響範囲¶
- task2.call2arm.com の全Redmine UI機能
- ダッシュボード、チケット、プロジェクト管理
次のアクション: task2-api にRedmine APIプロキシルーター追加実装
Redmine Admin さんが4日前に更新
🔧 修正作業実施 - nginx プロキシ設定追加¶
実施内容¶
- Redmine APIプロキシ機能追加: nginx設定にdev.call2arm.com向けのプロキシルール追加
-
正規表現パターン設定:
/api/(issues|projects|users|trackers|issue_statuses|enumerations)\.json$
- CORS設定適用: クロスオリジンアクセス許可
-
API Key自動付与:
key=feb66d81a5f4ff9c585ce30fce2ac06e0554aec6
自動追加
技術詳細¶
location ~ ^/api/(issues|projects|users|trackers|issue_statuses|enumerations)\.json$ {
proxy_pass https://dev.call2arm.com$request_uri;
proxy_set_header Host dev.call2arm.com;
set $args "${args}&key=feb66d81a5f4ff9c585ce30fce2ac06e0554aec6";
# CORS headers for Redmine API
add_header "Access-Control-Allow-Origin" "*" always;
add_header "Access-Control-Allow-Methods" "GET, POST, PUT, DELETE, OPTIONS" always;
add_header "Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept, Authorization, X-Redmine-API-Key" always;
}
確認結果¶
- dev.call2arm.com API: 正常動作確認済み(直接アクセステスト成功)
- nginx設定: 構文チェック OK
- コンテナ再起動: 完了
🎯 次のアクション¶
nginx設定の優先順位調整が必要。現在はフォールバック /api/
ルールが先に適用されている可能性。
推奨対応: location ブロックの順序変更またはより具体的なパターンマッチング実装
Redmine Admin さんが4日前に更新
- ステータス を 新規 から 進行中 に変更
🔄 進行中 - nginx設定調整継続¶
実施済み内容¶
- nginx設定修正: 複数のアプローチで Redmine API プロキシ設定追加
- location優先度調整: 具体的パスを正規表現より優先
- SSL設定追加: proxy_ssl_verify off 追加
- CORS設定完了: クロスオリジンアクセス許可設定
現在の状況¶
- nginx構文: 正常
- コンテナ再起動: 完了
- 問題: まだ task2-api にルーティングされている
🔍 技術的分析¶
nginx location マッチング優先度の問題が継続。以下の要因が考えられる:
- Docker ネットワーク内の名前解決問題
- nginx 設定キャッシュ
- load balancer レベルでの振り分け
📋 次期アクション候補¶
- 直接API統合: task2-api内にRedmineプロキシ機能実装
- nginx設定詳細調査: アクセスログ・エラーログ分析
- 代替ルーティング: 異なるパスでのRedmine API提供
進捗: nginx設定は機能するが、最終ルーティングで課題継続中
Redmine Admin さんが4日前に更新
✅ 解決完了 - task2-api内Redmineプロキシ実装¶
🎉 修正内容¶
- app.js更新: redmineルーター統合、CORS設定強化
- redmineルーター実装: 完全なRedmine APIプロキシ機能
- エラーハンドリング: 包括的エラー処理とログ出力
- SSL設定: httpsAgent追加でdev.call2arm.com接続安定化
📊 動作確認結果¶
API動作確認¶
- ✅
/api/issues.json
: 正常レスポンス - ✅
/api/projects.json
: 正常レスポンス - ✅
/api/redmine/health
: 接続確認OK - ✅ CORS設定: クロスオリジンアクセス正常
UI動作確認¶
- ✅ ダッシュボード: 実データ表示(新規73件、進行中13件等)
- ✅ プロジェクト選択: 6プロジェクト正常表示
- ✅ ネットワークリクエスト: 全API呼び出し200応答
🔧 技術的解決策¶
選択したアプローチ: task2-api内統合
- 利点: 単一APIエンドポイント、RAG統合準備完了
- 実装: Express routerによるプロキシ、axios HTTPSエージェント
- 設定: dev.call2arm.com向け、APIキー自動付与
🎯 RAG統合への準備¶
現在の実装により以下が可能に:
- Redmineデータ: ベクトル化対象として利用可能
- 統合API: RAG機能とRedmine APIの統一提供
- Claude連携: Redmineコンテキストを活用したAI応答
結論: CORS/API routing問題完全解決。task2.call2arm.comでRedmine機能正常動作確認済み。
Redmine Admin さんが4日前に更新
- ステータス を 進行中 から 解決 に変更
チケット#177 CORS問題解決完了。task2-api内Redmineプロキシ実装により、task2.call2arm.comでのRedmine API呼び出し正常動作確認済み。
操作