2,383 views
1. 問題発生
レンタル共有サーバー上に設置している WEBサイトで起こったこと。
昨日まで正常に閲覧できていたのに突然…
500 Internal Server Error
が発生して閲覧できなくなった!
WEBサーバー上のプログラムは何も変更していないのに。
何が起こった?
2. 原因
レンタルサーバー会社に問い合わせたところ、以下のような回答をいただきました。
弊社サーバーでは外部のデータベースへのアクセスができない仕様となっております。
当該コアサーバーで作成されたデータベースとの紐づけを行われる場合には、
対象データベース情報にも記載されておりますが
「接続ホスト名」を【localhost】に設定
の上運用いただけますと幸いでございます。
そういうことだったんですね…
3. 対策
MySQL接続時のホスト指定を
127.0.0.1
から
localhost
に変更した。
$con = new mysqli('localhost', $user, $pw, $dbname);
逆方向は何度か経験しているのだが今回は…
4. 動作の違いは?
localhost → 名前解決のプロセスを実行する。
127.0.0.1 → 名前解決のプロセスを実行しない。(=スキップできる)
これについて、ChatGPT大先生の説明は以下の通り。
HTTP通信において、localhostと127.0.0.1は共にローカルマシンにアクセスするために使用されますが、その背後で動作するプロセスには微妙な違いがあります。
127.0.0.1 は、IPv4アドレス空間におけるループバックアドレスです。このアドレスを使用してネットワークリクエストを行うと、システムは外部ネットワークに出ることなく直接自身にリクエストをルーティングします。これは、ネットワークスタックを通じて、しかし外部ネットワークには出ずに、自分自身に対して通信を行う一種のショートカットと考えることができます。
localhost は、通常127.0.0.1にマッピングされるホスト名です。localhostを使用する場合、システムは名前解決プロセスを経由します。つまり、localhostという名前をIPアドレスに解決する必要があります。この名前解決は、ほとんどのオペレーティングシステムでホストファイルやローカルDNSリゾルバを通じて行われます。localhostはIPv6環境では::1に解決されることもあります。
違いの要点:
名前解決: localhostは名前解決のプロセスを必要とし、これが127.0.0.1と直接指定する場合との主な違いです。
127.0.0.1は直接IPアドレスなので、名前解決のステップをスキップします。
対応するIP: localhostは環境に応じてIPv4の127.0.0.1やIPv6の::1など、異なるループバックアドレスに解決される可能性があります。
どちらの方法もローカルマシン上でのテストや開発に広く利用されますが、この微妙な違いが意味するところは、使用する環境や要件によって、一方が他方より適している場合があるということです。たとえば、名前解決の挙動をテストする場合やIPv6環境での動作を確認したい場合は、localhostを使用すると良いでしょう。
5. 所感
・現状は他のマシン上の DBにアクセスする必要はないので、個人的には問題なし。
・なぜ前日まで数年間問題なく動作していたのか?
→ 仕様変更後の猶予期間だったんでしょうかね?
6. 参考
有用な情報をありがとうございます。m(_ _)m
https://qiita.com/TanukiTam/items/f6a08740d0fcda0db7be
http://rookie-teck-info.blogspot.com/2015/02/mysqllocalhost127001.html