Apacheサーバで、リダイレクトの設定変更が反映されない

Apache設定

皆さまこんにちは!ウチイダユウゴです。

なんかWebサーバの話ばっかりしていますが、どっちかというとフロントよりの人間です(笑)

今回は、301リダイレクトをサーバ上で設定したときにハマッた事象をメモしておきます。

httpd.confで301リダイレクト設定を行う

Webサイトのサブドメインの切り替えに伴って、リダイレクトの設定をすることになりました。

発生したサーバ環境は以下です。

  • Cent OS 7.6.1810
  • Apache 2.4.6

htaccessでの設定だと、ほかの編集者が間違って消したり変えたりしちゃいそうで怖いので、今回はhttpd.confで変更を行うことに。

rewriteCondを旧ホスト名に指定し、rewriteRuleで新ホスト名を指定するだけの簡単な変更でした。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^sample-old.domain.com$
RewriteRule ^(.*)$ https://sample-neww.domain.com/ [R=301,L,NE]

旧サブドメイン内のすべてのページへのアクセスを、新しいサブドメインのルートにすっ飛ばすという豪快な設定に。(笑)
これでいいって、クライアント(社内担当者)がいうからね…

いちおうシンタックスチェックだけ通して、変更を反映します。

[root@xx-xx-xx-xx conf]# httpd -t
Syntax Ok
[root@xx-xx-xx-xx conf]# systemctl reload  httpd

以上。

再度変更をしても、反映されない!?

ふう。できたできた。
と思って実際にブラウザでアクセスしてみると、404エラーが。

あれ~、なんでだろ?と思いつつ、もう一度confファイルをよく見てみると、
RewriteRuleの記述にミスがありました。

正しくは「neww.domein.com」じゃなくて「new.domain.com」ね。
(※もちろん、実際の記述とは異なりますが(笑)、同じくらい簡単なタイプミスでした)

RewriteEngine On
RewriteCond %{HTTP_HOST} ^sample-old.domain.com$
# 間違えたので書き直し
# RewriteRule ^(.*)$ https://sample-neww.domain.com/ [R=301,L,NE]
RewriteRule ^(.*)$ https://sample-new.domain.com/ [R=301,L,NE]

さっきと同じようにreloadで設定を変更して、もう一度表示確認……
してみても、間違ったサブドメインに遷移する!なんで~?

原因:301リダイレクトはブラウザにキャッシュされる場合がある

シンタックスチェックは問題なしで、他のサブドメインは動いているので
サーバ自体の動作はきちんとできている(はず)。

この前のSSLのときに学びました。バグより先に自分の設定を疑え。

とはいえ、どう見てもconfファイルはちゃんと変更されています。
今回は、confファイル以外は触ってないし…。

ねんのため、restartでいったんサーバ停止してからの起動もやってみたものの効果なし。

ていうか、これってほかのユーザーも404エラー出てる…??
原因分からないでサービス死んでるってヤバイぞ!!変な汗出てきた。。。

お手上げになったので、同僚に頼んで彼のPCからアクセスしてもらったところ、
何の問題もなく正しいサブドメインへリダイレクトされました。

この事象…こ、これは…キャッシュだ!!

調べてみると、301リダイレクトの設定はChromeでキャッシュされるらしいです。

リダイレクト設定のキャッシュは、Chromeの場合は以下の手順でクリアできます。

  1. Shift + Ctrl + i キーで管理者ツールを起動
    (Macの場合はoption + command + i )
  2. [NetWork]タブを開き、[Disable Cache]にチェックを入れる
  3. 遷移元のURLへアクセスする
Chrome デベロッパーツールで、キャッシュをしない設定にする方法

ステータス301は「恒久的な変更」なので、いちいち古い内容にリクエスト飛ばす必要もないのかもしれませんけど…

それってあくまで「仕様上の話」ですよね。現実は仕様通りにはいかないものなのです。
検索したら、結構いろんな人がこれでハマッてる経験をお持ちのようでした。

今回みたいに、正しくない内容でキャッシュしてしまったらどうするのでしょう??

しかも、管理者ツール経由でないとキャッシュクリアできないとは…
一般のユーザーではなかなか自力解決するのは難しいですね。

Googleさんはその辺どういう認識なんでしょうね?

まぁ、そもそも301リダイレクトの設定をミスるなという話なんですけどね!(´;ω;`)

まとめと反省

今回は依頼メールの文面をコピペしてリダイレクト設定を作ったんですけど、
メールの内容がタイプミスしていたことがそもそもの原因です。

1回目に設定反映する前に、変更後のURLにブラウザでアクセスしてみていれば気付くことができるものでした。

自分が行おうとしている変更が、本当に想定通りに動くのか?
という視点で、きちんと確認作業をするようにしなければなりませんね。。。

サーバ管理者は慎重かつ疑り深くあれ、という格言的なものを思い出した事例でした。。。

余談

ようやくゴールデンウィークの休みボケも抜けて、もろもろ作業のスピードが回復してきました。

先週はひどかったなあ…。正直、お仕事中も眠かったし。

長いお休みは必ず昼夜逆転してしまいます。気を付けないと~。

これから6月いっぱいは連休もなく、ペースを守りやすい時期ですね。
お仕事しっかりこなしつつ、勉強もブログ更新も計画的に進めていきたいです(o^^o)

それでは、最後まで読んでいただきありがとうございました(/・ω・)/

コメント

タイトルとURLをコピーしました