1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

REDMINEをAWSのCloudFrontで配信しようとしてハマった話

Posted at

はじめに

AWSのサービスを評価する目的で、社内サーバーで運用しているREDMINEをAWS上に持っていこうということになりました。ついでにALBやCloudFrontを使ってAWS WAFなんかの評価もできたらいいよねー、などと簡単に考えていたら、思わぬところでハマったので備忘録として残しておきます。

発生した現象 その1

EC2→ALB→CloudFrontの順番で実装。

インターネットから直接ALBを叩くと問題なく接続できることを確認後、CloudFront経由でのテスト開始。ログインID・PW入力し、「ログイン」ボタンを押したところ422 Invalid form authenticity token.というエラーが出てREDMINEが使えません。

確認と設定 その1

log/production.logを確認したところ、Can't verify CSRF token authenticityというエラーメッセージを発見。ググったところ、次のページを見つけました。

stack overflow - AWS Cloudfront causing CSRF Token Mismatch Exception

上記ページの回答から Fowarding cookies が問題だということで、CloudFront の Behaviors タブ、Foward Cookies の Whitelist に_redmine_sessionを書き込んだところ、うまく動くようになりました。(Foward Cookies は「None」から「Whitelist」に変更)

発生した現象 その2

チケットの添付ファイルをアップロードしたところ、ファイルが消えてなくなってしまう現象が発生。さらに、プロジェクトの「ファイル」タブからアップロードすると「ファイルは不正な値です」というメッセージが表示されてしまいます。
今度もALB経由だと正常にアップロードできたので、CloudFrontの問題だと切り分けができました。

確認と設定 その2

log/production.logを確認するも、エラーメッセージは出ていません。
Apache側に何か出ていないかと思い、httpd/access_logを見たところ、ALB経由のときのログと比較して明らかに文字列が短い。比較すると、Query Stringがすっぽり抜けていることが分かりました。

対応として、先ほどと同じくCloudFrontのBehaviors タブ、Query String Forwarding and Cachingの値をFowrward all, cache based on allに変更したところ、正常にアップロードできるようになりました。

おわりに

エラーログの確認は基本中の基本ですね。

今回はログをすぐに確認せず、画面に表示されたメッセージだけで調査を開始したので原因にたどり着くまで時間がかかってしまいました。大反省です。ALB経由だと正常動作していたので、ログベースで比較できたのは良かったと思います。

CloudFrontは調査に時間がかかるため、こんな情報でも役に立つかもしれないと考えアップしておきます。お付き合いいただきありがとうございました。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?