見出し画像

hostsファイルを入社一年目に向けて説明してみる

始めに

先日、入社二年目の後輩にhostsファイルについて聞かれたのでサラッと説明したのですが、残念ながら「???」という反応をされてしまいました。

hostsファイルについて簡単に説明している私(左)と理解できていない後輩(右)

次に聞かれたときに理解してもらえるように、最低限の知識をできるだけ分かりやすく書いてみたいと思います。

hostsファイルとは

何のファイル?

hostsファイルはホスト名とIPアドレスの組み合わせを管理しているファイルです。
組み合わせをhostsファイルに設定すると、ホスト名を自動的にIPアドレスに変換してくれます。この変換処理を「名前解決」と言います。

どこにあるの?

CentOSやUbuntuなどのLinuxなら
/etc/hosts

Windowsなら
C:\Windows\System32\drivers\etc\hosts

書き方は?

以下のように「IPアドレス」と「ホスト名」を半角スペースで並べて書きます。
# を記載すると、その行はコメントとして扱われます。

IPアドレス  ホスト名  別名
127.0.0.1        localhost
192.168.0.10  station10  station10.example.net
192.168.0.11  station11   station11.example.net
# コメントは#で書けます

上記設定だと、「station10」「station10.example.net」にアクセスすると、「192.168.0.10」に変換・アクセスします。

実際に使ってみよう!

文字だけの説明だと分かりにくいので、実際にhostsファイルを使ってみましょう。

事前準備

実演のために、2台のWebサーバーを作りました。Webブラウザからアクセスすると、以下のようにそれぞれのIPアドレスを表示します。
IPアドレスは「192.168.10.31」「192.168.10.32」なので、それぞれ31サーバー、32サーバーと呼ぶことにします。

31サーバーにアクセスした時の画面( http://192.168.10.31/ )
32サーバーにアクセスしたときの画面( http://192.168.10.32/ )

この2台のサーバーを「test_name」というホスト名とhostsファイルを利用して紐づけてみたいと思います。

hostsファイルの開き方

それでは、Windows10でhostsファイルを設定します。

もし、Linux環境を利用している場合は、

sudo vim /etc/hosts

で開いてください。

まず、以下の手順でメモ帳を管理者権限で実行します。

  1. 画面左下のWindowsマークをクリック

  2. 「Windows アクセサリ」をクリック

  3. 「メモ帳」を右クリック

  4. 「その他」をクリック

  5. 「管理者として実行」をクリック

  6. ユーザアカウント制御の確認が行われるので、「はい」をクリック

次に、メモ帳でhostsファイルを開きます。

1.「ファイル」タブにある「開く」をクリック
2.Cドライブ直下に移動し、「Windows」「System32」「drivers」「etc」と移動
3.右下の「テキスト文書(*.txt)」を「すべてのファイル(*.*)」に変更

4.いくつかファイルが表示されるので、「hosts」ファイルを選択して「開く」をクリック

hostsファイルにはデフォルトで使い方が書かれていますが、気にしないでください。
私のhostsファイルには、次のような記載がありました。

# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

# localhost name resolution is handled within DNS itself.
# 127.0.0.1       localhost
# ::1             localhost


hostsファイルの設定

hostsファイルの下部に、次の設定を追記して保存します。
(32サーバーの設定はコメントアウトしています)

192.168.10.31  test_name
#192.168.10.32  test_name

この設定によって、「test_name」サーバーにアクセスすると、PCは自動的に「192.168.10.31」に変換し31サーバーにアクセスします。
実際にブラウザで「test_name」サーバーの画面を開くと、31サーバーの画面が開かれます。

「test_name」サーバーにアクセスしたときの画面( http://test_name/ )

今度はhostsファイルを以下のように変更して保存します。
31サーバーの設定をコメントアウトし、32サーバーの設定を有効にしました。

#192.168.10.31  test_name
192.168.10.32  test_name

この状態で「test_name」サーバーにアクセスすると、今度は「192.168.10.32」に変換し32サーバーにアクセスします。

「test_name」サーバーにアクセスしたときの画面( http://test_name/ )

このようにhostsファイルを利用すると、同じホスト名を利用しながら異なるサーバーにアクセスできます。

終わりに

今回はhostsファイルの機能を利用して、ホスト名「test_name」を31サーバー、32サーバーに振り分けました。
実際の開発では、開発・試験環境がローカルだったり、31サーバーだったり、32サーバーだったりします。環境変更のたびにURLを変更するのは大変なので、代わりにhostsファイルを書き換えることが多いです。
また、商用環境と検証環境でIPアドレスが異なる、といった環境差分を無くすために利用されます。

hostsファイル以外の名前解決のやり方としては「DNS」がメジャーです。hostsファイルに記載されてないホスト名(例えば、www.yahoo.co.jpなど)はDNSサーバーを利用して名前解決が行われます。

できるだけ短くと思いつつ長くなってしまいましたが、最後までご覧いただきありがとうございました。
「IT業界に入ったけど、hostsってなんだよ!」と思っている方が、少しでもイメージを持てるようになってくれたら幸いです。

参考

/etc/hosts」ファイル - Linux技術者認定 LinuC | LPI-Japan


いいなと思ったら応援しよう!