ロードバランサーを経由してPOST投げたりするとdue to access control checkと言われて困り果てた時の対処
コンスタントに記事を更新と言ってからはや2ヶ月くらいでしょうか。。。笑
備忘録がてら出会ったことがないエラーにあったので久々に更新
概要
最近、ConoHaでアプリケーションサーバー2台の冗長環境を作ってくれないかと言われ割とお安めな価格で対処していた時のことです。
クライアントが新環境でアプリケーションの動作確認を行ってもらっていたところ
「Safariでログインとかサインアップできないんだけど調査おなしゃす!!」
というあまりやりたくない系のお願いをされたのがことの発端。
それで実際にSafariで動作確認してみると確かにログイン系の処理ができない。
超勘弁。ブラウザの要素検証したらdue to access control check
という文字が。
調べて見たらCORSの対策が打ててない時にでるっぽかった。
構成
インフラ
ConoHaロードバランサー
ConoHaVPS(アプリケーションサーバー) × 2
ConoHaVPS(DBサーバー) × 1
アプリケーション
Ruby on Rails 4.2.3
Ruby 2.3.0
MariaDB
解決策
Nginxの設定でCORSに関するヘッダー情報をリクエストに追加する設定を追記
location / { # ここから add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods "POST, GET, OPTIONS"; add_header Access-Control-Allow-Headers "Origin, Authorization, Accept"; add_header Access-Control-Allow-Credentials true; # この辺まで追記 proxy_set_header X-Real-IP $remote_addr; proxy_set_header Client-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://oceanworks-puma; }
これでログインできるようになった。
その他
最近、疲れが取れない。。。