質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

3039閲覧

AWS ALB配下で「リダイレクトが繰り返し行われました。」

winterboum

総合スコア23567

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Elastic Load Balancing

Elastic Load Balancingは、Amazon社が提供する、 EC2インスタンス間で自動的にトラフィックの負荷分散を行うサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/05/27 06:57

編集2020/05/28 09:40

「AWS ALB配下で運用していた Rails on nginx が突然 リダイレクトが繰り返し行われました。」でアクセスできなくなりました。
ちとおかしな修正があって、localでは動くがサーバー上で起動出来ない という状況原因確認のため、git bisectしたりbundle install したり、などして config.eager_load が原因か、とやっと起動出来たとおもったら発生。

一台のECインスタンス上で 二つ example.jp と evaluate.example.jpを運用していますが、前者は今までどおり動きます。
googleで調べてみたのですが、解決に至りませんでした。
よろしくお願いします。

evaluate_example.conf は以下です

upstream example_evaluate{ server unix:/opt/www/evaluate/shared/tmp/example.sock ; } server { server_name evaluate.example.jp; root /opt/www/evaluate/current/public; index index.html; access_log /var/log/nginx/evaluate.access.log ; error_log /var/log/nginx/evaluate.error.log warn; client_max_body_size 20M; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; location / { proxy_pass http://example_evaluate; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

example.confはこれと全く同じです。
upstream server_name access_log error_log proxy_pass
が異なるだけ。

試したこと

  1. クッキー削除 : 変わらず
  2. location / に以下を追加してみたが、変わらず
location / { if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } proxy_pass http://example_evaluate;
  1. googleでの調査では .httpaccessでの設定が多く見られたが、nginxなので使えない
  2. firefoxでトライ。同じエラー

###追記

ALBのリスナー設定
View/edit画面
ターゲットグループの設定

*モニタリングは一番上
*HELTHチェックは example.jpで、evaluate.example.jpではないです

nginxとALBでどこかリダイレクトの設定
ALBでのリダイレクトは(意識にあるのは)80 => 433 だけです。
nginx の設定は上にあるとおりですが、リダイレクトはしていないつもりです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2020/05/28 02:22

ALBのリスナー設定とターゲットグループの設定はどうなっていますか? また、nginxとALBでどこかリダイレクトの設定をしているところはありませんか?
winterboum

2020/05/28 07:48

ありがとうございます。追記しました
yu_1985

2020/05/28 08:04

念の為nginx.confも確認してみてください。
yu_1985

2020/05/28 08:27

テキストで書いても分かりづらいので、隠すべきところをマスクした上でスクリーンショットを貼り付けたほうがわかりやすいかなと。
winterboum

2020/05/28 08:49

nginx.confもリダイレクトは無いようです
yu_1985

2020/05/28 09:32

その画面だとリスナールールはデフォルトのものしか表示されてないので、View/edit rulesをクリックして他のルールが設定されないかも確認してみてください。
yu_1985

2020/05/28 09:32

少なくとも ``` if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } ``` は不要かと思います。
yu_1985

2020/05/28 14:32 編集

そのURLはCLBでの話ですよね? 今回はALB側でリダイレクトの設定をしているのでその上でサーバ上でもリダイレクトさせるとおかしなことになります。(ALB→EC2のリクエストは80番ポートに向かうので、それを443にリダイレクトさせようとするとリダイレクトループになります) CLBしかない頃はロードバランサー側でリダイレクトの設定を行うことができなかったのでWEBサーバで設定する必要がありました。
winterboum

2020/05/28 22:38

それはしらなかった。。 実はその部分(if (。。。})なしで数カ月運用出来ていたのに突然だめになったので頭を抱えています、 同じサーバー、同じnginxで動いているもうひとつのvertualドメインの方は以前のまま「その部分」なしのままでアクセスできています。 ので、ますますわからない。
yu_1985

2020/05/29 02:32

target-infoとelb〜で設定しているインスタンスは異なるのでしょうか?今回のドメインでアクセスさせてるのは後者ということでいいですか? また、80番ポートのルールの方ではリダイレクト以外のことはしていないですか? あと気になるところは、アプリ/サイトの方でリダイレクトしていないかですかね。 両者は同じものを参照しているんですか? それと、301リダイレクトの設定をChromeがキャッシュしてしまうことがあるのでご注意を。 Chromeとそれ以外のブラウザで挙動が違う、なんてときはこれを疑ってください https://gotohayato.com/content/100/
winterboum

2020/05/29 03:18

いま二つインスタンスがELBをつかっています。 target-info  と example.jp(evaluate.example.jpもここ) で、今回の問題は example.jp(evaluate.example.jpもここ)のペアの方です 80番ポートのルールの方ではリダイレクト以外のことはしていないです アプリ/サイトの方でリダイレクト:これは アプリの中でRails の redirect_to は多用していますが、そこまで行かない TOPへのアクセスですので無関係ですよね。。 サイトでは「質問」の載せた nginx関係のconfの通りなのでproxy_pass へのForwardedはありますが、リダイレクトは 追加を試みた if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; } だけです。 なお、キャッシュは何度もクリアしています。firefoxでも同じ症状でした。
yu_1985

2020/05/29 03:34

アプリごとに個別に設定したconfだけではなく、そもそものnginx.confになにか設定を入れたりはしてませんか? >両者は ここは言葉足らずでした。 evaluate.example.jpとexample.jpが指しているソースは同じか、という意味です。 RailsのほうではHTTP→HTTPSにするようなものはない、ということですかね。 ちなみにchromeのリダイレクト設定のキャッシュは通常のキャッシュクリアだと消えてくれないことがあります。 今回は別ブラウザでも同じ挙動なので関係なさそうですが…。 リダイレクトループ発生時のnginxのログやRailsのログを見てみたらなにか出ているかもしれません。
winterboum

2020/05/29 08:21

すみません、これ報告漏れ nginx.conf もなかったです。 evaluate.example.jpとexample.jpが指しているソース nginxのconf も Railsもソースは違います。 evaluate は そうで無い方の staging ですので、ほぼ同じだが違いはあります。 confはサーバ名に関わる所、root、upstream が異なります。
yu_1985

2020/05/29 08:47

両者で異なる部分をしらみつぶしに見比べてみるしかないですね。 片方でうまく行っていてもう片方でうまく行かないというのは何かしらの差異によって生まれている可能性が高いです。 ときにはほんの僅かな違い(それこそ1文字入っているかいないか)によって挙動が異なる場合があります。 また、同じリクエストを送ってログを見れば何かしら違いが見えるかもしれないので、設定をじっくり見直すとともにログの内容も確認してみてください。
winterboum

2020/05/29 09:15

ありがとうございます。 腰を据え差を見つけてみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問