環境
- 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への強制リダイレクト)設定を行っている
処理の流れとしては、
- Webブラウザでアクセスされる
- nginx-proxyは443ポートでリクエストを受け取る
- nginx-proxyがApacheに対しては80番ポートでリクエストをかける
- Apacheの.htaccess では、80番ポートで来てるので、443のページで再度アクセスさせる
- nginx-proxyが443ポートでリクエストを受け取る
- nginx-proxyがApacheに対しては80番ポートでリクエストをかける
- 繰り返しループ
という感じになっちゃってた。
対処
- 本番サーバではレンタルサーバを利用しており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]
コメント