Dockerのnginx-proxyを使ってる環境で「ERR_TOO_MANY_REDIRECTS」リダイレクトが繰り返し行われました。

docker
スポンサーリンク

環境

  • Docker
    • jwilder/nginx-proxy でリバースプロキシ利用
    • Apache2.4
      • .htaccess 使用

事象

Dockerのnginx-proxyを使ってる環境で、その配下のApacheサーバにWebブラウザでアクセスすると、
「ERR_TOO_MANY_REDIRECTS」
リダイレクトが繰り返し行われました。

のメッセージが表示され、Webサイトが正常に閲覧できない。

原因

nginx-proxyとapacheの.htaccessの両者でリダイレクトを繰り返しちゃってる。

  • nginx-proxy では、443でレスポンスを返すが、配下のApacheへのアクセスは80番ポートで行う
  • Apacheの.htaccessでは、URL正規化(httpsへの強制リダイレクト)設定を行っている

処理の流れとしては、

  1. Webブラウザでアクセスされる
  2. nginx-proxyは443ポートでリクエストを受け取る
  3. nginx-proxyがApacheに対しては80番ポートでリクエストをかける
  4. Apacheの.htaccess では、80番ポートで来てるので、443のページで再度アクセスさせる
  5. nginx-proxyが443ポートでリクエストを受け取る
  6. nginx-proxyがApacheに対しては80番ポートでリクエストをかける
  7. 繰り返しループ

という感じになっちゃってた。

対処

  • 本番サーバではレンタルサーバを利用しておりURL正規化は外せない
  • 本番サーバとテストサーバでは同じソースを使いたい。.htaccessも含めて

なので、.htaccessを編集した。

.htaccessに書いてるリダイレクトでは、

  • 本番サイトではURL正規化をするが
  • テストサイトではURL正規化をしない

というふうにすれば良い。

なので、以下の一行を付け足す。

RewriteCond %{HTTP_HOST} ^example.com$

全体のサンプル

RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

コメント