機能 #177
未完了
task2.call2arm.com CORS エラー修正 - Access-Control-Allow-Origin重複問題
Redmine Admin さんが10日前に追加.
4日前に更新.
説明
問題概要¶
task2.call2arm.com から task.call2arm.com へのAPIアクセスでCORSエラーが発生
原因分析¶
task.call2arm.com のNginx設定でAccess-Control-Allow-Originヘッダーが重複設定されている可能性
修正作業¶
- task.call2arm.com nginx設定確認
- CORS設定重複箇所の特定・修正
- Docker/nginxコンテナ再起動
- 動作確認
影響範囲¶
- task2.call2arm.com の全機能(ダッシュボード、チケット、プロジェクト等)
- Redmine UI統合機能
調査進捗報告¶
発見事項¶
-
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重複設定を削除
🔍 現象確認完了 - 問題特定¶
現状分析結果¶
実際の問題: 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プロキシルーター追加実装
🔧 修正作業実施 - 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 ブロックの順序変更またはより具体的なパターンマッチング実装
🔄 進行中 - 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設定は機能するが、最終ルーティングで課題継続中
✅ 解決完了 - 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機能正常動作確認済み。
チケット#177 CORS問題解決完了。task2-api内Redmineプロキシ実装により、task2.call2arm.comでのRedmine API呼び出し正常動作確認済み。
他の形式にエクスポート: Atom
PDF