11
8

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 5 years have passed since last update.

Chromeで意図しないリダイレクトが起きた場合の対処

Posted at

起きた現象と経緯

Chromeでメンテナンス画面表示のテストを行っていたところ、下記の現象が発生した。

  1. メンテナンスモードに切り替える
  2. 該当URLにアクセスしてメンテナンス画面をリダイレクト表示
  3. メンテナンスモードを解除
  4. 該当URLにアクセスすると、メンテナンスモード解除済みであるにも関わらず、なぜかメンテナンス画面にリダイレクトされてしまう

現象発生時、nginx.confで下記例のようなメンテナンス画面転送の設定がされている状況。

〜省略〜

geo $allow_ip {
    default 0;
    XXX.XXX.XXX.XXX 1;
}

server {
    listen      80;
    server_name hogehoge.hogehoge.jp;
    charset     utf-8;
    access_log  /etc/log/hoge.log ltsv;
    error_log   /etc/log/hoge-error.log warn;
    rewrite_log on;
    client_body_temp_path /tmp;
    client_max_body_size 75M;
    client_body_buffer_size 64k;

〜省略〜

    location / {
       if ($allow_ip) {
           break;
       }
       if (-f "/tmp/maintenance") {
           # メンテナンスのtmpファイルがある場合、301リダイレクト
           rewrite ^(.*)$ http://maintenance.hoge.jp? permanent;
       }

〜省略〜

    }
}

原因

上記のnginxの設定では、メンテナンス画面の表示に301リダイレクトを用いているが、Chromeは301リダイレクトのキャッシュを保持する仕様のため、キャッシュを読み取りメンテナンス画面にアクセスしてしまう動作になっていた。

リダイレクトキャッシュの削除方法

  1. Chromeのdevelopertoolを開き、networkタブの「Disable cache」をチェックする
  2. 該当のURLにアクセスする(リダイレクトされず正しく表示される)
  3. Chromeのdevtoolを開き、networkタブの「Disable cache」のチェックをはずす(はずしておかないとキャッシュ動作が一般ユーザー同等じゃなくなるので)

補足

  • Chrome以外はリダイレクトキャッシュしていないようなので、この現象は起きない
  • メンテナンス画面表示にはリダイレクトを用いずに503エラーを返しつつメンテナンス画面表示をするのがベターなようなので、そうしたほうがいいと思います(ページが移動したというわけではないので、リダイレクトは不適切だった)
11
8
0

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
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?