110:hostsファイルを変更してドメイン登録と異なるIPアドレスにアクセスする

プログラミング迷子: 名前ベースのバーチャルホストを設定したらssh port forwarding経由でアクセスできなくなった

  • 後輩W:ssh port forwardingでlocalhostの8000番ポートを開発サーバーの80番ポートに転送したんですが、ブラウザから、 http://localhost:8000/ にアクセスしてもサイトが表示されませんでした。

  • 先輩T:Nginxの設定で localhost が不正なドメイン名として扱われてるんじゃない?

  • 後輩W:正しいURLは http://app.example.com/ ですけど、今はIP制限しているので社外からはアクセスできないんです。こういう場合、どうすればいいですか?

  • 先輩T:端末のhostsファイルを変更して、ドメインのIPを指定すれば良いよ。

ssh port forwardingはlocalhostのポートへのアクセスを転送する仕組みです。 このため、ブラウザで転送先のサーバーにアクセスしようとした場合、ドメイン名はlocalhostを指定する必要があります。 しかし、通常そのような正式名以外のドメイン名でのアクセスは拒否するよう設定されています。

ベストプラクティス

hostsファイル を変更して、ドメイン名に任意のIPアドレスを関連づけます。 hostsファイルは DNS よりも先に参照される、IPアドレスとドメイン名の対応を記載したテキストファイルです。 今回の例では、以下の内容を /etc/hosts ファイルに追記します 1

リスト 4.6 /etc/hosts
127.0.0.1 app.example.com

これで、 app.example.com への通信はIPアドレス 127.0.0.1 へ送信され、ssh port forwarding経由でサーバーへリクエストが送られます。 このように 閉じられた環境のWebサイトにアクセスするときに使うと便利です。

/etc/hosts を変更すれば、存在しないドメインの定義も行えます。 この方法で、DNSに登録される前に正式なドメイン名を使った動作確認をしたり、DNSの切り替え検証などに利用できます。

1

Windowsでは C:\Windows\System32\drivers\etc\hosts にあります

cover

(中略)詳細は書籍 自走プログラマー をご参照ください

関連